D3D12使用后备缓冲表面作为无序访问视图(UAV)

时间:2017-12-19 08:59:11

标签: compute-shader directx-12 directcompute

我为学校项目制作一个简单的光线跟踪器,计算着色器应该用于遮蔽三角形或其他原始图形。 为此,我想直接在计算着色器中写入backbuffer-surface,然后在imideatly中显示结果。我确信这在DX11中是可行的,虽然我似乎无法在DX12中使用它。

我无法收集到关于此的更多信息,但我发现this gamedev thread正在讨论我试图解决的完全相同的问题,他们似乎得出结论,这是我的解决方法:写一个中间纹理然后在管道中采样。 我无法完全接受在dx12中无法实现这一点。为什么要删除该功能?难道排队系统会消除一些不需要具备此功能的开销吗?

有没有办法实现光线跟踪器而无需写入单独的纹理然后在管道中采样或将其复制到后缓冲区?实现绩效的最佳选择是什么?

1 个答案:

答案 0 :(得分:0)

您必须访问答案。他们删除了创建无人机的能力,就像他们删除了在交换链中使用多重采样表面的能力一样。

在交换链表面上授权无人机的问题是他们必须放弃跟踪发生的事情。 DX12依赖于无人机在运行时100%易失的描述符堆(渲染目标只是CPU侧,可以跟踪)。

Microsoft需要强烈跟踪交换链表面状态,以保证桌面演示的行为,因此,他们选择拒绝无人机绑定。