> ## 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/reference/graphics/d3d12/interfaces/id3d12device2/methods/id3d12device2_createpipelinestate_public)** pour créer des objets d'état de pipeline.

Le format du flux fourni doit se composer d'une alternance de valeurs **[D3D12\_PIPELINE\_STATE\_SUBOBJECT\_TYPE](/fr/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/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. Pour cela, vous pouvez utiliser `alignas(void*)` ou créer une `union` de l'enum + sous-objet et d'un `void*`.

<Info>
  Il ne suffit pas de créer simplement 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/reference/graphics/d3d12_x/enums/d3d12_primitive_topology_type)**. Si le type de sous-objet fait l'objet d'une union avec un **void\***, un remplissage supplémentaire sera ajouté entre ces 2 membres, ce qui corrompra le flux. Pour cette raison, vous devez créer une union de toute la structure du sous-objet avec un **void\*** lorsque `alignas` n'est pas disponible
</Info>

Voici un exemple de sous-objet approprié à utiliser avec **[D3D12\_RASTERIZER\_DESC](/fr/reference/graphics/d3d12/structs/d3d12_rasterizer_desc_public)** :

```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 null, elle échoue également. Cela signifie qu'il est permis d'avoir, par exemple, à la fois un **CS** et un **VS** dans votre objet de flux, à condition qu'un seul d'entre eux ait un pointeur non null vers le bytecode du nuanceur pour un appel donné à **[ID3D12Device2::CreatePipelineState](/fr/reference/graphics/d3d12/interfaces/id3d12device2/methods/id3d12device2_createpipelinestate_public)**.
Les types de sous-objets sans rapport avec le pipeline (par exemple, un sous-objet de nuanceur de calcul dans un flux graphique) sont ignorés.
Si un sous-objet n'est pas fourni (à l'exception des sous-objets requis ci-dessus), le runtime lui fournit une valeur par défaut.

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 similaire à `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 pour la détection des sous-objets en double. Par exemple, si le runtime découvre un sous-objet **[D3D12\_DEPTH\_STENCIL\_DESC](/fr/reference/graphics/d3d12/structs/d3d12_depth_stencil_desc_public)**, puis plus tard un **[D3D12\_DEPTH\_STENCIL\_DESC1](/fr/reference/graphics/d3d12/structs/d3d12_depth_stencil_desc1_public)**, il les considère comme des sous-objets en double et échoue.
</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 principales](https://learn.microsoft.com/en-us/windows/win32/direct3d12/direct3d-12-structures)


## Related topics

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