Vulkan能否为每个颜色附件单独配置对应的深度缓冲区?
结论
单个Vulkan子通道在多颜色附件写入场景下,确实仅允许绑定一个深度模板缓冲区。
原因解释
Vulkan图形管线的光栅化、深度/模板测试阶段是全局生效的:同一次绘制调用产生的每个片元,只会执行一次深度测试、一次模板测试,对应的深度值、模板值也只会写入同一个存储位置,因此Vulkan在子通道描述的设计上,仅预留了一个pDepthStencilAttachment指针用于绑定深度模板附件,和颜色附件的数量无关。
多深度模板缓冲区的使用方案
如果你的业务逻辑需要用到多个深度模板缓冲区,可以选择以下两种实现方式:
- 拆分多个子通道:每个子通道绑定不同的深度模板附件,分批次执行绘制任务
- 手动输出深度值到颜色附件:如果不需要硬件深度/模板测试能力,仅需要存储多份深度数据,可以在片元着色器中将深度值作为普通输出,写入不同的颜色附件,不占用
pDepthStencilAttachment绑定位
补充说明
帧缓冲区本身支持挂载多个深度模板格式的附件,只是单个子通道同一时间最多只能启用一个来做硬件深度/模板测试、写入。
内容的提问来源于stack exchange,提问作者Zebrafish
相关产品推荐
相关产品推荐

