PFND3D11_1DDI_RESOURCECOPYREGION回调函数 (d3d10umddi.h)

将源子资源区域复制到目标子资源上的位置。

语法

PFND3D11_1DDI_RESOURCECOPYREGION Pfnd3d111DdiResourcecopyregion;

void Pfnd3d111DdiResourcecopyregion(
       D3D10DDI_HDEVICE unnamedParam1,
       D3D10DDI_HRESOURCE unnamedParam2,
       UINT unnamedParam3,
       UINT unnamedParam4,
       UINT unnamedParam5,
       UINT unnamedParam6,
       D3D10DDI_HRESOURCE unnamedParam7,
       UINT unnamedParam8,
       const D3D10_DDI_BOX *unnamedParam9,
  [in] UINT CopyFlags
)
{...}

参数

unnamedParam1

hDevice [in]

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

unnamedParam2

hDstResource [in]

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

unnamedParam3

DstSubresource [in]

指示要复制到的目标子资源的索引。

unnamedParam4

DstX [in]

目标子资源的 x 坐标。

unnamedParam5

DstY [in]

目标子资源的 y 坐标。 对于一维 (一维) 子资源, DstY 设置为零。

unnamedParam6

DstZ [in]

目标子资源的 z 坐标。 对于一维 (一维) 和二维 (二维) 子资源, DstZ 设置为零。

unnamedParam7

hSrcResource [in]

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

unnamedParam8

SrcSubresource [in]

一个索引,指示要从中复制的源子资源。

unnamedParam9

pSrcBox [in, optional]

指向 D3D10_DDI_BOX 结构的指针,该结构指定适合源或目标子资源的框。 如果 pSrcBoxNULL,驱动程序应将整个源子对象复制到目标。

如果 D3D10_DDI_BOX 结构的成员为 left>=righttop>=bottomfront>=back,则 pSrcBox 被视为空, ResourceCopyRegion (D3D11_1) 不得执行任何复制操作。

[in] CopyFlags

一个 值,该值将复制操作的特征指定为D3D11_1_DDI_COPY_FLAGS枚举类型中值的按位 OR

返回值

备注

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

Microsoft Direct3D 运行时调用用户模式显示驱动程序的 ResourceCopyRegion (D3D11_1) 函数,以通知驱动程序从指定的源子资源区域复制到指定目标子资源上的位置。 源子资源和目标子资源可以是同一资源的同一子资源。 源资源和目标资源必须是同一类型的资源,并且必须具有可相互转换) (DXGI_FORMAT 类型值的格式类型。

对于缓冲区,所有坐标都必须以字节为单位;而对于纹理,所有坐标都必须以像素为单位。 pSrcBox 参数指向的框不得扩展到源子资源区域或目标子资源的边缘。 当前不得映射源和目标资源。 此外,资源创建标志限制资源是否可以参与复制操作。

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

驱动程序可以实现 ResourceCopyRegion (D3D11_1) 函数,该函数可以包含用于处理复制和转换的 switch 语句。 也就是说,驱动程序可以实现一个 ResourceCopyRegion (D3D11_1) ,并且可以将 D3D11_1DDI_DEVICEFUNCS 结构的 pfnResourceConvertRegion 成员与 D3D11_1DDI_DEVICEFUNCSpfnResourceCopyRegion 成员一起设置为指向 ResourceCopyRegion (D3D11_1) 。 但是,为了提高性能,驱动程序可以实现单独的 ResourceCopyRegion (D3D11_1) ResourceConvertRegion (D3D11_1) 函数。

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

复制

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

  • 目标资源不是使用在 D3D11DDIARG_CREATERESOURCE 结构的 Usage 成员中设置 的D3D10_DDI_USAGE_IMMUTABLE 值创建的。
  • 如果源或目标资源在 D3D10DDIARG_CREATERESOURCE 的 BindFlags 成员中设置了D3D10_DDI_BIND_DEPTH_STENCIL位,或者是多采样资源, 则 ResourceCopyRegion (D3D11_1) 验证 pSrcBox 参数是否为 NULL,而 DstXDstYDstZ 参数是否为 0。
  • 子资源索引在范围内。
  • 对齐限制适用于坐标。
  • 源资源和目标资源不属于完全相同的子资源。
  • D3D11DDIARG_CREATERESOURCEFormat 成员中指定的每个源和目标资源格式都位于同一个无类型组中。
  • 源资源和目标资源必须具有相同数量的样本和质量级别:单采样资源除外,其样本数必须相同。
ResourceCopyRegion (D3D11_1) 不确保目标偏移量的源框完全适合资源。 ResourceCopyRegion (D3D11_1) 也不确保当前未映射任何子资源。

转换

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

  • 目标资源不是使用在 D3D11DDIARG_CREATERESOURCE 结构的 Usage 成员中设置 的D3D10_DDI_USAGE_IMMUTABLE 值创建的。
  • 如果源或目标资源在 D3D11DDIARG_CREATERESOURCEBindFlags 成员中设置了D3D10_DDI_BIND_DEPTH_STENCIL位,或者是多采样资源,则 ResourceCopyRegion (D3D11_1) 验证 pSrcBox 参数是否为 NULL,而 DstXDstYDstZ 参数是否为 0。
  • 子资源索引在范围内。
  • 对齐限制适用于坐标。
  • 源资源和目标资源不属于完全相同的子资源。
  • D3D11DDIARG_CREATERESOURCEFormat 成员中指定的每个源和目标资源格式都位于同一个无类型组中。
  • D3D11DDIARG_CREATERESOURCEFormat 成员中指定的每个源和目标资源格式都支持相应的转换操作。
  • 源资源和目标资源必须具有相同数量的样本和质量级别:单采样资源除外,其样本数必须相同。
ResourceCopyRegion (D3D11_1) 不确保当前未映射任何子资源。 ResourceCopyRegion (D3D11_1) 也无法确保目标偏移的源框完全适合资源。

要求

要求
最低受支持的客户端 Windows 8
最低受支持的服务器 Windows Server 2012
目标平台 桌面
标头 d3d10umddi.h (包括 D3d10umddi.h)

另请参阅

CreateResource (D3D11)

D3D10_DDI_BOX

D3D11DDIARG_CREATERESOURCE

D3D11_1DDI_DEVICEFUNCS

D3D11_1_DDI_COPY_FLAGS

pfnSetErrorCb