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

ID3D12GraphicsCommandList4

COM
IID8754318e-d3a9-4541-98cf-645b50dc4874継承元ID3D12GraphicsCommandList3自前メソッド開始 vtbl68

公式ドキュメント

レンダリング用のグラフィックスコマンドのリストをカプセル化し、レイトレーシングとレンダーパスをサポートするようにインターフェイスを拡張します。

メソッド 9

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

vtbl 68 void BeginRenderPass(DWORD NumRenderTargets, D3D12_RENDER_PASS_RENDER_TARGET_DESC* pRenderTargets, D3D12_RENDER_PASS_DEPTH_STENCIL_DESC* pDepthStencil, D3D12_RENDER_PASS_FLAGS Flags)

レンダーパスの期間中にバインドされる出力リソースのセットをバインドすることで、レンダーパスの開始を示します。これらのバインディングは、1 つ以上のレンダーターゲットビュー (RTV)、および (または) 深度ステンシルビュー (DSV) に対して行われます。

NumRenderTargetsDWORDinUINT です。バインドするレンダーターゲットの数。
pRenderTargetsD3D12_RENDER_PASS_RENDER_TARGET_DESC*inoptional定数 D3D12_RENDER_PASS_RENDER_TARGET_DESC へのポインター。1 つ以上のレンダーターゲットビュー (RTV) へのバインディング (レンダーパスの期間中は固定) と、その開始時および終了時のアクセス特性を記述します。
pDepthStencilD3D12_RENDER_PASS_DEPTH_STENCIL_DESC*inoptional定数 D3D12_RENDER_PASS_DEPTH_STENCIL_DESC へのポインター。深度ステンシルビュー (DSV) へのバインディング (レンダーパスの期間中は固定) と、その開始時および終了時のアクセス特性を記述します。
FlagsD3D12_RENDER_PASS_FLAGSinD3D12_RENDER_PASS_FLAGS です。レンダーパスの性質および要件を指定します。たとえば、中断 (suspending) または再開 (resuming) のレンダーパスであるかどうか、アンオーダードアクセスビューへの書き込みを行うかどうかなどです。
vtbl 69 void EndRenderPass()

レンダーパスの終了を示します。

vtbl 70 void InitializeMetaCommand(ID3D12MetaCommand* pMetaCommand, void* pInitializationParametersData, UINT_PTR InitializationParametersDataSizeInBytes)

指定したメタコマンドを初期化します。

pMetaCommandID3D12MetaCommand*in初期化するメタコマンドを表す ID3D12MetaCommand へのポインター。
pInitializationParametersDatavoid*inoptionalメタコマンドを初期化するためのパラメーター値を格納した定数構造体への省略可能なポインター。
InitializationParametersDataSizeInBytesUINT_PTRinpInitializationParametersData が指定されている場合は、それが指す構造体のサイズを格納する SIZE_T。指定されていない場合は 0。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

vtbl 71 void ExecuteMetaCommand(ID3D12MetaCommand* pMetaCommand, void* pExecutionParametersData, UINT_PTR ExecutionParametersDataSizeInBytes)

指定したメタコマンドの実行 (呼び出し) をグラフィックスコマンドリストに記録します。

pMetaCommandID3D12MetaCommand*in初期化するメタコマンドを表す ID3D12MetaCommand へのポインター。
pExecutionParametersDatavoid*inoptionalメタコマンドを実行するためのパラメーター値を格納した定数構造体への省略可能なポインター。
ExecutionParametersDataSizeInBytesUINT_PTRinpExecutionParametersData が指定されている場合は、それが指す構造体のサイズを格納する SIZE_T。指定されていない場合は 0。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

メタコマンドに渡すリソースを、メタコマンドの仕様で要求される状態に設定するのはアプリケーションの責任です。メタコマンドの定義仕様には、各パラメーターに期待されるリソース状態が定められています。 メタコマンドのアルゴリズムが入力リソースを利用できるようにするために、その前にアンオーダードアクセスビュー (UAV) バリアを挿入するのはアプリケーションの責任です。また、出力リソースを読み戻す場合には、そのための UAV バリアを挿入するのもアプリケーションの責任です。

