D3D12_RAYTRACING_GEOMETRY_TRIANGLES_DESC struttura (d3d12.h)

Descrive un set di triangoli usati come geometria di raytracing. La geometria puntata da questo struct è sempre in forma di elenco triangoli, indicizzata o non indicizzata. Le strisce di triangoli non sono supportate.

Sintassi

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;

Members

Transform3x4

Indirizzo di una matrice di trasformazione 3x4 affine nel layout principale della riga da applicare ai vertici del VertexBuffer durante una compilazione della struttura di accelerazione. Il contenuto di VertexBuffer non viene modificato. Se viene usato un formato di vertice 2D, la trasformazione viene applicata con il terzo componente del vertice assunto come zero.

Se Transform3x4 è NULL, i vertici non verranno trasformati. L'uso di Transform3x4 può comportare un aumento dei requisiti di calcolo e/o memoria per la compilazione della struttura di accelerazione.

La memoria a cui punta deve essere in stato D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE. L'indirizzo deve essere allineato a 16 byte, definito come D3D12_RAYTRACING_TRANSFORM3X4_BYTE_ALIGNMENT.

IndexFormat

Formato degli indici in IndexBuffer. I possibili valori sono i seguenti:

  • DXGI_FORMAT_UNKNOWN - quando IndexBuffer è NULL
  • DXGI_FORMAT_R32_UINT
  • DXGI_FORMAT_R16_UINT

VertexFormat

Formato dei vertici in VertexBuffer. I possibili valori sono i seguenti:

  • DXGI_FORMAT_R32G32_FLOAT - si presuppone che il terzo componente sia 0
  • DXGI_FORMAT_R32G32B32_FLOAT
  • DXGI_FORMAT_R16G16_FLOAT - si presuppone che il terzo componente sia 0
  • DXGI_FORMAT_R16G16B16A16_FLOAT : il componente A16 viene ignorato, altri dati possono essere compressi, ad esempio impostando il vertice stride su 6 byte.
  • DXGI_FORMAT_R16G16_SNORM - si presuppone che il terzo componente sia 0
  • DXGI_FORMAT_R16G16B16A16_SNORM : il componente A16 viene ignorato, altri dati possono essere inseriti, ad esempio impostando il vertice stride su 6 byte.

I dispositivi livello 1.1 supportano i formati aggiuntivi seguenti:

  • DXGI_FORMAT_R16G16B16A16_UNORM : il componente A16 viene ignorato, è possibile raggruppare altri dati, ad esempio impostando il vertex stride su 6 byte
  • DXGI_FORMAT_R16G16_UNORM - terzo componente assunto 0
  • DXGI_FORMAT_R10G10B10A2_UNORM : il componente A2 viene ignorato, lo stride deve essere di 4 byte
  • DXGI_FORMAT_R8G8B8A8_UNORM : il componente A8 viene ignorato, altri dati possono essere inseriti, ad esempio impostando il vertice stride su 3 byte
  • DXGI_FORMAT_R8G8_UNORM - terzo componente assunto 0
  • DXGI_FORMAT_R8G8B8A8_SNORM : il componente A8 viene ignorato, altri dati possono essere inseriti, ad esempio impostando il vertice stride su 3 byte
  • DXGI_FORMAT_R8G8_SNORM - terzo componente assunto 0

IndexCount

Numero di indici in IndexBuffer. Deve essere 0 se IndexBuffer è NULL.

VertexCount

Numero di vertici in VertexBuffer.

IndexBuffer

Matrice di indici dei vertici. Se NULL, i triangoli non sono indicizzati. Come per la grafica, l'indirizzo deve essere allineato alle dimensioni di IndexFormat.

La memoria a cui punta deve essere in stato D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE. Si noti che se un'app vuole condividere gli input del buffer di indice tra l'assembler di input grafico e l'input di compilazione della struttura di accelerazione raytracing, può sempre inserire una risorsa in una combinazione di stati di lettura simultaneamente, ad esempio D3D12_RESOURCE_STATE_INDEX_BUFFER D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE | .

VertexBuffer

Matrice di vertici, tra cui uno stride. L'allineamento dell'indirizzo e dello stride deve essere un multiplo delle dimensioni del componente, quindi 4 byte per i formati con componenti a 32 bit e 2 byte per i formati con componenti a 16 bit. A differenza della grafica, non esiste alcun vincolo sullo stride, diversamente dal fatto che i 32bit inferiori del valore sono tutti usati: il campo è UINT64 puramente per rendere i campi adiacenti allineati in modo pulito/ovviamente ovunque. Ogni posizione del vertice deve essere all'indirizzo iniziale dell'intervallo di stride e qualsiasi spazio in eccesso viene ignorato dalle compilazioni della struttura di accelerazione. Questo spazio in eccesso potrebbe contenere altri dati dell'app, ad esempio gli attributi del vertice, che l'app è responsabile del recupero manuale nei shader, indipendentemente dal fatto che sia interleaved nei buffer dei vertici o altrove.

La memoria a cui punta deve essere in stato D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE. Si noti che se un'app vuole condividere gli input del buffer dei vertici tra l'assembler di input grafico e l'input di compilazione della struttura di accelerazione raytracing, può sempre inserire una risorsa in una combinazione di stati di lettura simultaneamente, ad esempio D3D12_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE |

Requisiti

Requisito Valore
Intestazione d3d12.h