Win32 API 日本語リファレンス
ホームGraphics.Direct3D12 › ID3D12Device1

ID3D12Device1

COM
IID77acce80-638e-4e65-8895-c1f23386863e継承元ID3D12Device自前メソッド開始 vtbl44

公式ドキュメント

仮想アダプターを表し、ID3D12Device が提供するメソッドの範囲を拡張します。

解説(Remarks)

デバイスを作成するには D3D12CreateDevice を使用します。

メソッド 3

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 44 HRESULT CreatePipelineLibrary(void* pLibraryBlob, UINT_PTR BlobLength, GUID* riid, void** ppPipelineLibrary)

キャッシュされたパイプラインライブラリを作成します。

pLibraryBlobvoid*in入力ライブラリ BLOB が空の場合、ライブラリの初期内容は空になります。入力ライブラリ BLOB が空でない場合は、整合性が検証され、解析されたうえでポインターが保持されます。このメソッドに入力として渡すポインターは、返されるオブジェクトの有効期間中、有効であり続ける必要があります。効率上の理由から、データはコピーされません。
BlobLengthUINT_PTRinpLibraryBlob の長さをバイト単位で指定します。
riidGUID*inID3D12PipelineLibrary オブジェクトの一意の REFIID を指定します。通常は、マクロ IID_PPV_ARGS(&Library) を使用してこのパラメーターと次のパラメーターを設定します (Library はオブジェクトの名前です)。
ppPipelineLibraryvoid**out作成されたライブラリへのポインターを返します。

戻り値

型: HRESULT

関数が成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコード を返します。BLOB が破損している、または認識できない場合は E_INVALIDARG、指定されたデータが古いドライバーまたはランタイムに由来する場合は D3D12_ERROR_DRIVER_VERSION_MISMATCH、データが異なるハードウェアに由来する場合は D3D12_ERROR_ADAPTER_NOT_FOUND が返されます。

pPipelineLibrarynullptr を渡した場合、ランタイムは BLOB の検証は行いますが、実際のライブラリは作成せず、ライブラリが作成可能であった場合は S_FALSE を返します。

また、この機能には更新されたドライバーが必要であり、古いドライバー上で使用しようとすると DXGI_ERROR_UNSUPPORTED が返されます。

解説(Remarks)

パイプラインライブラリでは次の操作が可能です。

パイプラインライブラリのライフサイクルのどの時点においても、同一のサブコンポーネントを持つ PSO 間で重複が生じることはありません。

返されるインターフェイスの参照カウントのみを管理しつつ、渡したポインターの有効期間を管理するための推奨される方法は、ID3D12Object::SetPrivateDataInterface を利用し、IUnknown を実装して参照カウントが 0 になった時点でメモリを解放するオブジェクトを使用することです。

スレッドセーフティ

パイプラインライブラリはスレッドセーフに使用でき、必要に応じて内部で同期を行いますが、1 つだけ例外があります。複数のスレッドが同じ PSO を読み込む場合 (LoadComputePipelineLoadGraphicsPipeline、または LoadPipeline を使用)、この操作はライブラリ内のそのパイプラインの状態をスレッドセーフでない方法で変更する可能性があるため、スレッド側で同期を行う必要があります。

Direct3D 12 pipeline state cache sample を参照してください。

vtbl 45 HRESULT SetEventOnMultipleFenceCompletion(ID3D12Fence** ppFences, ULONGLONG* pFenceValues, DWORD NumFences, D3D12_MULTIPLE_FENCE_WAIT_FLAGS Flags, HANDLE hEvent)

複数のフェンスのうち 1 つ以上が指定した値に達したときに発生させるイベントを指定します。

ppFencesID3D12Fence**inID3D12Fence オブジェクトを指定する、長さ NumFences の配列です。
pFenceValuesULONGLONG*inイベントがシグナル状態になるために必要なフェンス値を指定する、長さ NumFences の配列です。
NumFencesDWORDin対象に含めるフェンスの数を指定します。
FlagsD3D12_MULTIPLE_FENCE_WAIT_FLAGSin処理方法を決定する D3D12_MULTIPLE_FENCE_WAIT_FLAGS のいずれか 1 つを指定します。
hEventHANDLEinイベントオブジェクトへのハンドルです。

戻り値

型: HRESULT

このメソッドは HRESULT の成功コードまたはエラーコードを返します。

解説(Remarks)

単一のフェンスを指定する場合は、SetEventOnCompletion メソッドを参照してください。

hEvent が null ハンドルの場合、この API は指定されたフェンス値に達するまで戻りません。

vtbl 46 HRESULT SetResidencyPriority(DWORD NumObjects, ID3D12Pageable** ppObjects, D3D12_RESIDENCY_PRIORITY* pPriorities)

このメソッドは、指定したオブジェクトのリストに対してレジデンシー優先度を設定します。

NumObjectsDWORDinppObjects 配列および pPriorities 配列に含まれるオブジェクトの数を指定します。
ppObjectsID3D12Pageable**inID3D12Pageable オブジェクトへの参照を格納した、長さ NumObjects の配列を指定します。
pPrioritiesD3D12_RESIDENCY_PRIORITY*inオブジェクトのリストに対応する D3D12_RESIDENCY_PRIORITY 値を格納した、長さ NumObjects の配列を指定します。

戻り値

型: HRESULT

このメソッドは HRESULT の成功コードまたはエラーコードを返します。

解説(Remarks)

詳細については、Residency を参照してください。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

出力引数:
#define global IID_ID3D12Device1 "{77ACCE80-638E-4E65-8895-C1F23386863E}"
#usecom global ID3D12Device1 IID_ID3D12Device1 "{}"
#comfunc global ID3D12Device1_CreatePipelineLibrary              44 sptr,sptr,var,sptr
#comfunc global ID3D12Device1_SetEventOnMultipleFenceCompletion  45 sptr,var,int,int,sptr
#comfunc global ID3D12Device1_SetResidencyPriority               46 int,sptr,var
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。