0

DirectX 12 用の DirectX ツール キットを使用して、個々の MSAA および HDR チュートリアル サンプルを正常にコンパイルおよび実行できます。ただし、 MSAA コンポーネントと HDR コンポーネントの関連コードを 1 つのGame.cppファイルにまとめると、デバッグ レイヤー メッセージでコンパイルが失敗します。

D3D12 エラー: ID3D12CommandList::ResolveSubresource: 指定された形式は、ソース リソースと互換性がありません。

SDR ディスプレイ モニターに HDR サンプル コードを使用しているため、トーン マッピングを適用する必要があります。呼び出しの順序に関しては、MSAA レンダー ターゲットの解決を試みる前に、HDR シーンを終了する呼び出しを行います。

// 3d rendering completed
m_hdrScene->EndScene(commandList);

if (m_msaa)
{
    // Resolve the MSAA render target.
    //PIXBeginEvent(commandList, PIX_COLOR_DEFAULT, L"Resolve");

    auto backBuffer = m_deviceResources->GetRenderTarget();
    ...

次に、MSAA 解決ブロックに続いて、トーン マッピング ステートメントを次のように配置します。

// Unbind depth/stencil for sprites (UI)
auto rtvDescriptor = m_deviceResources->GetRenderTargetView();
commandList->OMSetRenderTargets(1, &rtvDescriptor, FALSE, nullptr);

// set texture descriptor heap in prep for sprite drawing
commandList->SetDescriptorHeaps(static_cast<UINT>(std::size(heaps)), heaps);

// apply tonemapping to hdr scene
switch (m_deviceResources->GetColorSpace())
{
default:
    m_toneMap->Process(commandList);
    break;
...

(3D シーン上で) 2D スプライトを描画するための記述子ヒープを設定するにトーン マップを試行すると、次のエラーが発生することがわかりました。

D3D12 エラー: CGraphicsCommandList::SetGraphicsRootDescriptorTable: ハンドル 0x80000253a82ff205 を含む記述子ヒープ (0x0000025428203230:'DescriptorHeap') は、現在設定されている記述子ヒープ 0x0000025428203540:'EffectTextureFactory' とは異なります。[実行エラー #708: SET_DESCRIPTOR_TABLE_INVALID] D3D12:前のメッセージに対して有効になっているBREAK : [エラー実行 #708: SET_DESCRIPTOR_TABLE_INVALID]

HDR と MSAA を組み合わせる試みが初歩的だったことは認めますが、DirectX 12 ではこれらの機能に互換性がない、または相互に排他的である可能性があることを懸念しています。 HDR 用の浮動小数点レンダー ターゲットを使用します。m_msaaブール値をfalseに設定して MSAA コード ブロックをスキップすると、プログラムは HDR で正しく実行およびレンダリングされることに注意してください。

どなたかアドバイスをお待ちしております。プログラムに関する十分なコードやその他の詳細が必要な場合は、喜んで投稿を更新します。

4

2 に答える 2