共用方式為


ID3D12Device::GetCopyableFootprints 方法 (d3d12.h)

取得可複製的資源配置。 幫助應用程式在上傳堆中子分配空間時填補 D3D12_PLACED_SUBRESOURCE_FOOTPRINTD3D12_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_FOOTPRINTD3D12_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

另請參閱

CD3DX12_RESOURCE_DESC

CD3DX12_SUBRESOURCE_FOOTPRINT

ID3D12Device