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

> 描述管線狀態資料流。

描述管線狀態資料流。

## 語法

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

### 成員

*SizeInBytes*\
類型：SIZE\_T

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

指定 pPipelineStateSubobjectStream 成員所指向之不透明資料結構的大小 (以位元組為單位)。

*pPipelineStateSubobjectStream*\
類型：void \*

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

指定以位元組資料流描述任意管線狀態子物件之資料結構的位址。

## 備註

請將此結構與 **[ID3D12Device2::CreatePipelineState](/zh-TW/reference/graphics/d3d12/interfaces/id3d12device2/methods/id3d12device2_createpipelinestate_public)** 方法搭配使用，以建立管線狀態物件。

所提供資料流的格式應由交替的 **[D3D12\_PIPELINE\_STATE\_SUBOBJECT\_TYPE](/zh-TW/reference/graphics/d3d12_x/enums/d3d12_pipeline_state_subobject_type)** 及其對應的子物件類型組成 (例如，**D3D12\_PIPELINE\_STATE\_SUBOBJECT\_TYPE\_RASTERIZER** 與 **[D3D12\_RASTERIZER\_DESC](/zh-TW/reference/graphics/d3d12/structs/d3d12_rasterizer_desc_public)** 配對)。在對齊方面，D3D12 執行階段預期子物件是個別的列舉-結構配對，而不是連續的欄位集合。它也預期子物件對齊系統的自然字組對齊。這可以使用 `alignas(void*)`，或是將列舉 + 子物件與 `void*` 組成 `union` 來達成。

<Info>
  僅將 **D3D12\_PIPELINE\_STATE\_SUBOBJECT\_TYPE** 與 **void\*** 組成聯集是不夠的，因為這會導致某些子物件未對齊。例如，**D3D12\_PIPELINE\_STATE\_SUBOBJECT\_TYPE\_PRIMITIVE\_TOPOLOGY** 後面接著 **[D3D12\_PRIMITIVE\_TOPOLOGY\_TYPE](/zh-TW/reference/graphics/d3d12_x/enums/d3d12_primitive_topology_type)** 列舉。如果子物件類型與 **void\*** 組成聯集，則這 2 個成員之間會有額外的填補，導致資料流損毀。因此，當無法使用 `alignas` 時，您應該將整個子物件結構與 **void\*** 組成聯集
</Info>

以下顯示適合與 **[D3D12\_RASTERIZER\_DESC](/zh-TW/reference/graphics/d3d12/structs/d3d12_rasterizer_desc_public)** 搭配使用的子物件範例：

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

執行階段會依據在 **VS** (頂點著色器)、**CS** (計算著色器) 和 **MS** (網格著色器) 中找到的子物件類型，判斷管線資料流的類型 (有效類型為 **COMPUTE**、**GRAPHICS** 和 **MESH**)。如果執行階段找不到任何這些著色器，管線建立就會失敗。如果找到多個不為 null 的這些著色器，也會失敗。這表示在資料流物件中同時擁有 **CS** 和 **VS** (舉例來說) 是合法的，前提是對 **[ID3D12Device2::CreatePipelineState](/zh-TW/reference/graphics/d3d12/interfaces/id3d12device2/methods/id3d12device2_createpipelinestate_public)** 的任何指定呼叫中，只有一個著色器的著色器位元組程式碼指標不是 null。
與管線無關的子物件類型 (例如圖形資料流中的計算著色器子物件) 會被忽略。
如果未提供子物件 (上述必要子物件除外)，執行階段會為其提供預設值。

請考慮使用 C++ 的 `d3dx12.h` 延伸模組，其為所有管線子物件提供一組協助程式結構 (例如，上述結構與 `CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER` 非常相似)。此標頭可在 GitHub 上的 **[DirectX-Headers](https://github.com/microsoft/DirectX-Headers/blob/main/include/directx/d3dx12.h)** 存放庫下找到。

### -runtime-validation

執行階段會驗證 PSO 描述是計算、網格或圖形管線，所有子物件都是可辨識的類型，而且沒有重複的子物件。

<Note>
  為了辨識重複的子物件，某些子物件會被視為其他子物件的「衍生」版本。例如，如果執行階段發現 **[D3D12\_DEPTH\_STENCIL\_DESC](/zh-TW/reference/graphics/d3d12/structs/d3d12_depth_stencil_desc_public)** 子物件，之後又發現 **[D3D12\_DEPTH\_STENCIL\_DESC1](/zh-TW/reference/graphics/d3d12/structs/d3d12_depth_stencil_desc1_public)**，它會將這些視為重複的子物件而失敗。
</Note>

## 需求

**標頭:** d3d12\_xs.h 或 d3d12\_x.h\
**程式庫:** d3d12\_xs.lib 或 d3d12\_x.lib\
**支援的平台**: XBOX Series 主機與 XBOX One 系列

## 另請參閱

[核心結構](https://learn.microsoft.com/en-us/windows/win32/direct3d12/direct3d-12-structures)


## Related topics

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