Skip to main content
パイプライン状態ストリームを記述します。

構文

メンバー

SizeInBytes
型: SIZE_T
SAL: In pPipelineStateSubobjectStream メンバーが指す不透明なデータ構造のサイズをバイト単位で指定します。 pPipelineStateSubobjectStream
型: void *
SAL: In_reads(Inexpressible(“Dependentonsizeofsubobjects”)) 任意のパイプライン状態サブオブジェクトをバイト ストリームとして記述するデータ構造のアドレスを指定します。

解説

この構造体を ID3D12Device2::CreatePipelineState メソッドで使用して、パイプライン状態オブジェクトを作成します。 指定するストリームの形式は、D3D12_PIPELINE_STATE_SUBOBJECT_TYPE とそれに対応するサブオブジェクト型の交互のセットで構成する必要があります (たとえば、D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZERD3D12_RASTERIZER_DESC と対になります)。アラインメントに関して、D3D12 ランタイムは、サブオブジェクトが連続したフィールドのセットではなく、enum と構造体の個々のペア構造体であることを期待しています。また、システムの自然なワード アラインメントに揃えられることも期待しています。これは、alignas(void*) を使用するか、enum + サブオブジェクトと void*union を作成することで実現できます。
D3D12_PIPELINE_STATE_SUBOBJECT_TYPE を単純に void* と共用体にするだけでは不十分です。これは特定のサブオブジェクトのアラインメントが正しくなくなるためです。たとえば、D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PRIMITIVE_TOPOLOGY の後には D3D12_PRIMITIVE_TOPOLOGY_TYPE enum が続きます。サブオブジェクト型が void* と共用体になっている場合、この 2 つのメンバー間に追加のパディングが生じ、ストリームの破損につながります。このため、alignas が利用できない場合は、サブオブジェクト構造体全体を void* と共用体にする必要があります
D3D12_RASTERIZER_DESC で使用するのに適したサブオブジェクトの例を以下に示します。
ランタイムは、VS (頂点シェーダー)、CS (コンピュート シェーダー)、MS (メッシュ シェーダー) のうちどのサブオブジェクト型が見つかるかによって、パイプライン ストリームの型 (有効な型は COMPUTEGRAPHICSMESH) を判別します。これらのシェーダーがどれも見つからない場合、パイプライン作成は失敗します。null でないシェーダーが複数見つかった場合も失敗します。つまり、たとえば ID3D12Device2::CreatePipelineState の呼び出しごとに、シェーダー バイトコードへの非 null ポインターを持つのが 1 つだけであれば、ストリーム オブジェクトに CSVS の両方を持つことは合法です。 パイプラインに無関係なサブオブジェクト型 (たとえば、グラフィックス ストリームでのコンピュート シェーダー サブオブジェクト) は無視されます。 サブオブジェクトが提供されない場合 (前述の必須サブオブジェクトを除く)、ランタイムがそれに対する既定値を提供します。 C++ 用の d3dx12.h 拡張機能の使用を検討してください。これはすべてのパイプライン サブオブジェクトに対する一連のヘルパー構造体を提供します (たとえば、上記の構造体は CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER に非常によく似ています)。このヘッダーは github の DirectX-Headers リポジトリにあります。

-runtime-validation

ランタイムは、PSO desc がコンピュート、メッシュ、またはグラフィックス パイプラインのいずれかであること、すべてのサブオブジェクトが認識される型であること、およびサブオブジェクトが重複していないことを検証します。
一部のサブオブジェクトは、重複したサブオブジェクトを認識するために、他のサブオブジェクトの “派生” バージョンと見なされます。たとえば、ランタイムが D3D12_DEPTH_STENCIL_DESC サブオブジェクトを検出し、その後 D3D12_DEPTH_STENCIL_DESC1 を検出した場合、これらは重複したサブオブジェクトと見なされ失敗します。

要件

ヘッダー: d3d12_xs.h または d3d12_x.h
ライブラリ: d3d12_xs.lib または d3d12_x.lib
サポートされるプラットフォーム: XBOX Series 本体および XBOX One ファミリ

関連項目

コア構造体
最終更新日 2026年8月24日