> ## 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.

# BuildRaytracingAccelerationStructureBatched2X

> Spécifie des options supplémentaires individuellement pour chaque construction d'une construction par lots.

L'API Batched2 fonctionne comme une API BatchedX standard tout en permettant de spécifier des options supplémentaires individuellement pour chaque construction.

## Syntaxe

```cpp theme={null}
void BuildRaytracingAccelerationStructureBatched2X(  
         UINT NumBuildDescs,  
         const D3D12XBOX_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_BATCHED_DESC2* pDescs  
)  
```

### Paramètres

*NumBuildDescs*   \_In\_\
Type : UINT

Nombre de descripteurs de construction

*pDescs*   \_In\_\
Type : [D3D12XBOX\_BUILD\_RAYTRACING\_ACCELERATION\_STRUCTURE\_BATCHED\_DESC2\*](/fr-CA/reference/graphics/d3d12_xs/structs/d3d12xbox_build_raytracing_acceleration_structure_batched_desc2)

Descripteurs de construction

### Valeur renvoyée

Type : void

## Remarques

Exemple 1. Exemple de générateur à l'exécution : définir plusieurs valeurs ExtraOptions et allouer la bonne quantité de mémoire de travail.

```cpp theme={null}
D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_DESC topLevelAccelerationStructureDesc = {};
D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS& topLevelInputs = topLevelAccelerationStructureDesc.Inputs;

// The BuildRaytracingAccelerationStructureBatched2X API can build BLASes, TLASes, or both.
// Some ExtraOptions parameters only apply to one type of build and will be ignored in the other.
topLevelInputs.Type = D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL;
topLevelInputs.NumDescs = UINT(instanceDescs.size());
topLevelInputs.InstanceDescs = m_instanceDescs.GetGpuVirtualAddress();
topLevelInputs.DescsLayout = D3D12_ELEMENTS_LAYOUT_ARRAY;

// NOTE: the flag chosen here will still have an effect for options which are left at defaults.
// Some options may override the behaviour from this flag.
topLevelInputs.Flags = D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_PREFER_FAST_TRACE;

struct
{
    D3D12XBOX_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_PARAMS1 params1;
    D3D12XBOX_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_PARAMS2 params2;
    D3D12XBOX_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_PARAMS3 params3;
} options;

// NOTE: D3D12XboxMakeDefault_* must be used here instead of zero-initializing these structs.
// Default values are not always zero and may contain special values to instruct the driver to rely on the topLevelInputs.Flags value instead.
D3D12XboxMakeDefault_D3D12XBOX_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_PARAMS1(&options.params1);
D3D12XboxMakeDefault_D3D12XBOX_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_PARAMS2(&options.params2);
D3D12XboxMakeDefault_D3D12XBOX_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_PARAMS3(&options.params3);

// Modify options relating to treelet reordering.
options.params1.TreeletFirstLevel = 1;
options.params1.TreeletNumLevels = 64;
options.params1.TreeletStepSizeBetweenRounds = 1;
options.params1.TreeletRoundsLimiter = 2;  // Very expensive

// Increase the memory budget for splitting instances.
options.params3.NumExtraElementsForInstanceSplitting = (UINT)(instanceDescs.size() * 0.5f);
// Modify the percentage of extra memory devoted to splitting instances into 16 pieces instead of 4 pieces.
options.params3.InstanceSplit16Fraction = 0.3f;

// See the doc pages dedicated to D3D12XBOX_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_PARAMS* structs for more information and parameter descriptions.

D3D12XBOX_XDXR_STREAM_DESC streamDesc;
streamDesc.pXdxrStreamDesc = &options;
streamDesc.SizeInBytes = sizeof(options);

// NOTE: This function must be used in place of GetRaytracingAccelerationStructurePrebuildInfo when using ExtraOptions.
// Using GetRaytracingAccelerationStructurePrebuildInfo will result in heap corruption and hangs.
g_Device->GetRaytracingAccelerationStructurePrebuildInfoX(&topLevelInputs, &streamDesc, &m_topLevelPrebuildInfoCurrentFrame);

m_tlas.Create(L"TLAS", UINT(m_topLevelPrebuildInfoCurrentFrame.ResultDataMaxSizeInBytes), 1, nullptr, D3D12_RESOURCE_STATE_RAYTRACING_ACCELERATION_STRUCTURE);
m_tlasScratchBuffer.Create(L"Acceleration Structure Scratch Buffer", UINT(m_topLevelPrebuildInfoCurrentFrame.ScratchDataSizeInBytes), 1);

topLevelAccelerationStructureDesc.ScratchAccelerationStructureData = m_tlasScratchBuffer.GetGpuVirtualAddress();
topLevelAccelerationStructureDesc.DestAccelerationStructureData = m_tlas->GetGPUVirtualAddress();

D3D12XBOX_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_BATCHED_DESC2 desc = {};
desc.Desc = topLevelAccelerationStructureDesc;
desc.ExtraOptions = streamDesc;

pRaytracingCommandList->BuildRaytracingAccelerationStructureBatched2X(1, &desc);
```

