PFND3D10DDI_RESOURCECOPY回调函数 (d3d10umddi.h)

ResourceCopy 函数将整个源资源复制到目标资源。

语法

PFND3D10DDI_RESOURCECOPY Pfnd3d10ddiResourcecopy;

void Pfnd3d10ddiResourcecopy(
  D3D10DDI_HDEVICE unnamedParam1,
  D3D10DDI_HRESOURCE unnamedParam2,
  D3D10DDI_HRESOURCE unnamedParam3
)
{...}

参数

unnamedParam1

hDevice [in]

显示设备的句柄(图形上下文)。

unnamedParam2

hDstResource [in]

要复制到的目标资源的句柄。

unnamedParam3

hSrcResource [in]

要从中复制的源资源的句柄。

返回值

没有

言论

驱动程序可以使用 pfnSetErrorCb 回调函数来设置错误代码。

Microsoft Direct3D 运行时调用用户模式显示驱动程序的 ResourceCopy 函数,以通知驱动程序从指定的源资源复制到指定的目标资源。 源和目标资源不能是同一资源。 源资源和目标资源必须是同一类型的资源,并且具有相同维度。 这两个资源的格式类型(DXGI_FORMAT类型值)必须相互转换。 当前不能映射源和目标资源。 此外,资源创建标志限制资源是否可以参与复制作。

驱动程序不应遇到任何错误,除非D3DDDIERR_DEVICEREMOVED。 因此,如果驱动程序通过除D3DDDIERR_DEVICEREMOVED以外的任何错误,在调用 pfnSetErrorCb 函数时,Direct3D 运行时将确定错误至关重要。 即使设备已删除,驱动程序也不需要返回D3DDDIERR_DEVICEREMOVED;但是,如果设备删除干扰了 ResourceCopy(通常不应发生),驱动程序可以返回D3DDDIERR_DEVICEREMOVED。

注意 以下部分仅适用于 Microsoft direct3D 版本 10.1 及更高版本(即 Service Pack 1(SP1)及更高版本以及 Windows Server 2008 及更高版本)。
 
驱动程序可以实现 ResourceCopy 函数,该函数可以包含 开关 语句来处理复制和转换。 也就是说,驱动程序可以实现一个 ResourceCopy,并且可以将 D3D10_1DDI_DEVICEFUNCS 结构的 pfnResourceConvert 成员设置为指向 ResourceCopy,以及 D3D10_1DDI_DEVICEFUNCS pfnResourceCopy 成员。 但是,为了提高性能,驱动程序可以实现单独的 ResourceCopyResourceConvert 函数。

ResourceCopy 的 Direct3D 10.1 版本与 Direct3D 10.0 版本的主要功能区别在于,ResourceDimension 成员 D3D10DDIARG_CREATERESOURCE 在调用驱动程序的 CreateResource(D3D10) 函数中创建的源和目标资源。 对于 Direct3D 10.0 版本的 ResourceCopy,源和目标资源的 D3D10DDIARG_CREATERESOURCE ResourceDimension 成员必须匹配。 ResourceCopy 的 Direct3D 10.1 版本允许对源和目标资源的 D3D10DDIARG_CREATERESOURCE ResourceDimension 成员进行轻微放松。 Direct3D 10.1 版本的 ResourceCopy 允许在 TexCube 目标资源或 Tex2D 目标资源上复制 Tex2D 源资源。 此外,资源级别的 TexCube 区别在 Direct3D 版本 10.1 中消失。 ResourceCopy 的 Direct3D 10.1 版本 仅表示是否可以复制 TexCube。 在 Direct3D 版本 10.0 中,复制资源、验证多个呈现目标等(即需要资源类型相同的各种作)都包括 TexCube 将考虑到资源类型中的区别。 在 Direct3D 版本 10.1 中,运行时只能确定 Tex2D。

以下部分列出了复制和转换的条件:

复制

若要复制,ResourceCopy 可确保通过驱动程序的 createResource(D3D10)CreateResource(D3D10) 函数创建源和目标资源,条件如下:

  • 目标资源未使用 D3D10DDIARG_CREATERESOURCE 结构的 Usage 成员中设置的 D3D10_DDI_USAGE_IMMUTABLE 值创建。
  • 源和目标资源是通过在D3D10DDIARG_CREATERESOURCE的 ResourceDimension 成员中设置相同的值,使用相同的资源类型和维度(缓冲区、一维(1-D)纹理等来创建的。
  • 源和目标资源不是完全相同的资源的一部分。
  • Format D3D10DDIARG_CREATERESOURCE 成员中指定的每个源和目标资源格式都位于同一个无类型组中。
  • 源资源和目标资源必须具有相同数量的样本和质量级别:除了单采样资源,这些资源必须只有相同数量的样本。
ResourceCopy 不确保当前未映射任何子资源。

转换

对于转换,ResourceCopy 可确保通过驱动程序的 createResource(D3D10)createResource(D3D10) 函数创建源和目标资源,条件如下:

  • 目标资源未使用 D3D10DDIARG_CREATERESOURCE 结构的 Usage 成员中设置的 D3D10_DDI_USAGE_IMMUTABLE 值创建。
  • 源和目标资源是使用相同的资源类型(缓冲区、一维(1-D)纹理等方式创建的,方法是在D3D10DDIARG_CREATERESOURCE的 ResourceDimension 成员中设置相同的值。
  • 源和目标资源的维度与转换匹配。
  • 源和目标资源不是完全相同的资源的一部分。
  • D3D10DDIARG_CREATERESOURCE的 Format 成员中指定的每个源和目标资源格式都支持适当的转换作。 对于 mipped 块压缩的资源,维度都验证为 2 的幂。
  • 源资源和目标资源必须具有相同数量的样本和质量级别:除了单采样资源,这些资源必须只有相同数量的样本。
ResourceCopy 不确保当前未映射任何子资源。

要求

要求 价值
最低支持的客户端 在 Windows Vista 和更高版本的 Windows作系统中可用。
目标平台 桌面
标头 d3d10umddi.h (包括 D3d10umddi.h)

另请参阅

CreateResource(D3D10)

D3D10DDIARG_CREATERESOURCE

D3D10DDI_DEVICEFUNCS

D3D10_1DDI_DEVICEFUNCS

pfnSetErrorCb