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*

各サブリソースの説明と配置を入力するD3D12_PLACED_SUBRESOURCE_FOOTPRINT構造体の配列 (長さ NumSubresources) へのポインター。

[out, optional] pNumRows

型: UINT*

各サブリソースの行数を入力する整数変数の配列 ( NumSubresources の長さ) へのポインター。

[out, optional] pRowSizeInBytes

型: UINT64*

整数変数の配列 (長 さ NumSubresources) へのポインター。各エントリは、各サブリソースの行の非パッド サイズ (バイト単位) で埋められます。

たとえば、Texture2D リソースの幅が 32 で、ピクセルあたりのバイト数が 4 の場合、

pRowSizeInBytes は 128 を返します。

pRowSizeInBytes は、pLayouts を調べてから行ピッチを取得すると、D3D12_TEXTURE_DATA_PITCH_ALIGNMENTに合わせて 256 が得られるので、行ピッチと混同しないでください。

[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

関連項目

CD3DX12_RESOURCE_DESC

CD3DX12_SUBRESOURCE_FOOTPRINT

ID3D12Device