Skip to main content
Describe una secuencia de estados de canalización.

Sintaxis

Miembros

SizeInBytes
Tipo: SIZE_T
SAL: In Especifica el tamaño de la estructura de datos opaca a la que apunta el miembro pPipelineStateSubobjectStream, en bytes. pPipelineStateSubobjectStream
Tipo: void *
SAL: In_reads(Inexpressible(“Dependentonsizeofsubobjects”)) Especifica la dirección de una estructura de datos que describe, como una secuencia de bytes, un subobjeto arbitrario de estado de canalización.

Comentarios

Use esta estructura con el método ID3D12Device2::CreatePipelineState para crear objetos de estado de canalización. El formato de la secuencia proporcionada debe consistir en un conjunto alternado de D3D12_PIPELINE_STATE_SUBOBJECT_TYPE y los tipos de subobjeto correspondientes para ellos (por ejemplo, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER se empareja con D3D12_RASTERIZER_DESC. En cuanto a la alineación, el entorno de ejecución de D3D12 espera que los subobjetos sean pares individuales de estructuras enum-struct, en lugar de un conjunto continuo de campos. También espera que estén alineados con la alineación de palabra natural del sistema. Esto puede lograrse mediante alignas(void*), o creando una union del enum + subobjeto y un void*.
No basta con simplemente hacer una unión del D3D12_PIPELINE_STATE_SUBOBJECT_TYPE con un void*, porque esto dará lugar a que ciertos subobjetos queden mal alineados. Por ejemplo, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PRIMITIVE_TOPOLOGY va seguido de un enum D3D12_PRIMITIVE_TOPOLOGY_TYPE. Si el tipo de subobjeto se une con un void*, habrá un relleno adicional entre estos 2 miembros, lo que dará lugar a daños en la secuencia. Por este motivo, debe hacer la unión de toda la estructura del subobjeto con un void* cuando alignas no esté disponible
Aquí se muestra un ejemplo de un subobjeto adecuado para usarlo con D3D12_RASTERIZER_DESC:
El entorno de ejecución determinará el tipo de una secuencia de canalización (los tipos válidos son COMPUTE, GRAPHICS y MESH) según qué tipo de subobjeto, de entre VS (sombreador de vértices), CS (sombreador de proceso) y MS (sombreador de malla), se encuentre. Si el entorno de ejecución no encuentra ninguno de estos sombreadores, la creación de la canalización dará error. Si encuentra varios de estos sombreadores que no son nulos, también dará error. Esto significa que es válido tener, por ejemplo, tanto un CS como un VS en el objeto de secuencia, siempre que solo uno tenga un puntero no nulo para el código de bytes del sombreador en cualquier llamada determinada a ID3D12Device2::CreatePipelineState. Los tipos de subobjeto irrelevantes para la canalización (por ejemplo, un subobjeto de sombreador de proceso en una secuencia de gráficos) se ignorarán. Si no se proporciona un subobjeto (excluidos los subobjetos requeridos anteriores), el entorno de ejecución proporcionará un valor predeterminado para él. Considere la posibilidad de usar las extensiones d3dx12.h para C++, que proporcionan un conjunto de estructuras auxiliares para todos los subobjetos de canalización (por ejemplo, la estructura anterior es muy similar a CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER). Este encabezado se encuentra en el repositorio DirectX-Headers en github.

-runtime-validation

El entorno de ejecución validará que la descripción del PSO sea una canalización de proceso, de malla o de gráficos, que todos los subobjetos sean de tipos reconocidos y que no haya subobjetos duplicados.
Algunos subobjetos se consideran una versión “derivada” de otros a efectos de reconocer subobjetos duplicados. Por ejemplo, si el entorno de ejecución detecta un subobjeto D3D12_DEPTH_STENCIL_DESC y, más adelante, un D3D12_DEPTH_STENCIL_DESC1, los considerará subobjetos duplicados y dará error.

Requisitos

Encabezado: d3d12_xs.h o d3d12_x.h
Biblioteca: d3d12_xs.lib o d3d12_x.lib
Plataformas compatibles: consolas XBOX Series y familia XBOX One

Consulte también

Estructuras principales
Última modificación el 28 de agosto de 2026