Exemple 2. Exemple de générateur hors ligne : désactiver les quads et définir la subdivision des triangles à une valeur très élevée, puis essayer une construction plus compacte

```cpp theme={null}
D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_COMPACTED_SIZE_DESC sizeA;
D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_COMPACTED_SIZE_DESC sizeB;

D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC blasBuildInfo {};
blasBuildInfo.InfoType = D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_COMPACTED_SIZE;
blasBuildInfo.DestBuffer = (D3D12_GPU_VIRTUAL_ADDRESS)&sizeA;

// Set special options
struct
{
    D3D12XBOX_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_PARAMS1 params1;
    D3D12XBOX_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_PARAMS2 params2;
} options;
D3D12XboxMakeDefault_D3D12XBOX_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_PARAMS1(&options.params1);
D3D12XboxMakeDefault_D3D12XBOX_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_PARAMS2(&options.params2);

options.params1.QuadJoinThreshold = 0;      // Disallow quads
options.params2.TriangleSplitFactor = 3;    // Huge split, may actually slow it down

// Access via a batched build
D3D12XBOX_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_BATCHED_DESC2 blasBatchedBuild {};
blasBatchedBuild.Desc = buildDesc;
blasBatchedBuild.NumPostbuildInfoDescs = 1;
blasBatchedBuild.pPostbuildInfoDescs = &blasBuildInfo;
blasBatchedBuild.ExtraOptions.SizeInBytes = sizeof(options);
blasBatchedBuild.ExtraOptions.pXdxrStreamDesc = &options;

// Build acceleration structure.
m_CommandList->BuildRaytracingAccelerationStructureBatched2X(1, &blasBatchedBuild);
SubmitPendingAndWait();

// Set it to smaller build
options.params1.QuadJoinThreshold = 2;      // Allow generous quads (packs trees better)
options.params2.TriangleSplitFactor = 1;    // Disallow splits (no extra nodes)
blasBuildInfo.DestBuffer = (D3D12_GPU_VIRTUAL_ADDRESS)&sizeB;

// Build acceleration structure.
m_CommandList->BuildRaytracingAccelerationStructureBatched2X(1, &blasBatchedBuild);
SubmitPendingAndWait();   
```

## Configuration requise

**En-tête :** d3d12\_xs.h

**Bibliothèque :** d3d12\_xs.lib\
**Plateformes prises en charge** : consoles XBOX Series

## Voir aussi

[D3D12XBOX\_BUILD\_RAYTRACING\_ACCELERATION\_STRUCTURE\_PARAMS1](/fr-CA/reference/graphics/d3d12_xs/structs/d3d12xbox_build_raytracing_acceleration_structure_params1)\
[D3D12XBOX\_BUILD\_RAYTRACING\_ACCELERATION\_STRUCTURE\_PARAMS2](/fr-CA/reference/graphics/d3d12_xs/structs/d3d12xbox_build_raytracing_acceleration_structure_params2)\
[D3D12XBOX\_BUILD\_RAYTRACING\_ACCELERATION\_STRUCTURE\_PARAMS3](/fr-CA/reference/graphics/d3d12_xs/structs/d3d12xbox_build_raytracing_acceleration_structure_params3)\
[ID3D12GraphicsCommandList6](/fr-CA/reference/graphics/d3d12_xs/interfaces/ID3D12GraphicsCommandList6/id3d12graphicscommandlist6)


## Related topics

- [Répertoire des rubriques NDA : liens actifs vers Microsoft Learn](/fr-CA/nda/nda-topic-directory.md)
- [D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_DESC](/fr-CA/reference/graphics/d3d12/structs/d3d12_build_raytracing_acceleration_structure_desc_public.md)
- [BuildRaytracingAccelerationStructure (consoles XBOX Series)](/fr-CA/reference/graphics/d3d12/interfaces/id3d12graphicscommandlist4/methods/id3d12graphicscommandlist4_buildraytracingaccelerationstructure_public.md)
- [D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS](/fr-CA/reference/graphics/d3d12/structs/d3d12_build_raytracing_acceleration_structure_inputs_public.md)
- [D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_TOOLS_VISUALIZATION_HEADER (consoles XBOX Series)](/fr-CA/reference/graphics/d3d12/structs/d3d12_build_raytracing_acceleration_structure_tools_visualization_header_public.md)
