ID3D12Device::CopyDescriptors 方法 (d3d12.h)

将描述符从源复制到目标。

语法

void CopyDescriptors(
  [in]           UINT                              NumDestDescriptorRanges,
  [in]           const D3D12_CPU_DESCRIPTOR_HANDLE *pDestDescriptorRangeStarts,
  [in, optional] const UINT                        *pDestDescriptorRangeSizes,
  [in]           UINT                              NumSrcDescriptorRanges,
  [in]           const D3D12_CPU_DESCRIPTOR_HANDLE *pSrcDescriptorRangeStarts,
  [in, optional] const UINT                        *pSrcDescriptorRangeSizes,
  [in]           D3D12_DESCRIPTOR_HEAP_TYPE        DescriptorHeapsType
);

参数

[in] NumDestDescriptorRanges

类型: UINT

要复制到的目标描述符范围的数目。

[in] pDestDescriptorRangeStarts

类型: const D3D12_CPU_DESCRIPTOR_HANDLE*

要复制到 D3D12_CPU_DESCRIPTOR_HANDLE 对象的数组。

所有目标和源描述符都必须位于同一 D3D12_DESCRIPTOR_HEAP_TYPE的堆中。

[in, optional] pDestDescriptorRangeSizes

类型: const UINT*

要复制到的目标描述符范围大小的数组。

[in] NumSrcDescriptorRanges

类型: UINT

要从中复制的源描述符范围的数目。

[in] pSrcDescriptorRangeStarts

类型: const D3D12_CPU_DESCRIPTOR_HANDLE*

要从 中复制D3D12_CPU_DESCRIPTOR_HANDLE 对象的数组。

重要

pSrcDescriptorRangeStarts 参数中的所有元素都必须位于不可着色器可见的描述符堆中。 这是因为着色器可见的描述符堆可能在 WRITE_COMBINE 内存或 GPU 本地内存中创建,读取速度非常慢。 如果应用程序通过将给定传递或帧所需的描述符从本地“存储”描述符堆复制到 GPU 绑定的描述符堆来管理描述符堆,请对存储堆使用着色器不透明堆,并根据需要复制到 GPU 可见堆中。

[in, optional] pSrcDescriptorRangeSizes

类型: const UINT*

要从中复制的源描述符范围大小的数组。

[in] DescriptorHeapsType

类型: D3D12_DESCRIPTOR_HEAP_TYPE

D3D12_DESCRIPTOR_HEAP_TYPE类型的值,该值指定要复制的描述符堆的类型。 这是必需的,因为不同的描述符类型可能具有不同的大小。

源和目标描述符堆的类型必须相同,否则调试层将发出错误。

返回值

备注

如果适用,首选 ID3D12Device::CopyDescriptorsSimple 而不是此方法。 由于复制的线性特性,它可以有更好的 CPU 缓存未命中率。

要求

要求
目标平台 Windows
标头 d3d12.h
Library D3D12.lib
DLL D3D12.dll

另请参阅

复制描述符

ID3D12Device