使用用于DirectX 12的DirectX工具包,我能够成功地编译和运行各个MSAA和HDR教程示例。但是,当我将MSAA和HDR组件的相关代码组合到一个Game.cpp文件中时,编译失败,而调试层消息将失败:
D3D12错误: ID3D12CommandList::ResolveSubresource :指定格式与源resource.Format : R10G10B10A2_UNORM、源资源格式: R16G16B16A16_FLOAT RESOURCE_MANIPULATION错误#878: RESOLVESUBRESOURCE_INVALID_FORMAT不兼容
我正在使用HDR示例代码作为SDR显示监视器,因此需要应用声调映射。关于发出调用的顺序,在尝试解决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;
...我发现,在设置用于绘制2D精灵的描述符堆(在3D场景上)之前尝试使用音调映射会导致错误:
错误: CGraphicsCommandList::SetGraphicsRootDescriptorTable:包含句柄0x80000253a82ff205的描述符堆(0x0000025428203230:'DescriptorHeap')不同于当前设置描述符堆0x0000025428203540:'EffectTextureFactory‘。执行错误#708: SET_DESCRIPTOR_TABLE_INVALID D3D12:为上一条消息启用的BREAK,即: ERROR EXECUTION #708: SET_DESCRIPTOR_TABLE_INVALID
我承认这是第一次尝试合并HDR和MSAA,但我担心这些特性在DirectX 12中可能是不兼容和/或相互排斥的。我理解为什么在MSAA解决过程中会出现资源兼容性问题,因为我们需要为HDR使用浮点渲染目标。我应该注意,如果通过将m_msaa布尔值设置为false来跳过MSAA代码块,我的程序将使用HDR正确运行和呈现。
期待着任何人可能得到的任何建议。如果需要足够的代码或有关程序的其他细节,我很乐意更新我的帖子。
发布于 2021-03-27 19:14:43
ResolveSubresource无法完成从16 do到10:10:10:2 HDR10的转换。
一般来说,你需要:
呈现UI有时发生在步骤3之前,而其他时候则发生在步骤3之后。如果以前这样做了,你通常必须‘放大’UI的颜色,使他们脱颖而出。
有关技术细节,请参阅SimpleMSAA DX12和SimpleHDR DX12示例。
DirectX工具包包括一个可以执行HDR10音调映射的PostProcess类。见本教程。
发布于 2021-03-29 08:02:06
为了用4xMSAA成功地呈现HDR场景,我做了以下修改:
输出到传统的1080 p显示器(没有HDR10或V)。LHS屏幕截图是一个没有MSAA的HDR场景,而RHS捕获显示了4xMSAA对三维线框对象、水壶和地球模型以及三角形广告牌的平滑效果。cat和Hello文本是MSAA解析和音调映射后绘制到后台缓冲区的2D精灵。
再次感谢@ChuckWalbourn为我指明了正确的方向,我期待着用DirectX工具包来推进我的项目。
https://stackoverflow.com/questions/66830705
复制相似问题