Vulkan规范:第九章

9. 管线

接下来的figure 展示了Vulkan管线的一些图表。一些Vulkan命令指定了需要被绘制对象或者需要执行的计算任务, 其他的指定了控制对象如何被管线各个阶段控制,或者控制了数据如何在有组织的内存(如图像、缓冲区)之间转移。 命令通过一个处理管线(图形管线 或者 计算管线)高效的发送出去。

graphics pipeline(Input Assembler)的第一个阶段按照要求的图元拓扑把顶点组装成几何图元, 如圆点,线段和三角形。在下一个阶段(Vertex Shader) 顶点可以形变、计算位置和属性。 如果细分 and/or 几何着色器被支持,他们可以从单个输入图元生成多个图元,可能 改变原图元拓扑或者生成在处理过程中生成另外的属性。

最终生成的图元被剪裁到一个剪裁空间,为下一个阶段Rasterization做准备。 栅格化器一系列帧缓冲区地址和值,使用二维的方式描述点、线段或者三角形。产生的每一个_片元_都传递给 下一个阶段(片元着色器),在每一个单独的片元上进行操作,最后才进入帧缓冲区。 这些操作包含根据之前或之后存储的深度值(影响深度缓冲)来判断是否进入帧缓冲区, 新的片元颜色值是否和之前存储的颜色进行blending,还有masking模板和其他的 逻辑操作

帧缓冲区操作针对<renderpass,render pass instance>>读写帧缓冲区的颜色、深度/模板附件。 附件可以在同一个render pass中后续subpass中用作片元着色器的输入附件。

compute pipeline和图形管线是独立的,图形管线可操作一维、二维或者三维工作组(可读写缓冲区和图像内存)。

这个顺序是用来描述Vulkan的,并不是Vulkan如何实现的一个严格准则,我们这里提到只是为了组织管线中各种各样的操作。 管线阶段之间真正的顺序保证在稍后的 synchronization chapter详细讲解。

pipeline
Figure 1. Block diagram of the Vulkan pipeline

每一个管线都是被所有的着色器阶段描述或者任何相关的固定功能阶段创造的一个对象所控制。 把整个管线链接 可以基于着色器的输入、输出来优化着色器,消除绘制阶段内昂贵的验证操作。

一个管线对象在命令缓冲区中被绑定到物理状态。当管线被绑定时,被标记为动态的任何管线对象状态都不可以应用到动态状态。 没用通过绑定管线对象来设置的动态状态可以在任何时刻被修改,在整个命令缓冲区生命周期内持续有效,直到被其他动态状态命令或者管线绑定所修改。 所有的状态,包括动态状态,都不从一个命令缓冲区继承到另外一个命令缓冲区。 只有在命令缓冲区中执行的操作所需的动态状态需要被设置。 比如,如果管线禁用了混合,那么动态颜色混合常量不需要在命令缓冲区中指定,甚至如果这个状态在管线状态对象中被标记为动态。 如果一个管线对象被绑定为一个没有被之前管线对象标记为动态的状态,这个新的管线对象状态将会覆盖动态状态。 修改没有被管线状态对象设置为动态的动态状态将会导致为定义的结果。

计算和图形管线分别通过VkPipeline 类型handle表示:

VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipeline)
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值