Pular para o conteúdo principal
Descreve um fluxo de estado de pipeline.

Sintaxe

Membros

SizeInBytes
Tipo: SIZE_T
SAL: In Especifica o tamanho, em bytes, da estrutura de dados opaca apontada pelo membro pPipelineStateSubobjectStream. pPipelineStateSubobjectStream
Tipo: void *
SAL: In_reads(Inexpressible(“Dependentonsizeofsubobjects”)) Especifica o endereço de uma estrutura de dados que descreve, como um fluxo de bytes, um subobjeto de estado de pipeline arbitrário.

Comentários

Use esta estrutura com o método ID3D12Device2::CreatePipelineState para criar objetos de estado de pipeline. O formato do fluxo fornecido deve consistir em um conjunto alternado de D3D12_PIPELINE_STATE_SUBOBJECT_TYPE e dos tipos de subobjeto correspondentes (por exemplo, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER forma par com D3D12_RASTERIZER_DESC. Em termos de alinhamento, o runtime do D3D12 espera que os subobjetos sejam pares individuais de estruturas enum-struct, em vez de um conjunto contínuo de campos. Ele também espera que estejam alinhados ao alinhamento natural de palavra do sistema. Isso pode ser obtido usando alignas(void*) ou criando uma union do enum + subobjeto e um void*.
Não é suficiente simplesmente fazer a união de D3D12_PIPELINE_STATE_SUBOBJECT_TYPE com um void*, porque isso fará com que certos subobjetos fiquem desalinhados. Por exemplo, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PRIMITIVE_TOPOLOGY é seguido por um enum D3D12_PRIMITIVE_TOPOLOGY_TYPE. Se o tipo de subobjeto for unido a um void*, haverá preenchimento adicional entre esses 2 membros, resultando em corrupção do fluxo. Por isso, você deve unir toda a estrutura do subobjeto com um void* quando alignas não estiver disponível
Um exemplo de subobjeto adequado para uso com D3D12_RASTERIZER_DESC é mostrado aqui:
O runtime determinará o tipo de um fluxo de pipeline (os tipos válidos são COMPUTE, GRAPHICS e MESH) pelo tipo de subobjeto encontrado, dentre VS (sombreador de vértice), CS (sombreador de computação) e MS (sombreador de malha). Se o runtime não encontrar nenhum desses sombreadores, a criação do pipeline falhará. Se encontrar vários desses sombreadores que não sejam nulos, também falhará. Isso significa que é permitido ter, por exemplo, um CS e um VS no seu objeto de fluxo, desde que apenas um tenha um ponteiro não nulo para o bytecode do sombreador em qualquer chamada a ID3D12Device2::CreatePipelineState. Tipos de subobjeto irrelevantes para o pipeline (por exemplo, um subobjeto de sombreador de computação em um fluxo de gráficos) serão ignorados. Se um subobjeto não for fornecido (excluindo os subobjetos obrigatórios acima), o runtime fornecerá um valor padrão para ele. Considere usar as extensões d3dx12.h para C++, que fornecem um conjunto de estruturas auxiliares para todos os subobjetos de pipeline (por exemplo, a estrutura acima é muito semelhante a CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER). Esse cabeçalho pode ser encontrado no repositório DirectX-Headers no GitHub.

-runtime-validation

O runtime validará se a descrição do PSO é um pipeline de computação, de malha ou de gráficos, se todos os subobjetos são de tipos reconhecidos e se não há subobjetos duplicados.
Alguns subobjetos são considerados uma versão “derivada” de outros para fins de reconhecimento de subobjetos duplicados. Por exemplo, se o runtime descobrir um subobjeto D3D12_DEPTH_STENCIL_DESC e, mais tarde, um D3D12_DEPTH_STENCIL_DESC1, ele os considerará subobjetos duplicados e falhará.

Requisitos

Cabeçalho: d3d12_xs.h ou d3d12_x.h
Biblioteca: d3d12_xs.lib ou d3d12_x.lib
Plataformas com suporte: consoles XBOX Series e família XBOX One

Confira também

Estruturas principais
Última modificação em 6 de outubro de 2026