アルゴリズムの実行中、ドライバーは、アルゴリズム実装内での出力リソースの使用を同期するために必要なだけ、出力リソースに対する UAV バリアを挿入することがあります。アプリケーションから見た場合、スクラッチメモリを含め、すべての出力および入出力リソースがメタコマンドによって書き込まれるものと想定してください。

vtbl 72 void BuildRaytracingAccelerationStructure(D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_DESC* pDesc, DWORD NumPostbuildInfoDescs, D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC* pPostbuildInfoDescs)

GPU 上でレイトレーシング高速化構造のビルドを実行し、必要に応じてビルド直後にビルド後情報 (post-build info) を出力します。

pDescD3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_DESC*inビルドする高速化構造の記述。
NumPostbuildInfoDescsDWORDinpPostbuildInfoDescs 配列のサイズ。ビルド後情報が不要な場合は 0 を設定します。
pPostbuildInfoDescsD3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC*inoptionalビルドされた高速化構造のプロパティを示すビルド後情報を生成するための、記述の省略可能な配列。

解説(Remarks)

このメソッドは、グラフィックスまたはコンピュートのコマンドリストから呼び出せますが、バンドルからは呼び出せません。

ビルド後情報は、すでにビルド済みの高速化構造に対して EmitRaytracingAccelerationStructurePostbuildInfo を呼び出すことで、個別に取得することもできます。ビルドと同時にビルド後情報を生成する利点は、ビルドの完了とビルド後情報の要求との間にバリアが不要になることであり、アプリケーションがビルド後情報を直ちに必要とするシナリオに対応できます。

vtbl 73 void EmitRaytracingAccelerationStructurePostbuildInfo(D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC* pDesc, DWORD NumSourceAccelerationStructures, ULONGLONG* pSourceAccelerationStructureData)

高速化構造のセットに対してビルド後のプロパティを出力します。これにより、アプリケーションは ID3D12GraphicsCommandList4::CopyRaytracingAccelerationStructure による高速化構造の操作に必要な出力リソース要件を知ることができます。

pDescD3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC*in生成するビルド後情報を記述する D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC オブジェクト。
NumSourceAccelerationStructuresDWORDinpSourceAccelerationStructureData が指す、高速化構造の GPU 仮想アドレスへのポインターの数。この数は出力側にも影響し、出力は NumSourceAccelerationStructures 個の出力構造体が連続して並ぶ配列になります。その構造体の型は、pDesc の記述で指定された InfoType フィールドによって決まります。
pSourceAccelerationStructureDataULONGLONG*in

サイズ NumSourceAccelerationStructures の GPU 仮想アドレス配列へのポインター。

アドレスは、D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BYTE_ALIGNMENT として定義されている 256 バイト境界にアラインされている必要があります。

ポインターが指すメモリは D3D12_RESOURCE_STATE_RAYTRACING_ACCELERATION_STRUCTURE 状態でなければなりません。

解説(Remarks)

このメソッドは、グラフィックスまたはコンピュートのコマンドリストから呼び出せますが、バンドルからは呼び出せません。

vtbl 74 void CopyRaytracingAccelerationStructure(ULONGLONG DestAccelerationStructureData, ULONGLONG SourceAccelerationStructureData, D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE Mode)

指定した変換を適用しながら、コピー元の高速化構造をコピー先メモリへコピーします。

DestAccelerationStructureDataULONGLONGin

コピー先のメモリ。指定した Mode に応じて必要な場合は、事前に EmitRaytracingAccelerationStructurePostbuildInfo を呼び出すことで、必要なサイズを知ることができます。

コピー先の開始アドレスは、指定した Mode に関係なく、D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BYTE_ALIGNMENT として定義されている 256 バイト境界にアラインされている必要があります。

コピー先のメモリ範囲は、コピー元と重なってはなりません。重なった場合の結果は未定義です。

ポインターが指すメモリが満たすべきリソース状態は、Mode パラメーターによって異なります。詳細については、D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE を参照してください。

SourceAccelerationStructureDataULONGLONGin

