estructura de D3D12_RAYTRACING_GEOMETRY_TRIANGLES_DESC (d3d12.h)

Describe un conjunto de triángulos usados como geometría raytracing. La geometría a la que apunta este struct siempre está en forma de lista de triángulos, indizada o no indizada. No se admiten franjas de triángulos.

Sintaxis

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;

Miembros

Transform3x4

Dirección de una matriz de transformación affine de 3x4 en el diseño principal de fila que se aplicará a los vértices del vértice de vértices durante una compilación de estructura de aceleración. El contenido de VertexBuffer no se modifica. Si se usa un formato de vértice 2D, la transformación se aplica con el tercer componente de vértice que se supone que es cero.

Si Transform3x4 es NULL, los vértices no se transformarán. El uso de Transform3x4 puede dar lugar a un aumento de los requisitos de cálculo o memoria para la compilación de la estructura de aceleración.

La memoria a la que apunta debe estar en estado D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE. La dirección debe estar alineada a 16 bytes, definida como D3D12_RAYTRACING_TRANSFORM3X4_BYTE_ALIGNMENT.

IndexFormat

Formato de los índices en IndexBuffer. Debe ser una de las siguientes:

  • DXGI_FORMAT_UNKNOWN : cuando IndexBuffer es NULL
  • DXGI_FORMAT_R32_UINT
  • DXGI_FORMAT_R16_UINT

VertexFormat

Formato de los vértices en VertexBuffer. Debe ser una de las siguientes:

  • DXGI_FORMAT_R32G32_FLOAT : se supone que el tercer componente es 0
  • DXGI_FORMAT_R32G32B32_FLOAT
  • DXGI_FORMAT_R16G16_FLOAT : se supone que el tercer componente es 0
  • DXGI_FORMAT_R16G16B16A16_FLOAT : se omite el componente A16, se pueden empaquetar otros datos, como establecer el intervalo de vértices en 6 bytes.
  • DXGI_FORMAT_R16G16_SNORM : se supone que el tercer componente es 0
  • DXGI_FORMAT_R16G16B16A16_SNORM : se omite el componente A16, se pueden empaquetar otros datos, como establecer el intervalo de vértices en 6 bytes.

Los dispositivos de nivel 1.1 admiten los siguientes formatos adicionales:

  • DXGI_FORMAT_R16G16B16A16_UNORM : se omite el componente A16, se pueden empaquetar otros datos, como establecer el intervalo de vértices en 6 bytes.
  • DXGI_FORMAT_R16G16_UNORM : tercer componente asumido 0
  • DXGI_FORMAT_R10G10B10A2_UNORM : se omite el componente A2, el paso debe ser de 4 bytes.
  • DXGI_FORMAT_R8G8B8A8_UNORM : se omite el componente A8, se pueden empaquetar otros datos, como establecer el intervalo de vértices en 3 bytes.
  • DXGI_FORMAT_R8G8_UNORM : tercer componente asumido 0
  • DXGI_FORMAT_R8G8B8A8_SNORM : se omite el componente A8, se pueden empaquetar otros datos, como establecer el intervalo de vértices en 3 bytes.
  • DXGI_FORMAT_R8G8_SNORM : tercer componente asumido 0

IndexCount

Número de índices en IndexBuffer. Debe ser 0 si IndexBuffer es NULL.

VertexCount

Número de vértices en VertexBuffer.

IndexBuffer

Matriz de índices de vértices. Si es NULL, los triángulos no están indizado. Al igual que con los gráficos, la dirección debe alinearse con el tamaño de IndexFormat.

La memoria a la que apunta debe estar en estado D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE. Tenga en cuenta que si una aplicación quiere compartir entradas de búfer de índice entre el ensamblador de entrada de gráficos y la entrada de compilación de la estructura de aceleración raytracing, siempre puede colocar un recurso en una combinación de estados de lectura simultáneamente, por ejemplo, D3D12_RESOURCE_STATE_INDEX_BUFFER | D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE.

VertexBuffer

Matriz de vértices, incluido un paso. La alineación en la dirección y el paso debe ser un múltiplo del tamaño del componente, por lo que 4 bytes para formatos con componentes de 32 bits y 2 bytes para formatos con componentes de 16 bits. A diferencia de los gráficos, no hay ninguna restricción en el paso, aparte de que los 32 bits inferiores del valor son todos los que se usan: el campo es UINT64 exclusivamente para hacer que los campos vecinos se alineen limpia o obviamente en todas partes. Se espera que cada posición de vértice esté en la dirección inicial del intervalo de paso y cualquier exceso de espacio se omite mediante las compilaciones de la estructura de aceleración. Este exceso de espacio puede contener otros datos de la aplicación, como los atributos de vértice, que la aplicación es responsable de capturar manualmente en sombreadores, ya sea que se intercale en búferes de vértices o en otro lugar.

La memoria a la que apunta debe estar en estado D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE. Tenga en cuenta que si una aplicación quiere compartir entradas de búfer de vértice entre el ensamblador de entrada de entrada de gráficos y la entrada de compilación de la estructura de aceleración raytracing, siempre puede colocar un recurso en una combinación de estados de lectura simultáneamente, por ejemplo, D3D12_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER | D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE

Requisitos

Requisito Valor
Header d3d12.h