estrutura D3D12_RAYTRACING_GEOMETRY_TRIANGLES_DESC (d3d12.h)

Descreve um conjunto de triângulos usados como geometria de raytracing. A geometria apontada por esse struct está sempre na forma de lista de triângulos, indexada ou não indexada. Não há suporte para faixas de triângulos.

Sintaxe

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;

Membros

Transform3x4

Endereço de uma matriz de transformação de affine 3x4 no layout principal de linha a ser aplicado aos vértices no VertexBuffer durante um build de estrutura de aceleração. O conteúdo de VertexBuffer não é modificado. Se um formato de vértice 2D for usado, a transformação será aplicada com o terceiro componente de vértice considerado zero.

Se Transform3x4 for NULL, os vértices não serão transformados. O uso de Transform3x4 pode resultar em maior computação e/ou requisitos de memória para o build da estrutura de aceleração.

A memória apontada deve estar no estado D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE. O endereço deve ser alinhado a 16 bytes, definido como D3D12_RAYTRACING_TRANSFORM3X4_BYTE_ALIGNMENT.

IndexFormat

Formato dos índices no IndexBuffer. Deve ser uma destas opções:

  • DXGI_FORMAT_UNKNOWN - quando IndexBuffer for NULL
  • DXGI_FORMAT_R32_UINT
  • DXGI_FORMAT_R16_UINT

VertexFormat

Formato dos vértices no VertexBuffer. Deve ser uma destas opções:

  • DXGI_FORMAT_R32G32_FLOAT – o terceiro componente é considerado 0
  • DXGI_FORMAT_R32G32B32_FLOAT
  • DXGI_FORMAT_R16G16_FLOAT – supõe-se que o terceiro componente seja 0
  • DXGI_FORMAT_R16G16B16A16_FLOAT – o componente A16 é ignorado, outros dados podem ser empacotados lá, como definir o passo do vértice como 6 bytes.
  • DXGI_FORMAT_R16G16_SNORM – o terceiro componente é considerado 0
  • DXGI_FORMAT_R16G16B16A16_SNORM – o componente A16 é ignorado, outros dados podem ser empacotados lá, como definir o passo do vértice como 6 bytes.

Os dispositivos de camada 1.1 dão suporte aos seguintes formatos adicionais:

  • DXGI_FORMAT_R16G16B16A16_UNORM – o componente A16 é ignorado, outros dados podem ser empacotados lá, como definir o passo do vértice como 6 bytes
  • DXGI_FORMAT_R16G16_UNORM – terceiro componente assumido 0
  • DXGI_FORMAT_R10G10B10A2_UNORM - O componente A2 é ignorado, o passo deve ser de 4 bytes
  • DXGI_FORMAT_R8G8B8A8_UNORM – o componente A8 é ignorado, outros dados podem ser empacotados lá, como definir o passo do vértice como 3 bytes
  • DXGI_FORMAT_R8G8_UNORM - terceiro componente assumido 0
  • DXGI_FORMAT_R8G8B8A8_SNORM – o componente A8 é ignorado, outros dados podem ser empacotados lá, como definir o passo do vértice como 3 bytes
  • DXGI_FORMAT_R8G8_SNORM – terceiro componente assumido 0

IndexCount

Número de índices no IndexBuffer. Deve ser 0 se IndexBuffer for NULL.

VertexCount

Número de vértices em VertexBuffer.

IndexBuffer

Matriz de índices de vértice. Se FOR NULL, os triângulos não serão indexados. Assim como acontece com os gráficos, o endereço deve ser alinhado ao tamanho de IndexFormat.

A memória apontada deve estar no estado D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE. Observe que, se um aplicativo quiser compartilhar entradas de buffer de índice entre o assembler de entrada gráfica e a entrada de build da estrutura de aceleração de raytracing, ele sempre poderá colocar um recurso em uma combinação de estados de leitura simultaneamente, por exemplo, D3D12_RESOURCE_STATE_INDEX_BUFFER D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE | .

VertexBuffer

Matriz de vértices, incluindo um passo a passo. O alinhamento no endereço e no passo deve ser um múltiplo do tamanho do componente, portanto, 4 bytes para formatos com componentes de 32 bits e 2 bytes para formatos com componentes de 16 bits. Ao contrário dos gráficos, não há nenhuma restrição no passo, além de que os 32 bits inferiores do valor são todos usados – o campo é UINT64 puramente para fazer com que os campos vizinhos se alinhem de forma limpa/obviamente em todos os lugares. Espera-se que cada posição de vértice esteja no endereço inicial do intervalo de passos e qualquer espaço em excesso seja ignorado por builds de estrutura de aceleração. Esse espaço em excesso pode conter outros dados do aplicativo, como atributos de vértice, que o aplicativo é responsável por buscar manualmente em sombreadores, sejam eles intercalados em buffers de vértice ou em outro lugar.

A memória apontada deve estar no estado D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE. Observe que, se um aplicativo quiser compartilhar entradas de buffer de vértice entre o assembler de entrada de gráficos e a entrada de build da estrutura de aceleração de raytracing, ele sempre poderá colocar um recurso em uma combinação de estados de leitura simultaneamente, por exemplo , D3D12_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER | D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE

Requisitos

Requisito Valor
Cabeçalho d3d12.h