指定した Mode に基づいてコピーまたは変換される、高速化構造その他の型のデータのアドレス。このデータは変更されず、引き続き使用できます。この操作では、SourceAccelerationStructureData が指すデータのみがコピーされ、そのデータが参照している他のデータ (高速化構造など) はコピーされません。たとえば、トップレベル高速化構造の場合、それが参照するボトムレベル高速化構造は、この操作ではコピーされません。

コピー元のメモリは、指定した Mode に関係なく、D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BYTE_ALIGNMENT として定義されている 256 バイト境界にアラインされている必要があります。

ポインターが指すメモリが満たすべきリソース状態は、Mode パラメーターによって異なります。詳細については、D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE を参照してください。

ModeD3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODEin実行するコピー操作の種類。詳細については、D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE を参照してください。

解説(Remarks)

レイトレーシング高速化構造は内部ポインターを含む場合があり、デバイス依存の不透明なレイアウトを持つため、それらをコピーしたり操作したりするには専用の API が必要です。これにより、ドライバーが要求された操作を適切に処理できます。

このメソッドは、グラフィックスまたはコンピュートのコマンドリストから呼び出せますが、バンドルからは呼び出せません。

vtbl 75 void SetPipelineState1(ID3D12StateObject* pStateObject)

コマンドリストにステートオブジェクトを設定します。

pStateObjectID3D12StateObject*inコマンドリストに設定するステートオブジェクト。現在のリリースでは、型は D3D12_STATE_OBJECT_TYPE_RAYTRACING_PIPELINE のみ指定できます。

解説(Remarks)

このメソッドは、グラフィックスまたはコンピュートのコマンドリスト、およびバンドルから呼び出せます。

このメソッドは、グラフィックスシェーダーとコンピュートシェーダーに対してのみ定義されている ID3D12GraphicsCommandList::SetPipelineState の代替です。1 つのコマンドリスト上でアクティブなパイプラインステートは常に 1 つだけであるため、どちらの呼び出しも現在のパイプラインステートを設定します。両者の違いは、それぞれが特定の種類のパイプラインステートのみを設定するという点です。現在のリリースでは、SetPipelineState1 はレイトレーシングパイプラインステートの設定にのみ使用されます。

vtbl 76 void DispatchRays(D3D12_DISPATCH_RAYS_DESC* pDesc)

レイ生成シェーダーのスレッドを起動します。

pDescD3D12_DISPATCH_RAYS_DESC*inレイディスパッチの記述。

解説(Remarks)

このメソッドは、グラフィックスまたはコンピュートのコマンドリスト、およびバンドルから呼び出せます。

コマンドリストにレイトレーシングパイプラインステートが設定されている必要があります。設定されていない場合、この呼び出しの動作は未定義です。

グリッドサイズを設定するために、width / height / depth の 3 つの次元を渡します。これらの次元には、width * height * depth <= 2^30 という制約があります。これを超えた場合の動作は未定義です。 いずれかのグリッド次元が 0 の場合、スレッドは起動されません。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_ID3D12GraphicsCommandList4 "{8754318E-D3A9-4541-98CF-645B50DC4874}"
#usecom global ID3D12GraphicsCommandList4 IID_ID3D12GraphicsCommandList4 "{}"
#comfunc global ID3D12GraphicsCommandList4_BeginRenderPass                                   68 int,var,var,int
#comfunc global ID3D12GraphicsCommandList4_EndRenderPass                                     69
#comfunc global ID3D12GraphicsCommandList4_InitializeMetaCommand                             70 sptr,sptr,sptr
#comfunc global ID3D12GraphicsCommandList4_ExecuteMetaCommand                                71 sptr,sptr,sptr
#comfunc global ID3D12GraphicsCommandList4_BuildRaytracingAccelerationStructure              72 var,int,var
#comfunc global ID3D12GraphicsCommandList4_EmitRaytracingAccelerationStructurePostbuildInfo  73 var,int,var
#comfunc global ID3D12GraphicsCommandList4_CopyRaytracingAccelerationStructure               74 int64,int64,int
#comfunc global ID3D12GraphicsCommandList4_SetPipelineState1                                 75 sptr
#comfunc global ID3D12GraphicsCommandList4_DispatchRays                                      76 var
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。