Поделиться через


структура 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

Адрес матрицы аффинного преобразования 3x4 в основной строке для применения к вершинам в VertexBuffer во время сборки структуры ускорения. Содержимое VertexBuffer не изменяется. Если используется формат двухd вершин, преобразование применяется с третьим компонентом вершины, который считается равным нулю.

Если параметр 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

Формат вершин в VertexBuffer. Должна быть одной из следующих:

  • 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. Значение должно быть равно 0, если IndexBuffer имеет значение NULL.

VertexCount

Число вершин в VertexBuffer.

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