Vulkan规范:第七章 7

来源:互联网 发布:淘宝老店新开流量限制 编辑:程序博客网 时间:2024/05/20 16:44

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的成员 pColorAttachmentspDepthStencilAttachmentpResolveAttachments, 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) 采样位置,某个逐采样操作依栅格化顺序执行。

原创粉丝点击