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 頂點格式,則會套用轉換,並將第三個頂點元件假設為零。

如果 Transform3x4 是 NULL,則不會轉換頂點。 使用 Transform3x4 可能會導致加速結構建置的計算和/或記憶體需求增加。

指向的記憶體必須處於狀態 D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE。 地址必須對齊 16 個字節,定義為 D3D12_RAYTRACING_TRANSFORM3X4_BYTE_ALIGNMENT

IndexFormat

IndexBuffer 中索引的格式。 必須是下列其中之一:

  • DXGI_FORMAT_UNKNOWN - 當 IndexBuffer 為 NULL 時
  • DXGI_FORMAT_R32_UINT
  • DXGI_FORMAT_R16_UINT

VertexFormat

頂點Buffer 中頂點的格式。 必須是下列其中之一:

  • DXGI_FORMAT_R32G32_FLOAT - 假設第三個元件為 0
  • DXGI_FORMAT_R32G32B32_FLOAT
  • DXGI_FORMAT_R16G16_FLOAT - 假設第三個元件為 0
  • DXGI_FORMAT_R16G16B16A16_FLOAT - 忽略 A16 元件,其他數據可以封裝在該處,例如將頂點步幅設定為 6 個字節。
  • DXGI_FORMAT_R16G16_SNORM - 假設第三個元件為 0
  • DXGI_FORMAT_R16G16B16A16_SNORM - 忽略 A16 元件,其他數據可以封裝在該處,例如將頂點步幅設定為 6 個字節。

第 1.1 層裝置支援下列其他格式:

  • DXGI_FORMAT_R16G16B16A16_UNORM - 忽略 A16 元件,其他數據可以封裝在該處,例如將頂點步幅設定為 6 個字節
  • DXGI_FORMAT_R16G16_UNORM - 假設第三個元件為 0
  • DXGI_FORMAT_R10G10B10A2_UNORM - 忽略 A2 元件,跨步必須是 4 個字節
  • DXGI_FORMAT_R8G8B8A8_UNORM - 忽略 A8 元件,其他數據可以封裝在該處,例如將頂點步幅設定為 3 個字節
  • DXGI_FORMAT_R8G8_UNORM - 假設第三個元件為 0
  • DXGI_FORMAT_R8G8B8A8_SNORM - 忽略 A8 元件,其他數據可以封裝在該處,例如將頂點步幅設定為 3 個字節
  • DXGI_FORMAT_R8G8_SNORM - 假設第三個元件為 0

IndexCount

IndexBuffer 中的索引數目。 如果 IndexBuffer 為 NULL,則必須為 0。

VertexCount

頂點Buffer 中的頂點數目。

IndexBuffer

頂點索引的陣列。 如果為 NULL,則三角形為非索引。 就像圖形一樣,地址必須對齊 IndexFormat 的大小。

指向的記憶體必須處於狀態 D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE。 請注意,如果應用程式想要在圖形輸入組合器和光線追蹤加速結構建置輸入之間共用索引緩衝區輸入,則一律可以將資源同時放入讀取狀態的組合,例如D3D12_RESOURCE_STATE_INDEX_BUFFER D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE | 。

VertexBuffer

頂點陣列,包括步進。 位址和步幅的對齊必須是元件大小的倍數,因此 4 個字節的格式為 32 位元件,而 2 個字節則用於具有 16 位元件的格式。 不同於圖形,除了值底部的 32 位之外,沒有限制式,所有值都是使用 – 欄位是 UINT64,只是為了讓鄰近字段在任何地方完全對齊/明顯地對齊。 每個頂點位置預期都位於步進範圍的開始位址,而且加速結構建置會忽略任何多餘的空間。 這個多餘的空間可能包含其他應用程式數據,例如頂點屬性,應用程式負責在著色器中手動擷取,無論是交錯在頂點緩衝區或其他位置。

指向的記憶體必須處於狀態 D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE。 請注意,如果應用程式想要在圖形輸入組合器和光線追蹤加速結構建置輸入之間共用頂點緩衝區輸入,它一律可以將資源同時放入讀取狀態的組合,例如 D3D12_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER | D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE

規格需求

需求
標頭 d3d12.h