> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS

> 定义光线追踪加速结构构建操作的输入。此结构由以下方法使用。

定义光线追踪加速结构构建操作的输入。此结构由 [ID3D12GraphicsCommandList4::BuildRaytracingAccelerationStructure](/reference/graphics/d3d12/interfaces/id3d12graphicscommandlist4/methods/id3d12graphicscommandlist4_buildraytracingaccelerationstructure_public) 和 [ID3D12Device5::GetRaytracingAccelerationStructurePrebuildInfo](/reference/graphics/d3d12/interfaces/id3d12device5/methods/id3d12device5_getraytracingaccelerationstructureprebuildinfo_public) 使用。

## 语法

```cpp theme={null}
typedef struct D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS
{
    D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE Type;
    D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAGS Flags;
    UINT NumDescs;
    D3D12_ELEMENTS_LAYOUT DescsLayout;
    D3D12_GPU_VIRTUAL_ADDRESS InstanceDescs;
    const D3D12_RAYTRACING_GEOMETRY_DESC  pGeometryDescs;
    const D3D12_RAYTRACING_GEOMETRY_DESC const  ppGeometryDescs;
} D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS
```

### 成员

*Type*\
类型：D3D12\_RAYTRACING\_ACCELERATION\_STRUCTURE\_TYPE

要构建的加速结构的类型。

*Flags*\
类型：D3D12\_RAYTRACING\_ACCELERATION\_STRUCTURE\_BUILD\_FLAGS

构建标志。

*NumDescs*\
类型：UINT

如果 <i>Type</i> 为 **D3D12\_RAYTRACING\_ACCELERATION\_STRUCTURE\_TOP\_LEVEL**，则此值为实例的数量，按 <i>DescsLayout</i> 布局。

如果 <i>Type</i> 为 **D3D12\_RAYTRACING\_ACCELERATION\_STRUCTURE\_BOTTOM\_LEVEL**，则此值为 <i>pGeometryDescs</i> 或 <i>ppGeometryDescs</i> 引用的元素数量。使用其中哪个字段取决于 <i>DescsLayout</i>。

*DescsLayout*\
类型：D3D12\_ELEMENTS\_LAYOUT

如何指定几何描述；可以是描述数组，也可以是指向描述的指针数组。

*InstanceDescs*\
类型：D3D12\_GPU\_VIRTUAL\_ADDRESS

如果 <i>Type</i> 为 **D3D12\_RAYTRACING\_ACCELERATION\_STRUCTURE\_TOP\_LEVEL**，则此项指向 GPU 内存中描述实例的 <i>NumDescs</i> 个 [D3D12\_RAYTRACING\_INSTANCE\_DESC](/reference/graphics/d3d12/structs/d3d12_raytracing_instance_desc_public) 结构。每个实例必须按 16 字节对齐，其定义为 [D3D12\_RAYTRACING\_INSTANCE\_DESC\_BYTE\_ALIGNMENT](https://learn.microsoft.com/en-us/windows/desktop/direct3d12/constants)。

如果 <i>Type</i> 不是 **D3D12\_RAYTRACING\_ACCELERATION\_STRUCTURE\_TOP\_LEVEL**，则不使用此参数。

如果 <i>DescLayout</i> 为 **D3D12\_ELEMENTS\_LAYOUT\_ARRAY**，<i>InstanceDescs</i> 指向 GPU 内存中的实例描述数组。

如果 <i>DescLayout</i> 为 **D3D12\_ELEMENTS\_LAYOUT\_ARRAY\_OF\_POINTERS**，<i>InstanceDescs</i> 指向 GPU 内存中的一个数组，该数组包含指向实例描述的 [D3D12\_GPU\_VIRTUAL\_ADDRESS](https://learn.microsoft.com/en-us/windows/desktop/direct3d12/d3d12_gpu_virtual_address) 指针。

所指向的内存必须处于 [D3D12\_RESOURCE\_STATE\_NON\_PIXEL\_SHADER\_RESOURCE](/reference/graphics/d3d12_x/enums/d3d12_resource_states) 状态。

*pGeometryDescs*\
类型：const D3D12\_RAYTRACING\_GEOMETRY\_DESC \*

如果 <i>Type</i> 为 **D3D12\_RAYTRACING\_ACCELERATION\_STRUCTURE\_BOTTOM\_LEVEL** 且 <i>DescsLayout</i> 为 **D3D12\_ELEMENTS\_LAYOUT\_ARRAY**，则使用此字段，指向 CPU 上 <i>NumDescs</i> 个连续的 **D3D12\_RAYTRACING\_GEOMETRY\_DESC** 结构，用于描述单个几何图形。

如果 <i>Type</i> 不是 **D3D12\_RAYTRACING\_ACCELERATION\_STRUCTURE\_BOTTOM\_LEVEL** 或 <i>DescsLayout</i> 不是 **D3D12\_ELEMENTS\_LAYOUT\_ARRAY**，则不使用此参数。

*ppGeometryDescs*\
类型：const D3D12\_RAYTRACING\_GEOMETRY\_DESC \*const \*

如果 <i>Type</i> 为 **D3D12\_RAYTRACING\_ACCELERATION\_STRUCTURE\_BOTTOM\_LEVEL** 且 <i>DescsLayout</i> 为 **D3D12\_ELEMENTS\_LAYOUT\_ARRAY\_OF\_POINTERS**，则使用此字段，指向 CPU 上的一个数组，该数组包含 <i>NumDescs</i> 个指向 [D3D12\_RAYTRACING\_GEOMETRY\_DESC](/reference/graphics/d3d12/structs/d3d12_raytracing_geometry_desc_public) 结构的指针，用于描述单个几何图形。

## 备注

在与 [GetRaytracingAccelerationStructurePrebuildInfo](/reference/graphics/d3d12/interfaces/id3d12device5/methods/id3d12device5_getraytracingaccelerationstructureprebuildinfo_public)（该方法实际执行构建）一起使用时，任何通过 [D3D12\_GPU\_VIRTUAL\_ADDRESS](https://learn.microsoft.com/en-us/windows/desktop/direct3d12/d3d12_gpu_virtual_address)（GPU 内存中的地址）引用的参数（例如 <i>InstanceDescs</i>）不会被该操作访问。因此，这块内存无需已初始化，也无需处于特定的资源状态。虽然指针不会被解引用，但该操作可以检查 GPU 地址是否为空。

## 要求

**头文件：** d3d12\_xs.h\
**库：** d3d12\_xs.lib\
**支持的平台**：XBOX Series 主机
