【问题标题】:Defered shading using compute shader, multiple swapchains?使用计算着色器延迟着色,多个交换链?
【发布时间】:2013-02-15 02:46:07
【问题描述】:

又来了。我准备在我的 dx11 引擎中添加延迟着色,但我有一个架构问题。我正在考虑首先使用 MRT 渲染 gbuffer,将其传递给计算着色器,调度,然后输出结果。我的问题是,我应该创建两个交换链,一个用于渲染 gbuffer,一个 uav 用于将计算着色器渲染到后台缓冲区并呈现,还是有另一种方法可以做到这一点?我在这里要避免的是必须使用全屏四边形并在其上渲染 cs 的输出。开销太大。提前致谢。

【问题讨论】:

  • 使用标志 DXGI_USAGE_UNORDERED_ACCESS 创建交换链允许您将其用作计算着色器的输入。我刚试过,你确实可以有 DXGI_USAGE_RENDER_TARGET_OUTPUT | DXGI_USAGE_UNORDERED_ACCESS 在同一个交换链中,所以我将尝试使用该交换链运行计算着色器。如果它有效,那么我不需要两个交换链

标签: directx directx-11 compute-shader deferred-shading


【解决方案1】:

编辑:我需要补充一点,您这样做会收到一些状态警告,因此请谨慎使用。

最后,不需要两个交换链。您首先使用 DXGI_USAGE_UNORDERED_ACCESS 标志创建您的后备缓冲区。然后创建一个渲染目标。将场景渲染到该目标,将其作为 Texture2D 传递给计算着色器,并将后缓冲区作为 RWTexture2D 传递给计算着色器。然后只需发送 cs,呈现并完成!你在屏幕上得到了 cs 输出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-10
    • 2015-10-24
    相关资源
    最近更新 更多