次の方法で共有


D3D12_RAYTRACING_GEOMETRY_TRIANGLES_DESC 構造体 (d3d12.h)

レイトレーシング ジオメトリとして使用される一連の三角形について説明します。 この構造体が指すジオメトリは、インデックス付きまたはインデックスなしの三角形リスト形式で常に使用されます。 三角形のストリップはサポートされていません。

構文

typedef struct D3D12_RAYTRACING_GEOMETRY_TRIANGLES_DESC {
  D3D12_GPU_VIRTUAL_ADDRESS            Transform3x4;
  DXGI_FORMAT                          IndexFormat;
  DXGI_FORMAT                          VertexFormat;
  UINT                                 IndexCount;
  UINT                                 VertexCount;
  D3D12_GPU_VIRTUAL_ADDRESS            IndexBuffer;
  D3D12_GPU_VIRTUAL_ADDRESS_AND_STRIDE VertexBuffer;
} D3D12_RAYTRACING_GEOMETRY_TRIANGLES_DESC;

メンバー

Transform3x4

アクセラレーション構造のビルド中に VertexBuffer の頂点に適用される行主レイアウトの 3x4 アフィン変換行列のアドレス。 VertexBuffer の内容は変更されません。 2D 頂点形式を使用する場合、変換は 3 番目の頂点コンポーネントが 0 と見なされて適用されます。

Transform3x4 が NULL の場合、頂点は変換されません。 Transform3x4 を使用すると、アクセラレーション構造ビルドの計算やメモリ要件が増加する可能性があります。

が指すメモリは、 状態D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCEである必要があります。 アドレスは、 D3D12_RAYTRACING_TRANSFORM3X4_BYTE_ALIGNMENTとして定義された 16 バイトにアラインする必要があります。

IndexFormat

IndexBuffer のインデックスの形式。 次のいずれかである必要があります。

  • DXGI_FORMAT_UNKNOWN - IndexBuffer が NULL の場合
  • DXGI_FORMAT_R32_UINT
  • DXGI_FORMAT_R16_UINT

VertexFormat

VertexBuffer の頂点の形式。 次のいずれかである必要があります。

  • DXGI_FORMAT_R32G32_FLOAT - 3 番目のコンポーネントは 0 と見なされます
  • DXGI_FORMAT_R32G32B32_FLOAT
  • DXGI_FORMAT_R16G16_FLOAT - 3 番目のコンポーネントは 0 と見なされます
  • DXGI_FORMAT_R16G16B16A16_FLOAT - A16 コンポーネントは無視され、頂点ストライドを 6 バイトに設定するなど、他のデータをそこにパックできます。
  • DXGI_FORMAT_R16G16_SNORM - 3 番目のコンポーネントは 0 と見なされます
  • DXGI_FORMAT_R16G16B16A16_SNORM - A16 コンポーネントは無視され、頂点ストライドを 6 バイトに設定するなど、他のデータをそこにパックできます。

階層 1.1 デバイスでは、次の追加形式がサポートされています。

  • DXGI_FORMAT_R16G16B16A16_UNORM - A16 コンポーネントは無視され、頂点ストライドを 6 バイトに設定するなど、他のデータをそこにパックできます
  • DXGI_FORMAT_R16G16_UNORM - 3 番目のコンポーネントが 0 と見なされます
  • DXGI_FORMAT_R10G10B10A2_UNORM - A2 コンポーネントは無視され、stride は 4 バイトである必要があります
  • DXGI_FORMAT_R8G8B8A8_UNORM - A8 コンポーネントは無視され、頂点ストライドを 3 バイトに設定するなど、他のデータをそこにパックできます
  • DXGI_FORMAT_R8G8_UNORM - 3 番目のコンポーネントは 0 と見なされます
  • DXGI_FORMAT_R8G8B8A8_SNORM - A8 コンポーネントは無視され、頂点ストライドを 3 バイトに設定するなど、他のデータをそこにパックできます
  • DXGI_FORMAT_R8G8_SNORM - 3 番目のコンポーネントが 0 と見なされます

IndexCount

IndexBuffer のインデックスの数。 IndexBuffer が NULL の場合は 0 にする必要があります。

VertexCount

VertexBuffer 内の頂点の数。

IndexBuffer

頂点インデックスの配列。 NULL の場合、三角形はインデックスが作成されません。 グラフィックスと同様に、アドレスは IndexFormat のサイズに合わせる必要があります。

が指すメモリは、 状態D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCEである必要があります。 アプリがグラフィックス入力アセンブラーとレイトレーシング アクセラレーション構造ビルド入力の間でインデックス バッファー入力を共有する場合は、リソースを読み取り状態の組み合わせ (D3D12_RESOURCE_STATE_INDEX_BUFFER D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE | など) に同時に配置できることに注意してください。

VertexBuffer

ストライドを含む頂点の配列。 アドレスとストライドのアラインメントは、コンポーネント サイズの倍数である必要があります。そのため、32 ビット コンポーネントを含む形式の場合は 4 バイト、16 ビット コンポーネントを含む形式の場合は 2 バイトです。 グラフィックスとは異なり、ストライドには制約はありません。値の下位 32 ビットがすべて使用される点を除いて、フィールドは UINT64 であり、隣接するフィールドをクリーンに/明らかにすべての場所に揃えるために純粋に UINT64 です。 各頂点の位置はストライド範囲の開始アドレスにあると予想され、余分なスペースはすべて、アクセラレーション構造のビルドでは無視されます。 この余分な領域には、頂点属性などの他のアプリ データが含まれている可能性があります。これは、頂点バッファーまたは他の場所でインターリーブされているかどうかにかかわらず、アプリがシェーダーで手動でフェッチする役割を担います。

が指すメモリは、 状態D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCEである必要があります。 アプリがグラフィックス入力アセンブラーとレイトレーシング アクセラレーション構造ビルド入力の間で頂点バッファー入力を共有する場合、リソースを読み取り状態の組み合わせ (たとえば、D3D12_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE | ) に同時に配置できることに注意してください。

要件

要件
Header d3d12.h