ID3D11DeviceContext::CopyResource 方法 (d3d11.h)

使用 GPU 将源资源的全部内容复制到目标资源。

语法

void CopyResource(
  [in] ID3D11Resource *pDstResource,
  [in] ID3D11Resource *pSrcResource
);

参数

[in] pDstResource

类型: ID3D11Resource*

指向表示目标资源的 ID3D11Resource 接口的指针。

[in] pSrcResource

类型: ID3D11Resource*

指向表示源资源的 ID3D11Resource 接口的指针。

返回值

备注

此方法不寻常,因为它会导致 GPU 执行复制操作 (类似于 CPU) 的 memcpy。 因此,它具有一些旨在提高性能的限制。 例如,源和目标资源:

  • 必须是不同的资源。
  • 必须是同一类型。
  • 必须具有相同的尺寸 (包括宽度、高度、深度和大小(视情况而定) )。
  • 必须具有兼容的 DXGI 格式,这意味着格式必须相同或至少来自同一类型组。 例如,可以将DXGI_FORMAT_R32G32B32_FLOAT纹理复制到DXGI_FORMAT_R32G32B32_UINT纹理,因为这两种格式都位于DXGI_FORMAT_R32G32B32_TYPELESS组中。 CopyResource 可以在几种格式类型之间复制。 有关详细信息,请参阅 使用 Direct3D 10.1 进行格式转换
  • 当前无法映射。
CopyResource 仅支持复制;它不支持任何拉伸、颜色键或混合。 CopyResource 可以在几种格式类型之间重新解释资源数据。 有关详细信息,请参阅 使用 Direct3D 10.1 进行格式转换

不能将 不可变 资源用作目标。 可以使用 深度模具 资源作为源或目标,前提是功能级别D3D_FEATURE_LEVEL_10_1或更高。 对于功能级别9_x,使用 D3D11_BIND_DEPTH_STENCIL 标志创建的资源只能用作 CopyResource 的源。 使用多重采样功能创建的资源 (看到 DXGI_SAMPLE_DESC) 仅当源和目标具有相同的多采样计数和质量时,才能用作源和目标。 如果源和目标在多采样计数和质量方面不同,或者如果一个是多采样的,而另一个不是多重采样,则对 ID3D11DeviceContext::CopyResource 的调用将失败。 使用 ID3D11DeviceContext::ResolveSubresource 将多采样资源解析为非多采样资源。

方法是异步调用,可以将其添加到命令缓冲区队列。 这会尝试删除复制数据时可能发生的管道停止。 有关详细信息,请参阅 性能注意事项

如果只需要复制资源中的部分数据,建议改用 ID3D11DeviceContext::CopySubresourceRegion

要求

要求
目标平台 Windows
标头 d3d11.h
Library D3D11.lib

另请参阅

ID3D11DeviceContext

ID3D11Resource