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 |
程式庫 | D3d12.lib |
Dll | D3d12.dll |