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 坐标。 对于一维(1-D)子资源,DstY 设置为零。

unnamedParam6

DstZ [in]

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

unnamedParam7

hSrcResource [in]

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

unnamedParam8

SrcSubresource [in]

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

unnamedParam9

pSrcBox [in, 可选]

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

如果 D3D10_DDI_BOX 结构的成员 >=顶部>=底部,或 >=,则 pSrcBox 视为空, ResourceCopyRegion(D3D11_1) 不得执行任何复制作。

[in] CopyFlags

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

返回值

没有

言论

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

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

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

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

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

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

复制

若要复制,ResourceCopyRegion(D3D11_1) 可确保通过驱动程序的 CreateResource(D3D11) 函数创建源和目标资源,并满足以下条件:

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

转换

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

  • 目标资源未使用 D3D11DDIARG_CREATERESOURCE 结构的 Usage 成员中设置的 D3D10_DDI_USAGE_IMMUTABLE 值创建。
  • 如果源资源或目标资源在 BindFlagsD3D11DDIARG_CREATERESOURCE 成员中设置了D3D10_DDI_BIND_DEPTH_STENCIL位,或者是多采样资源, ResourceCopyRegion(D3D11_1) 验证 pSrcBox 参数是否 为 NULL,而 DstXDstYDstZ 参数为 0。
  • 子资源索引处于范围内。
  • 对齐限制适用于坐标。
  • 源和目标资源不是完全相同的子资源的一部分。
  • Format 成员中指定的 D3D11DDIARG_CREATERESOURCE 的每个源和目标资源格式都位于同一个无类型组中。
  • 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