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