我目前在Vulkan中實現了一個帶有多線程的基本延遲渲染器。由於我的G緩衝區應該與最終圖像具有相同的分辨率,所以我們希望根據this演示文稿在幻燈片44(第138頁)中的說明,在單次渲染過程中使用多次子循環執行此操作。它說:多線程着色傳遞Vulkan
- vkCmdBeginCommandBuffer
- vkCmdBeginRenderPass
- vkCmdExecuteCommands
- vkCmdNextSubpass
- vkCmdExecuteCommands
- vkCmdEndRenderPass
- vkCmdEndCommandBuffer
我在第一個子過程中得到了這個結果,您可以迭代場景圖併爲每個實體/網格記錄一個輔助命令緩衝區。我沒有得到的是你應該如何使用輔助命令緩衝區進行陰影傳遞。你是否將屏幕分成幾部分,並將每個部分渲染到一個單獨的線程中,或者只是爲整個第二個子通道記錄一個輔助命令緩衝區?
我知道,第二subpass被渲染到從G-Buffer的全屏幕四邊信息,但我的問題是,如果將有任何理智/有用的應用程序多線程通過這個通道,或者如果我應該開始第二個子通道'VK_SUBPASS_CONTENTS_INLINE' – Dynamitos
正如我在我的回答中所說,我想使用VK_SUBPASS_CONTENTS_INLINE進行着色傳遞yes) –
@Dynamitos哦。那麼你可以像演示文稿中的第14頁那樣做,這需要3 cmdbuffers(可以用多線程方式構建),但對我來說聽起來像是不必要地尋找過早的優化。我認爲cmdbuffer的構建是相對較快的,即使它們只有少數幾個是單線程的。 – krOoze