Passer au contenu principal
Décrit un flux d’état de pipeline.

Syntaxe

Membres

SizeInBytes
Type : SIZE_T
SAL : In Spécifie la taille, en octets, de la structure de données opaque vers laquelle pointe le membre pPipelineStateSubobjectStream. pPipelineStateSubobjectStream
Type : void *
SAL : In_reads(Inexpressible(“Dependentonsizeofsubobjects”)) 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 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 et des types de sous-objets correspondants (par exemple, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER est associé à D3D12_RASTERIZER_DESC). 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*.
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. 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
Un exemple de sous-objet approprié à utiliser avec D3D12_RASTERIZER_DESC est présenté ici :
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. 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 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.
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, puis plus tard un D3D12_DEPTH_STENCIL_DESC1, il les considérera comme des sous-objets en double et échouera.

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
Dernière modification le 6 octobre 2026