> ## 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](/reference/graphics/d3d12/interfaces/id3d12device2/methods/id3d12device2_createpipelinestate_public)** メソッドで使用して、パイプライン状態オブジェクトを作成します。

指定するストリームの形式は、**[D3D12\_PIPELINE\_STATE\_SUBOBJECT\_TYPE](/reference/graphics/d3d12_x/enums/d3d12_pipeline_state_subobject_type)** とそれに対応するサブオブジェクト型の交互のセットで構成する必要があります (たとえば、**D3D12\_PIPELINE\_STATE\_SUBOBJECT\_TYPE\_RASTERIZER** は **[D3D12\_RASTERIZER\_DESC](/reference/graphics/d3d12/structs/d3d12_rasterizer_desc_public)** と対になります)。アラインメントに関して、D3D12 ランタイムは、サブオブジェクトが連続したフィールドのセットではなく、enum と構造体の個々のペア構造体であることを期待しています。また、システムの自然なワード アラインメントに揃えられることも期待しています。これは、`alignas(void*)` を使用するか、enum + サブオブジェクトと `void*` の `union` を作成することで実現できます。

<Info>
  **D3D12\_PIPELINE\_STATE\_SUBOBJECT\_TYPE** を単純に **void\*** と共用体にするだけでは不十分です。これは特定のサブオブジェクトのアラインメントが正しくなくなるためです。たとえば、**D3D12\_PIPELINE\_STATE\_SUBOBJECT\_TYPE\_PRIMITIVE\_TOPOLOGY** の後には **[D3D12\_PRIMITIVE\_TOPOLOGY\_TYPE](/reference/graphics/d3d12_x/enums/d3d12_primitive_topology_type)** enum が続きます。サブオブジェクト型が **void\*** と共用体になっている場合、この 2 つのメンバー間に追加のパディングが生じ、ストリームの破損につながります。このため、`alignas` が利用できない場合は、サブオブジェクト構造体全体を **void\*** と共用体にする必要があります
</Info>

**[D3D12\_RASTERIZER\_DESC](/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 でないシェーダーが複数見つかった場合も失敗します。つまり、たとえば **[ID3D12Device2::CreatePipelineState](/reference/graphics/d3d12/interfaces/id3d12device2/methods/id3d12device2_createpipelinestate_public)** の呼び出しごとに、シェーダー バイトコードへの非 null ポインターを持つのが 1 つだけであれば、ストリーム オブジェクトに **CS** と **VS** の両方を持つことは合法です。
パイプラインに無関係なサブオブジェクト型 (たとえば、グラフィックス ストリームでのコンピュート シェーダー サブオブジェクト) は無視されます。
サブオブジェクトが提供されない場合 (前述の必須サブオブジェクトを除く)、ランタイムがそれに対する既定値を提供します。

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 desc がコンピュート、メッシュ、またはグラフィックス パイプラインのいずれかであること、すべてのサブオブジェクトが認識される型であること、およびサブオブジェクトが重複していないことを検証します。

<Note>
  一部のサブオブジェクトは、重複したサブオブジェクトを認識するために、他のサブオブジェクトの "派生" バージョンと見なされます。たとえば、ランタイムが **[D3D12\_DEPTH\_STENCIL\_DESC](/reference/graphics/d3d12/structs/d3d12_depth_stencil_desc_public)** サブオブジェクトを検出し、その後 **[D3D12\_DEPTH\_STENCIL\_DESC1](/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](/ja-jp/reference/graphics/d3d12/interfaces/id3d12pipelinelibrary1/methods/id3d12pipelinelibrary1_loadpipeline_public.md)
- [D3D12_STREAM_OUTPUT_DESC](/ja-jp/reference/graphics/d3d12/structs/d3d12_stream_output_desc_public.md)
- [D3D12_COMPUTE_PIPELINE_STATE_DESC](/ja-jp/reference/graphics/d3d12/structs/d3d12_compute_pipeline_state_desc_public.md)
- [D3D12_CACHED_PIPELINE_STATE](/ja-jp/reference/graphics/d3d12/structs/d3d12_cached_pipeline_state_public.md)
- [D3D12_INPUT_LAYOUT_DESC](/ja-jp/reference/graphics/d3d12/structs/d3d12_input_layout_desc_public.md)
