取得可複製的資源配置。 幫助應用程式在上傳堆中子分配空間時填補 D3D12_PLACED_SUBRESOURCE_FOOTPRINT 和 D3D12_SUBRESOURCE_FOOTPRINT 。
Syntax
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
);
Parameters
[in] pResourceDesc
類型: const D3D12_RESOURCE_DESC*
資源的描述,作為指向 D3D12_RESOURCE_DESC 結構的指標。
[in] FirstSubresource
類型: UINT
資源中第一個子資源的索引。 有效值的範圍是 0 到 D3D12_REQ_SUBRESOURCES。
[in] NumSubresources
類型: UINT
資源中的子資源數目。 有效值範圍為 0 到 (D3D12_REQ_SUBRESOURCES - 第一子資源)。
BaseOffset
類型: UINT64
偏移量(位元組),是加到pLayouts陣列中每個D3D12_PLACED_SUBRESOURCE_FOOTPRINT的偏移量。
[out, optional] pLayouts
類型: D3D12_PLACED_SUBRESOURCE_FOOTPRINT*
指向一個長度為 NumSubresources 的陣列指標,包含 D3D12_PLACED_SUBRESOURCE_FOOTPRINT 結構,並填入每個子資源的描述與位置。
[out, optional] pNumRows
類型: UINT*
一個指向整數變數陣列(長度為 NumSubresources)的指標,該陣列將填入每個子資源的列數。
[out, optional] pRowSizeInBytes
類型: UINT64*
一個指標指向一個整數變數陣列(長度為 NumSubresources),每個項目都填入每個子資源的無填充大小(位元組)。
例如,如果 Texture2D 資源寬度為 4,且每個圖元的位元組數為 4,
然後 pRowSizeInBytes 回傳 128。
pRowSizeInBytes 不應與 列間距混淆,因為檢視 pLayout 並取得列間距,會得到 256,因為它對齊到D3D12_TEXTURE_DATA_PITCH_ALIGNMENT。
[out, optional] pTotalBytes
類型: UINT64*
整數變數的指標,以位元組為單位填滿總大小。 若 pResourceDesc 無效,則 pTotalBytes 的值設為 UINT64_MAX。
返回值
None
Remarks
此例程協助應用程式在上傳堆中子分配空間時,填寫 D3D12_PLACED_SUBRESOURCE_FOOTPRINT 與 D3D12_SUBRESOURCE_FOOTPRINT 結構。 產生的結構與 GPU 配接器無關,這表示值不會因一個 GPU 配接器而有所不同。 GetCopyableFootprints 利用資源格式、材質配置及對齊需求(來自 D3D12_RESOURCE_DESC 結構)的指定細節來填充子資源結構。 應用程式可以存取所有這些詳細數據,因此此方法或其中的變化可以撰寫為應用程式的一部分。
Examples
D3D12 多執行緒範例使用 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 參考 中的範例程式代碼。
Requirements
| Requirement | Value |
|---|---|
| 目標平臺 | Windows |
| Header | d3d12.h |
| Library | D3d12.lib |
| DLL | D3d12.dll |