天天看點

Vulkan規範:第七章 7

7. Render Pass

一個render pass表示一系列附件、subpass、subpass之間的依賴關系的集合,描述了附件在subpass的過程中是 如何被使用的。 在指令緩沖區中render pass的使用 是一個 render pass執行個體 。

render pass由

VkRenderPass

類型的handle表示:

VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkRenderPass)
           

一個 附件描述 描述了一個附件的屬性,包含它的格式、采樣數、在每一個render pass執行個體的開始和結束時它的内容是被看作了什麼。

一個 subpass 代表渲染中的一個讀寫render pass 的附件子集的階段 。 渲染指令被記錄在render pass執行個體的某一個subpass中。

一個 subpass 描述了參與到subpass執行的附件的子集。 每一個subpass都可以被當作_輸入附件_ 的附件中讀取資料,寫入資料到被當作顔色、深度、模闆附件的附件中,并對解析附件執行多采樣解析操作。 一個subpass描述也可以包含多個 保留附件,這些附件不被subpass讀取或者寫入,但是它們的内容在subpass之間被一直保留。

如果附件是該subpass的顔色、深度、模闆、解析或者輸入附件(如

VkSubpassDescription

的成員 

pColorAttachments

pDepthStencilAttachment

pResolveAttachments

, and 

pInputAttachments

所描述),一個subpass就可以使用它。 如果一個附件在subpass之間被保留,subpass就不會使用它。 序号最小的subpass第一次使用附件。序号最大的subpass最後一次使用附件。

一個renderpass的所有subpass都渲染到同一維,每一個像素對應的單subpass的多個片元可讀取前一個subpass在同一個 (x,y,layer)位置寫入的内容。

注意

通過提前描述一個完整的subpass集合,render pass提供了在不同subpass之間優化存儲和轉移附件資料的機會。

實際上,這意味着帶有一個簡單幀緩沖區空間依賴的subpass也許會被合并到一個tiled rendering pass,一個render pass執行個體内附件的資料保持在晶片上。 然而,一個render pass僅僅包含一個subpass也很常見。

subpass依賴 描述了subpass之間的執行和記憶體依賴。

一個 subpass依賴鍊 是render pass内部多個subpass之間的一系列依賴關系,每一個subpass依賴的源subpass就是前一個依賴關系的目标subpass。

多個subpass也許會重疊或者亂序的執行,除非強制指定執行的依賴順序。每一個subpass隻參考記錄到同一個subpass的指令submission order , 和劃分renderpass界限的

vkCmdBeginRenderPass

、 

vkCmdEndRenderPass

指令(在另一個subpass的指令并沒有被包含)。 這影響力大多數其他的implicit ordering guarantees。

一個render pass描述了subpass和獨立于任何特定圖像視圖的附件的結構。 這個特定的圖像視圖(将被用于附件)和附件的次元,通過

VkFramebuffer

 對象指定。 緩沖區是參考特定的render pass(和緩沖區相容的,參考Render Pass 相容性)來建立的。 總的來說,一個render pass和一個幀緩存器給一個或多個subpass定義了完整的渲染狀态,也包括多個subpass之間的依賴性。

一個給定的subpass繪制指令的各種管線階段,在多個繪制指令之内或者跨多個指令,也許會順序/亂序的并行執行,然而仍遵循 管線順序。 然而,對于給定的(x,y,layer,sample) 采樣位置,某個逐采樣操作依栅格化順序執行。

繼續閱讀