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;
}
要件
対象プラットフォーム | Windows |
ヘッダー | d3d12.h |
Library | D3d12.lib |
[DLL] | D3d12.dll |