关于Vulkan渲染画面数据杂乱但Renderdoc下正常问题

主要原因总结如下:

  1. RenderDoc在每个Pass后会强制把FrameBuffer存储下来方便profile可视化每个drawcall的数据。
  2. RenderDoc会给应用程序插入帧同步。

对于第一种情况,如果Renderpass的framestop operation错误设为了VK_ATTACHMENT_LOAD_OP_DONT_CARE,正常渲染时将会因为没有存储framebuffer数据导致下一个用到这个framebuffer的pass渲染出错误的结果,典型的就有shadowmap pass没有存储深度,导致下一个lighting pass出现错误的结果。

第二种情况可能会修复程序中的两种bug。

一是commandbuffer没有做好barrier的情况,因为renderdoc本身会插入多个barrier确保每次profile按顺序执行,这可能会导致renderdoc下启动原本vulkan程序没有做好barrier的问题被恰好修复了。

二是Mailbox的丢弃帧问题,如果gpu同时处理三帧以上的数据,极其容易出现多帧共享使用的Imgae如Gbuffer,被填入错误的垃圾数据导致画面撕裂。把同时处理帧数改到2或者换成FIFO类型可以解决这个问题。

© - 2024 · 月光下的旅行。 禁止转载