D3D12_RESOURCE_DESC構造体 (d3d12.h)

テクスチャなどのリソースについて説明します。 この構造は広く使用されています。

構文

typedef struct D3D12_RESOURCE_DESC {
  D3D12_RESOURCE_DIMENSION Dimension;
  UINT64                   Alignment;
  UINT64                   Width;
  UINT                     Height;
  UINT16                   DepthOrArraySize;
  UINT16                   MipLevels;
  DXGI_FORMAT              Format;
  DXGI_SAMPLE_DESC         SampleDesc;
  D3D12_TEXTURE_LAYOUT     Layout;
  D3D12_RESOURCE_FLAGS     Flags;
} D3D12_RESOURCE_DESC;

メンバーズ

Dimension

D3D12_RESOURCE_DIMENSIONの 1 つのメンバー。リソースのディメンション (D3D12_RESOURCE_DIMENSION_TEXTURE1Dなど)、またはバッファー ((D3D12_RESOURCE_DIMENSION_BUFFER) であるかどうかを指定します。

Alignment

配置を指定します。

Width

リソースの幅を指定します。

Height

リソースの高さを指定します。

DepthOrArraySize

リソースの深さを 3D の場合は指定し、1D リソースまたは 2D リソースの配列の場合は配列サイズを指定します。

MipLevels

MIP レベルの数を指定します。

Format

DXGI_FORMATの 1 つのメンバーを指定します。

SampleDesc

DXGI_SAMPLE_DESC 構造体を指定します。

Layout

D3D12_TEXTURE_LAYOUTの 1 つのメンバーを指定します。

Flags

D3D12_RESOURCE_FLAGS 列挙定数としてのビットごとの OR フラグ。

備考

この構造体は次の場合に使用します。

2 つの一般的なリソースはバッファーとテクスチャであり、どちらもこの構造を使用しますが、フィールドの使用方法は大きく異なります。

バッファー

バッファーは連続したメモリ領域です。 Width は、予約済みリソースの D3D12_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORTMaxGPUVirtualAddressBitsPerResource フィールドまたはコミットされたリソースの MaxGPUVirtualAddressBitsPerProcess フィールドのいずれかになります。 ただし、GPU 仮想アドレス空間の枯渇、メモリ常駐の予算 (IDXGIAdapter3::QueryVideoMemoryInfo参照)、またはシステム メモリが最初に簡単に発生する可能性があります。

配置 は、64 KB (D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT) または 0 (実質的には 64 KB) である必要があります。

HeightDepthOrArraySize、および mipLevels は 1 である必要があります。

書式 はDXGI_FORMAT_UNKNOWNする必要があります。

SampleDesc.Count 1、品質 0 にする必要があります。

Layout はD3D12_TEXTURE_LAYOUT_ROW_MAJORする必要があります。バッファー メモリ レイアウトはアプリケーションによって認識され、行メジャー テクスチャ データはバッファーを介してマーシャリングされるのが一般的です。

フラグ は、マイナー例外を除き、バッファーのアプリケーションによって正確に入力される必要があります。 ただし、アプリケーションでは、バッファーへの効率への影響を気にすることなく、最大限の機能サポートを使用できます。 flags フィールドは、テクスチャに関連するプロパティを制御するためのものです。

テクスチャ

テクスチャは、連続するメモリ領域のテクセルの多次元配置であり、レンダリングとサンプリングの帯域幅を最大化するために大幅に最適化されています。 テクスチャ サイズは予測が難しく、アダプターごとに異なります。 アプリケーションでは、ID3D12Device::GetResourceAllocationInfo を使用して、サイズを正確に把握する必要があります。

TEXTURE1D、TEXTURE2D、およびTEXTURE3Dは、すべての形式で直交的にサポートされるわけではありません。 D3D12_FORMAT_SUPPORT1でのD3D12_FORMAT_SUPPORT1_TEXTURE1D、D3D12_FORMAT_SUPPORT1_TEXTURE2D、およびD3D12_FORMAT_SUPPORT1_TEXTURE3Dの使用を参照してください。

WidthHeightDepthOrArraySize は、1 から、特定のフィーチャー レベルとテクスチャ ディメンションでサポートされる最大ディメンションの間である必要があります。 ただし、GPU 仮想アドレス空間の枯渇、メモリ常駐の予算 (IDXGIAdapter3::QueryVideoMemoryInfo参照)、またはシステム メモリが最初に簡単に発生する可能性があります。 圧縮形式の場合、これらのディメンションは論理的です。 例えば:

  • TEXTURE1Dの場合:
    • は、11_0 未満の機能レベルと、機能レベル 11_0 以上のD3D11_REQ_TEXTURE1D_U_DIMENSIONのD3D10_REQ_TEXTURE1D_U_DIMENSION以下にする必要があります。
    • Height は 1 である必要があります。
    • DepthOrArraySize は配列サイズとして解釈され、11_0 未満の機能レベルと機能レベル 11_0 以上のD3D11_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSIONのD3D10_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION以下である必要があります。
  • TEXTURE2Dの場合:
    • 高さ は、11_0 未満のフィーチャ レベルと、D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSIONまたはフィーチャ レベル 11_0 以上のD3D10_REQ_TEXTURE2D_U_OR_V_DIMENSION以下である必要があります。
    • DepthOrArraySize は配列サイズとして解釈され、11_0 未満の機能レベルと、機能レベル 11_0 以上のD3D11_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSIONのD3D10_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION以下である必要があります。
  • TEXTURE3Dの場合:
    • 高さDepthOrArraySize は、11_0 未満の機能レベルと、機能レベル 11_0 以上のD3D11_REQ_TEXTURE2D_U_V_OR_W_DIMENSIONのD3D10_REQ_TEXTURE3D_U_V_OR_W_DIMENSION以下にする必要があります。
    • DepthOrArraySize は深度として解釈されます。
次のノートは、すべてのテクスチャ サイズを対象にしています。

配置

配置 は、0、4 KB、64 KB、または 4 MB のいずれかです。

配置 が 0 に設定されている場合、ランタイムは MSAA テクスチャに 4 MB、それ以外のすべてに 64 KB を使用します。 アプリケーションでは、テクスチャが小さい場合に、いくつかのテクスチャタイプに対して、これらのデフォルトよりも小さいアラインメントを選択できます。 不明なレイアウトと MSAA を持つテクスチャは、64 KB の配置で作成できます (以下で詳しく説明する小さいサイズの制限に合格した場合)。

MSAA を使用せず、レンダー ターゲットフラグも深度ステンシル フラグも持たない不明なレイアウトのテクスチャは、4KB の配置で作成できます (再び、小さいサイズの制限を渡します)。

アプリケーションは、最も詳細なミップ レベルの推定サイズが、より大きいアラインメント制限以下の合計である場合に、より小さいアラインメント されたリソースを作成できます。 ランタイムは、標準的なスウィズルと D3D12 タイル リソースのサイズを模倣する、サイズ推定のアーキテクチャに依存しないメカニズムを使用します。 ただし、タイル のサイズは、このような計算に対するより小さな配置制限になります。 たとえば、レンダー ターゲット以外のテクスチャと深度ステンシル以外のテクスチャを使用すると、ランタイムは 4 KB のほぼ等辺的なタイル図形を想定し、最も詳細なミップ レベルに必要なタイルの数を計算します。 タイルの数が 16 以下の場合、アプリケーションは 4 KB の整列されたリソースを作成できます。 そのため、幅と高さが特定の形式と MSAA に対して十分に小さい限り、任意の配列サイズと任意の数のミップ レベルの mipped tex2d 配列を 4 KB にすることができます。

MipLevels

MipLevels は、WidthHeight、DepthOrArraySize ディメンションでサポートされる最大ミップ レベルまで、0 または 1 にすることができます。 0 を使用すると、API は自動的にサポートされている最大ミップ レベルを計算し、これを使用します。 ただし、一部のリソースとヒープのプロパティではミップ レベルが除外されるため、アプリでは値を 1 として指定する必要があります。

形式ごとの制限については、D3D12_FORMAT_SUPPORT1 の D3D12_FORMAT_SUPPORT1_MIP フィールドを参照してください。 MSAA リソース、D3D12_RESOURCE_FLAG_ALLOW_CROSS_ADAPTERを持つテクスチャ、およびすべてのミップ レベルを排除D3D12_HEAP_FLAG_ALLOW_DISPLAYヒープ。

形式

形式 は、デバイスの機能レベルでサポートされている有効な形式である必要があります。

SampleDesc の

SampleDesc.Count 1 より大きいか、0 以外の 品質 は、TEXTURE2DおよびD3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGETまたはD3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCILが設定されている場合にのみサポートされます。

以下はサポートされていません。

  • D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE、
  • D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS、
  • D3D12_RESOURCE_FLAG_ALLOW_SIMULTANEOUS_ACCESS、
  • D3D12_HEAP_FLAG_ALLOW_DISPLAY
有効な 数の と品質 値の を決定する D3D12_FEATURE_DATA_MULTISAMPLE_QUALITY_LEVELS を参照してください。

必要条件

要件 価値
ヘッダー d3d12.h

関連項目

CD3DX12_RESOURCE_DESC

コア構造 の

D3D12_HEAP_FLAGS