次の方法で共有


D3D12_PIPELINE_STATE_STREAM_DESC 構造体 (d3d12.h)

パイプライン状態ストリームについて説明します。

構文

typedef struct D3D12_PIPELINE_STATE_STREAM_DESC {
  SIZE_T SizeInBytes;
  void   *pPipelineStateSubobjectStream;
} D3D12_PIPELINE_STATE_STREAM_DESC;

メンバー

SizeInBytes

SAL: In

pPipelineStateSubobjectStream メンバーが指す不透明なデータ構造のサイズをバイト単位で指定します。

pPipelineStateSubobjectStream

SAL: In_reads(Inexpressible("Dependentonsizeofsubobjects"))

任意のパイプライン状態サブオブジェクトをバイトストリームとして記述するデータ構造のアドレスを指定します。

注釈

この構造体を ID3D12Device2::CreatePipelineState メソッドと共に使用して、パイプライン状態オブジェクトを作成します。

指定されたストリームの形式は、D3D12_PIPELINE_STATE_SUBOBJECT_TYPEの交互のセットと、それらに対応するサブオブジェクト型 (たとえば、D3D12_RASTERIZER_DESCとのペアD3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZERで構成されている必要があります。 配置の観点から、D3D12 ランタイムでは、サブオブジェクトは、フィールドの連続したセットではなく、列挙型構造体の個々の構造体ペアであると想定しています。 また、システムの自然な単語の配置に合わせて配置することも想定しています。 これを実現するには、 を使用alignas(void*)するか、列挙型 + サブオブジェクトと の をvoid*作成unionします。

重要

D3D12_PIPELINE_STATE_SUBOBJECT_TYPEを void*と結合するだけでは不十分です。これは、特定のサブオブジェクトが不整合になるためです。 たとえば、 D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PRIMITIVE_TOPOLOGY の後に D3D12_PRIMITIVE_TOPOLOGY_TYPE 列挙型が続きます。 サブオブジェクト型が void* と結合されている場合、これらの 2 つのメンバーの間に追加のパディングが発生し、ストリームが破損します。 このため、使用できない場合alignasは、サブオブジェクト構造体全体を void* と結合する必要があります

D3D12_RASTERIZER_DESCで使用するための適切なサブオブジェクトの例を次に示します。

struct alignas(void*) StreamingRasterizerDesc
{
private:
  D3D12_PIPELINE_STATE_SUBOBJECT_TYPE Type = D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER;
public:
  D3D12_RASTERIZER_DESC Desc;
}

ランタイムは、パイプライン ストリームの種類 ( COMPUTEGRAPHICSMESH の有効な型) を決定します。これにより、 VS (頂点シェーダー)、 CS (コンピューティング シェーダー)、 MS (メッシュ シェーダー) のサブオブジェクトの種類が見つかります。 ランタイムでこれらのシェーダーが見つからない場合、パイプラインの作成は失敗します。 これらのシェーダーのうち、null 以外の複数のシェーダーが見つかると、失敗します。 つまり、ストリーム オブジェクトに CSVS の両方を含めるのは有効であり、 ID3D12Device2::CreatePipelineState の呼び出しに対してシェーダー バイトコードに null 以外のポインターが 1 つしかない場合です。 パイプラインに関係のないサブオブジェクト型 (グラフィックス ストリーム内のコンピューティング シェーダー サブオブジェクトなど) は無視されます。 サブオブジェクトが指定されていない場合 (上記の必須サブオブジェクトを除く)、ランタイムによって既定値が提供されます。

すべてのパイプライン サブオブジェクトに d3dx12.h ヘルパー構造体のセットを提供する C++ の拡張機能を使用することを検討してください (たとえば、上記の構造体は とよく似ています CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER)。 このヘッダーは、github の DirectX-Headers リポジトリにあります。

要件

要件
Header d3d12.h

こちらもご覧ください

コア構造