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

> Décrit un flux d'état de pipeline.

Décrit un flux d'état de pipeline.

## Syntaxe

```cpp theme={null}
typedef struct D3D12_PIPELINE_STATE_STREAM_DESC
{
    SIZE_T SizeInBytes;
    void  pPipelineStateSubobjectStream;
} D3D12_PIPELINE_STATE_STREAM_DESC
```

### Membres

*SizeInBytes*\
Type : SIZE\_T

[SAL](https://learn.microsoft.com/en-us/cpp/code-quality/annotating-function-parameters-and-return-values) : <code>*In*</code>

Spécifie la taille, en octets, de la structure de données opaque vers laquelle pointe le membre pPipelineStateSubobjectStream.

*pPipelineStateSubobjectStream*\
Type : void \*

[SAL](https://learn.microsoft.com/en-us/cpp/code-quality/annotating-function-parameters-and-return-values) : <code>*In\_reads*(*Inexpressible*("Dependentonsizeofsubobjects"))</code>

Spécifie l'adresse d'une structure de données qui décrit, sous forme de flux d'octets, un sous-objet d'état de pipeline arbitraire.

## Remarques

Utilisez cette structure avec la méthode **[ID3D12Device2::CreatePipelineState](/fr-CA/reference/graphics/d3d12/interfaces/id3d12device2/methods/id3d12device2_createpipelinestate_public)** pour créer des objets d'état de pipeline.

Le format du flux fourni doit consister en un ensemble alterné de valeurs **[D3D12\_PIPELINE\_STATE\_SUBOBJECT\_TYPE](/fr-CA/reference/graphics/d3d12_x/enums/d3d12_pipeline_state_subobject_type)** et des types de sous-objets correspondants (par exemple, **D3D12\_PIPELINE\_STATE\_SUBOBJECT\_TYPE\_RASTERIZER** est associé à **[D3D12\_RASTERIZER\_DESC](/fr-CA/reference/graphics/d3d12/structs/d3d12_rasterizer_desc_public)**). En ce qui concerne l'alignement, le runtime D3D12 s'attend à ce que les sous-objets soient des paires individuelles enum-struct, plutôt qu'un ensemble continu de champs. Il s'attend également à ce qu'ils soient alignés sur l'alignement de mot naturel du système. Cela peut être réalisé soit à l'aide de `alignas(void*)`, soit en créant une `union` de l'enum + sous-objet et d'un `void*`.

<Info>
  Il ne suffit pas de simplement faire une union de **D3D12\_PIPELINE\_STATE\_SUBOBJECT\_TYPE** avec un **void\***, car certains sous-objets seraient alors mal alignés. Par exemple, **D3D12\_PIPELINE\_STATE\_SUBOBJECT\_TYPE\_PRIMITIVE\_TOPOLOGY** est suivi d'une enum **[D3D12\_PRIMITIVE\_TOPOLOGY\_TYPE](/fr-CA/reference/graphics/d3d12_x/enums/d3d12_primitive_topology_type)**. Si le type de sous-objet est uni à un **void\***, il y aura un remplissage supplémentaire entre ces 2 membres, ce qui corrompra le flux. Pour cette raison, vous devez faire une union de la structure entière du sous-objet avec un **void\*** lorsque `alignas` n'est pas disponible
</Info>

Un exemple de sous-objet approprié à utiliser avec **[D3D12\_RASTERIZER\_DESC](/fr-CA/reference/graphics/d3d12/structs/d3d12_rasterizer_desc_public)** est présenté ici :

```cpp theme={null}
struct alignas(void*) StreamingRasterizerDesc
{
private:
D3D12_PIPELINE_STATE_SUBOBJECT_TYPE Type = D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER;
public:
D3D12_RASTERIZER_DESC Desc;
}
```

Le runtime détermine le type d'un flux de pipeline (les types valides étant **COMPUTE**, **GRAPHICS** et **MESH**) selon le type de sous-objet trouvé parmi **VS** (nuanceur de sommets), **CS** (nuanceur de calcul) et **MS** (nuanceur de maillage). Si le runtime ne trouve aucun de ces nuanceurs, la création du pipeline échoue. S'il trouve plusieurs de ces nuanceurs non nuls, elle échoue également. Cela signifie qu'il est permis d'avoir à la fois, par exemple, un **CS** et un **VS** dans votre objet de flux, à condition qu'un seul ait un pointeur non nul vers le bytecode du nuanceur pour un appel donné à **[ID3D12Device2::CreatePipelineState](/fr-CA/reference/graphics/d3d12/interfaces/id3d12device2/methods/id3d12device2_createpipelinestate_public)**.
Les types de sous-objets non pertinents pour le pipeline (p. ex. un sous-objet de nuanceur de calcul dans un flux graphique) sont ignorés.
Si un sous-objet n'est pas fourni (à l'exclusion des sous-objets requis ci-dessus), le runtime fournit une valeur par défaut pour celui-ci.

Envisagez d'utiliser les extensions `d3dx12.h` pour C++, qui fournissent un ensemble de structures d'assistance pour tous les sous-objets de pipeline (par exemple, la structure ci-dessus est très semblable à `CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER`). Cet en-tête se trouve dans le dépôt **[DirectX-Headers](https://github.com/microsoft/DirectX-Headers/blob/main/include/directx/d3dx12.h)** sur GitHub.

### -runtime-validation

Le runtime vérifie que la description du PSO correspond à un pipeline de calcul, de maillage ou graphique, que tous les sous-objets sont de types reconnus et qu'il n'y a pas de sous-objets en double.

<Note>
  Certains sous-objets sont considérés comme une version « dérivée » d'autres sous-objets aux fins de la reconnaissance des sous-objets en double. Par exemple, si le runtime découvre un sous-objet **[D3D12\_DEPTH\_STENCIL\_DESC](/fr-CA/reference/graphics/d3d12/structs/d3d12_depth_stencil_desc_public)**, puis plus tard un **[D3D12\_DEPTH\_STENCIL\_DESC1](/fr-CA/reference/graphics/d3d12/structs/d3d12_depth_stencil_desc1_public)**, il les considérera comme des sous-objets en double et échouera.
</Note>

## Configuration requise

**En-tête :** d3d12\_xs.h ou d3d12\_x.h\
**Bibliothèque :** d3d12\_xs.lib ou d3d12\_x.lib\
**Plateformes prises en charge :** consoles XBOX Series et famille XBOX One

## Voir aussi

[Structures de base](https://learn.microsoft.com/en-us/windows/win32/direct3d12/direct3d-12-structures)


## Related topics

- [LoadPipeline](/fr-CA/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary1/methods/id3d12pipelinelibrary1_loadpipeline_public.md)
- [D3D12_STREAM_OUTPUT_DESC](/fr-CA/reference/graphics/d3d12/structs/d3d12_stream_output_desc_public.md)
- [D3D12_COMPUTE_PIPELINE_STATE_DESC](/fr-CA/reference/graphics/d3d12/structs/d3d12_compute_pipeline_state_desc_public.md)
- [D3D12_CACHED_PIPELINE_STATE](/fr-CA/reference/graphics/d3d12/structs/d3d12_cached_pipeline_state_public.md)
- [D3D12_INPUT_LAYOUT_DESC](/fr-CA/reference/graphics/d3d12/structs/d3d12_input_layout_desc_public.md)
