問題タブ [directx-descriptor-heap]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
3720 参照

c++ - directx-12 - 複数の記述子ヒープで commandlist を使用する方法は?

現在マイクロソフトの例を調べていると、コマンドリストごとに cbv_srv_uav ヒープが 1 つしか使用されていないことがわかります (+ 追加のサンプラー ヒープ上にある可能性があります)。

CommandList ごとに複数のヒープを使用することは可能ですか?

だから私はヒープと範囲をセットアップします

その後、記述子テーブルを定義します

そのため、rsv ヒープの cpu オフセット 0 と 1 でテクスチャ 1 と 2 の shaderResourceViews を作成し、cbv ヒープの cpu オフセット 0 で定数バッファーの constantbufferview を作成します。

このような:

コマンドリストにこれらのヒープを参照するように指示する時が来ました

この後、コマンドリストを閉じると常にスローされます。

どのテーブルのどのヒープをコマンドリストに伝えるかを次に示します。

すべてのオブジェクトを 1 つの記述子ヒープ (例のように) に記述し、そのヒープの異なるオフセットを使用するだけで問題なく動作します。

デバッグ出力:

D3D12 エラー: ID3D12CommandList::SetDescriptorHeaps: pDescriptorHeaps[1] は、pDescriptorHeaps 配列の前の方にある記述子ヒープ タイプを設定します。一度に設定できる記述子ヒープの種類は 1 つだけです。[実行エラー #554: SET_DESCRIPTOR_HEAP_INVALID] D3D12 エラー: CCommandList::SetGraphicsRootDescriptorTable: 現在コマンド リストに CBV_SRV_UAV 記述子ヒープが設定されていないため、CBV_SRV_UAV ハンドルのルート記述子テーブルの設定は無効です。[実行エラー #708: SET_DESCRIPTOR_TABLE_INVALID] D3D12 エラー: CCommandList::SetGraphicsRootDescriptorTable: 現在コマンド リストに CBV_SRV_UAV 記述子ヒープが設定されていないため、CBV_SRV_UAV ハンドルのルート記述子テーブルの設定は無効です。[実行エラー #708: SET_DESCRIPTOR_TABLE_INVALID] D3D12 エラー: CCommandList::SetGraphicsRootDescriptorTable: 現在、コマンド リストに CBV_SRV_UAV 記述子ヒープが設定されていないため、CBV_SRV_UAV ハンドルのルート記述子テーブルの設定は無効です。[実行エラー #708: SET_DESCRIPTOR_TABLE_INVALID]