ID3D12Device::GetCopyableFootprints 方法 (d3d12.h)
获取可复制的资源布局。 在上传堆中子分配空间时,帮助应用填充 D3D12_PLACED_SUBRESOURCE_FOOTPRINT 和 D3D12_SUBRESOURCE_FOOTPRINT 。
语法
void GetCopyableFootprints(
[in] const D3D12_RESOURCE_DESC *pResourceDesc,
[in] UINT FirstSubresource,
[in] UINT NumSubresources,
UINT64 BaseOffset,
[out, optional] D3D12_PLACED_SUBRESOURCE_FOOTPRINT *pLayouts,
[out, optional] UINT *pNumRows,
[out, optional] UINT64 *pRowSizeInBytes,
[out, optional] UINT64 *pTotalBytes
);
参数
[in] pResourceDesc
类型: const D3D12_RESOURCE_DESC*
资源的说明,作为指向 D3D12_RESOURCE_DESC 结构的指针。
[in] FirstSubresource
类型: UINT
资源中第一个子资源的索引。 有效值的范围是 0 到 D3D12_REQ_SUBRESOURCES。
[in] NumSubresources
类型: UINT
资源中的子资源数。 有效值范围为 0 到 (D3D12_REQ_SUBRESOURCES - FirstSubresource) 。
BaseOffset
类型: UINT64
资源偏移量(以字节为单位)。
[out, optional] pLayouts
类型: D3D12_PLACED_SUBRESOURCE_FOOTPRINT*
指向长度为 NumSubresources 的数组 (指针,) D3D12_PLACED_SUBRESOURCE_FOOTPRINT 结构,用每个子资源的说明和位置填充。
[out, optional] pNumRows
类型: UINT*
指向长度为 NumSubresources 的数组 (指针,) 要用每个子资源的行数填充的整数变量。
[out, optional] pRowSizeInBytes
类型: UINT64*
指向长度 (为 NumSubresources 的数组的指针) 整数变量) ,每个条目将用每个子资源的未填充大小(以行的字节为单位)进行填充。
例如,如果 Texture2D 资源的宽度为 32,每个像素的字节数为 4,
则 pRowSizeInBytes 返回 128。
pRowSizeInBytes 不应与 行间距混淆,因为检查 pLayouts 并从中获取行间距会获得 256,因为它与D3D12_TEXTURE_DATA_PITCH_ALIGNMENT对齐。
[out, optional] pTotalBytes
类型: UINT64*
指向要用总大小(以字节为单位)填充的整数变量的指针。
返回值
无
备注
在上传堆中子分配空间时,此例程可帮助应用程序填写 D3D12_PLACED_SUBRESOURCE_FOOTPRINT 和 D3D12_SUBRESOURCE_FOOTPRINT 结构。 生成的结构与 GPU 适配器无关,这意味着值不会因 GPU 适配器而异。 GetCopyableFootprints 使用 D3D12_RESOURCE_DESC结构 ( 的资源格式、纹理布局和对齐要求) 指定的详细信息来填充子资源结构。 应用程序有权访问所有这些详细信息,因此此方法或它的变体可以作为应用的一部分编写。
示例
D3D12Multithreading 示例使用 ID3D12Device::GetCopyableFootprints,如下所示:
// Returns required size of a buffer to be used for data upload
inline UINT64 GetRequiredIntermediateSize(
_In_ ID3D12Resource* pDestinationResource,
_In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource,
_In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources)
{
D3D12_RESOURCE_DESC Desc = pDestinationResource->GetDesc();
UINT64 RequiredSize = 0;
ID3D12Device* pDevice;
pDestinationResource->GetDevice(__uuidof(*pDevice), reinterpret_cast<void**>(&pDevice));
pDevice->GetCopyableFootprints(&Desc, FirstSubresource, NumSubresources, 0, nullptr, nullptr, nullptr, &RequiredSize);
pDevice->Release();
return RequiredSize;
}
请参阅 D3D12 参考中的示例代码。
要求
目标平台 | Windows |
标头 | d3d12.h |
Library | D3d12.lib |
DLL | D3d12.dll |