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 的内容。 如果使用 2D 顶点格式,则使用假定为零的第三个顶点组件应用转换。

如果 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 中的索引数。 如果 IndexBuffer 为 NULL,则必须为 0。

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

顶点数组,包括步幅。 地址和步幅的对齐方式必须是组件大小的倍数,因此,对于具有 32 位分量的格式为 4 个字节,对于具有 16 位分量的格式,为 2 个字节。 与图形不同,步幅没有限制,除了值底部的 32 位是全部使用 – 字段是 UINT64,纯粹是为了让相邻字段干净/明显地在任何地方对齐。 每个顶点位置应位于步幅范围的起始地址,加速结构生成会忽略任何多余的空间。 此多余的空间可能包含其他应用数据,例如顶点属性,应用负责在着色器中手动提取这些数据,无论它是交错在顶点缓冲区中还是在其他地方。

指向的内存必须处于 D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE状态。 请注意,如果应用想要在图形输入汇编程序与光线跟踪加速结构生成输入之间共享顶点缓冲区输入,它始终可以将资源同时放入读取状态的组合中,例如 D3D12_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER | D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE

要求

要求
Header d3d12.h