ID3D12Device::GetCopyableFootprints 方法 (d3d12.h)

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

另請參閱

CD3DX12_RESOURCE_DESC

CD3DX12_SUBRESOURCE_FOOTPRINT

ID3D12Device