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 se composer d’une alternance 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. Pour cela, vous pouvez utiliser alignas(void*) ou créer une union de l’enum + sous-objet et d’un void*.
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. 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
Voici un exemple de sous-objet approprié à utiliser avec D3D12_RASTERIZER_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. 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 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 pour la détection 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ère comme des sous-objets en double et échoue.

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