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除外。 因此,如果驱动程序在调用 pfnSetErrorCb 函数时传递了除D3DDDIERR_DEVICEREMOVED以外的任何错误,则 Direct3D 运行时将确定错误严重。 即使删除了设备,驱动程序也不需要返回D3DDDIERR_DEVICEREMOVED;但是,如果设备删除干扰 了 ResourceCopy (通常不应) 执行的操作,驱动程序可以返回D3DDDIERR_DEVICEREMOVED。

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

对于在调用驱动程序的 CreateResource (D3D10) 函数时创建的源和目标资源的 D3D10DDIARG_CREATERESOURCEResourceDimension 成员,Direct3D 10.1 版本的 Resource3D 10.1 版本与 Direct3D 10.0 版本具有主要功能差异。 对于 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 中没有区分资源级别的 TexCube。 ResourceCopy 的 Direct3D 10.1 版本仅表示它是否可以复制 TexCube。 在 Direct3D 版本 10.0 中,复制资源、验证多个呈现目标等 (即,要求资源类型相同的各种操作) 都包含 TexCube 的区别以纳入资源类型。 在 Direct3D 版本 10.1 中,运行时只能确定 Tex2D。

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

复制

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

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

转换

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

  • 目标资源不是使用在 D3D10DDIARG_CREATERESOURCE 结构的 Usage 成员中设置 D3D10_DDI_USAGE_IMMUTABLE 值创建的。
  • 源和目标资源是使用相同的资源类型创建 (缓冲区、一维 (一维) 纹理等) ,方法是在 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