Skip to main content
キャッシュされたパイプライン ライブラリを作成します。データを共有すると予想されるパイプライン ステート オブジェクト (PSO) の場合、それらをシリアライズする前にライブラリにグループ化すると、メタデータによるオーバーヘッドが減少するとともに、冗長または重複したデータがディスクに書き込まれるのを回避する機会が得られます。 ID3D12PipelineLibrary のサポートは、D3D12_FEATURE_SHADER_CACHE および D3D12_FEATURE_DATA_SHADER_CACHE を指定した ID3D12Device::CheckFeatureSupport を使用して照会できます。D3D12_FEATURE_DATA_SHADER_CACHEFlags メンバーにフラグ D3D12_SHADER_CACHE_SUPPORT_LIBRARY が含まれている場合、ID3D12PipelineLibrary インターフェイスがサポートされています。それ以外の場合、この関数が呼び出されると常に DXGI_ERROR_NOT_SUPPORTED が返されます。

構文

パラメーター

pLibraryBlob
型: const void *
入力ライブラリ BLOB が空の場合、ライブラリの初期コンテンツは空です。入力ライブラリ BLOB が空でない場合、整合性が検証され、解析され、ポインターが保存されます。このメソッドへの入力として提供されるポインターは、返されるオブジェクトの有効期間中は有効なままである必要があります。効率上の理由から、データはコピーされません。 BlobLength
型: SIZE_T
pLibraryBlob の長さをバイト単位で指定します。 riid
型: const IID &
ID3D12PipelineLibrary オブジェクトの一意の REFIID を指定します。通常、これと次のパラメーターはマクロ IID_PPV_ARGS(&Library) で設定します。ここで、Library はオブジェクトの名前です。 ppPipelineLibrary
型: void **
作成されたライブラリへのポインターを返します。

戻り値

型: HRESULT 関数が成功した場合、S_OK を返します。それ以外の場合は、HRESULT エラー コード を返します。BLOB が破損しているか認識されない場合は E_INVALIDARG、提供されたデータが古いドライバーまたはランタイムからのものである場合は D3D12_ERROR_DRIVER_VERSION_MISMATCH、データが異なるハードウェアからのものである場合は D3D12_ERROR_ADAPTER_NOT_FOUND を含みます。 pPipelineLibrarynullptr を渡した場合、ランタイムは依然として BLOB の検証を実行しますが、実際のライブラリの作成は回避し、ライブラリが作成される予定であった場合は S_FALSE を返します。 また、この機能には更新されたドライバーが必要であり、古いドライバーで使用しようとすると DXGI_ERROR_UNSUPPORTED が返されます。

解説

パイプライン ライブラリでは次の操作が可能です。
  • 既存のライブラリ オブジェクトにパイプライン ステート オブジェクト (PSO) を追加する (StorePipeline を参照)。
  • ディスク ストレージ用に PSO ライブラリを連続したメモリ ブロックにシリアライズする (Serialize を参照)。
  • 永続ストレージから PSO ライブラリをデシリアライズする (これは CreatePipelineLibrary によって処理されます)。
  • ライブラリから個々の PSO を取得する (LoadComputePipeline および LoadGraphicsPipeline を参照)。
パイプライン ライブラリのライフサイクル中、同一のサブコンポーネントを持つ PSO 間で重複することは決してありません。 返されたインターフェイスの参照カウントのみを行いながら、提供されたポインターの有効期間を管理するための推奨ソリューションは、ID3D12Object::SetPrivateDataInterface を活用し、IUnknown を実装するオブジェクトを使用して、参照カウントが 0 に達したときにメモリを解放することです。

スレッド安全性

パイプライン ライブラリはスレッド セーフに使用でき、必要に応じて内部で同期を行いますが、1 つの例外があります。同じ PSO を複数のスレッドがロードする場合 (LoadComputePipelineLoadGraphicsPipeline、または LoadPipeline 経由)、スレッド セーフではない方法でライブラリ内のそのパイプラインの状態が変更される可能性があるため、これらのスレッドは自身で同期する必要があります。

Direct3D 12 パイプライン ステート キャッシュ サンプル を参照してください。

要件

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

関連項目

最終更新日 2026年8月13日