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 |