2

我为学校项目制作了一个简单的光线追踪器,计算着色器应该用于对三角形或其他一些图元进行着色。为此,我想直接在计算着色器中写入后缓冲表面,然后立即呈现结果。我确定这在 DX11 中是可能的,尽管我似乎无法让它在 DX12 中工作。

我无法收集有关此的太多信息,但我发现这个 gamedev 线程讨论了我试图弄清楚的完全相同的问题,他们似乎得出了我的解决方法的结论:写入中间纹理然后采样在管道中。我不能完全接受这在 dx12 中是不可能实现的。为什么要删除该功能?是不是排队系统消除了一些开销,使得它没有必要拥有这个功能?

有没有什么方法可以实现光线追踪器,而无需写入单独的纹理,然后在管道中采样或将其复制到后台缓冲区?实现性能的最佳选择是什么?

4

1 回答 1

1

您将不得不访问答案。他们删除了创建无人机的功能,就像删除了在交换链中使用多样本表面的功能一样。

在交换链表面上授权 UAV 的问题是他们将不得不放弃对它发生的事情的跟踪。DX12 依赖于 UAV 在运行时 100% 易失性的描述符堆(渲染目标仅在 CPU 端,并且可以被跟踪)。

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

于 2017-12-20T01:39:24.187 回答