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'd フラグ。

注釈

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

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

バッファー

バッファーは連続したメモリ領域です。 は 1 から、予約済みリソースの場合は 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、 Quality は 0 である必要があります。

バッファー メモリ レイアウト はアプリケーションによって認識され、行主テクスチャ データは一般的にバッファーを介してマーシャリングされるため、レイアウトは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の使用に 関するページを参照してください。

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

  • TEXTURE1Dの場合:
    • は、11_0 未満のフィーチャ レベルのD3D10_REQ_TEXTURE1D_U_DIMENSION以下で、フィーチャ レベル 11_0 以上でD3D11_REQ_TEXTURE1D_U_DIMENSIONする必要があります。
    • 高さは 1 にする必要があります。
    • DepthOrArraySize は配列サイズとして解釈され、11_0 未満の特徴レベルではD3D10_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION以下で、特徴レベル 11_0 以上ではD3D11_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の場合:
    • Width および Height および DepthOrArraySize は、11_0 未満のフィーチャ レベルではD3D10_REQ_TEXTURE3D_U_V_OR_W_DIMENSION以下で、機能レベル 11_0 以上ではD3D11_REQ_TEXTURE2D_U_V_OR_W_DIMENSIONする必要があります。
    • DepthOrArraySize は深度として解釈されます。
次のノートは、すべてのテクスチャ サイズに対応しています。

配置

配置 には、0、4 KB、64 KB、または 4 MB のいずれかを指定できます。

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

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

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

MipLevels

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

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

Format

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

SampleDesc

1 より大きい SampleDesc.Count または 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
有効な CountQuality の値を決定するには、「D3D12_FEATURE_DATA_MULTISAMPLE_QUALITY_LEVELS」を参照してください。

要件

要件
Header d3d12.h

こちらもご覧ください

CD3DX12_RESOURCE_DESC

コア構造

D3D12_HEAP_FLAGS