> ## 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

> Descreve um fluxo de estado de pipeline.

Descreve um fluxo de estado de pipeline.

## Sintaxe

```cpp theme={null}
typedef struct D3D12_PIPELINE_STATE_STREAM_DESC
{
    SIZE_T SizeInBytes;
    void  pPipelineStateSubobjectStream;
} D3D12_PIPELINE_STATE_STREAM_DESC
```

### Membros

*SizeInBytes*\
Tipo: SIZE\_T

[SAL](https://learn.microsoft.com/en-us/cpp/code-quality/annotating-function-parameters-and-return-values): <code>*In*</code>

Especifica o tamanho, em bytes, da estrutura de dados opaca apontada pelo membro pPipelineStateSubobjectStream.

*pPipelineStateSubobjectStream*\
Tipo: void \*

[SAL](https://learn.microsoft.com/en-us/cpp/code-quality/annotating-function-parameters-and-return-values): <code>*In\_reads*(*Inexpressible*("Dependentonsizeofsubobjects"))</code>

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](/pt-BR/reference/graphics/d3d12/interfaces/id3d12device2/methods/id3d12device2_createpipelinestate_public)** para criar objetos de estado de pipeline.

O formato do fluxo fornecido deve consistir em um conjunto alternado de **[D3D12\_PIPELINE\_STATE\_SUBOBJECT\_TYPE](/pt-BR/reference/graphics/d3d12_x/enums/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](/pt-BR/reference/graphics/d3d12/structs/d3d12_rasterizer_desc_public)**. 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*`.

<Info>
  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](/pt-BR/reference/graphics/d3d12_x/enums/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
</Info>

Um exemplo de subobjeto adequado para uso com **[D3D12\_RASTERIZER\_DESC](/pt-BR/reference/graphics/d3d12/structs/d3d12_rasterizer_desc_public)** é mostrado aqui:

```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;
}
```

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](/pt-BR/reference/graphics/d3d12/interfaces/id3d12device2/methods/id3d12device2_createpipelinestate_public)**.
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](https://github.com/microsoft/DirectX-Headers/blob/main/include/directx/d3dx12.h)** 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.

<Note>
  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](/pt-BR/reference/graphics/d3d12/structs/d3d12_depth_stencil_desc_public)** e, mais tarde, um **[D3D12\_DEPTH\_STENCIL\_DESC1](/pt-BR/reference/graphics/d3d12/structs/d3d12_depth_stencil_desc1_public)**, ele os considerará subobjetos duplicados e falhará.
</Note>

## 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](https://learn.microsoft.com/en-us/windows/win32/direct3d12/direct3d-12-structures)


## Related topics

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