vulkan杂记-子流程依赖

渲染流程的子流程会自动进行图像布局变换。这一变换过程由子流程
的依赖所决定。

子流程的依赖包括子流程之间的内存和执行的依赖关系。

虽然我们现在只使用了一个子流程,

但子流程执行之前和子流程执行之后的操作也被算作隐含的子流程。

在 渲 染 流 程 开 始 和 结 束 时 会 自 动 进 行 图 像 布 局 变 换,但 在 渲 染 流
程 开 始 时 进 行 的 自 动 变 换 的 时 机 和 我 们 的 需 求 不 符, 变 换 发 生 在 管
线 开 始 时,但 那 时 我 们 可 能 还 没 有 获 取 到 交 换 链 图 像。

有 两 种 方 式 可
以解决这个问题。一个是设置 imageAvailableSemaphore 信号量的 wait-
Stages 为 VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,确保渲染流
程 在 我 们 获 取 交 换 链 图 像 之 前 不 会 开 始。

一 个 是 设 置 渲 染 流 程 等 待

VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT 管线阶段。在这里,为了让读者能够了解子流程依赖如何控制图像布局变换,
我们使用第二种方式。

配置子流程依赖需要使用 VkSubpassDependency 结构体。

VkSubpassDependency dependency = { } ;
dependency . s r c S u b p a s s = VK_SUBPASS_EXTERNAL;
dependency . dstSubpass = 0 ;

srcSubpass 和 dstSubpass 成员变量用于指定被依赖的子流程的索引和
依赖被依赖的子流程的索引。

VK_SUBPASS_EXTERNAL 用来指定我们
之前提到的隐含的子流程,对 srcSubpass 成员变量使用表示渲染流程开始
前的子流程,对 dstSubpass 成员使用表示渲染流程结束后的子流程。

这里
使用的索引 0 是我们之前创建的子流程的索引。为了避免出现循环依赖,
我们给 dstSubpass 设置的值必须始终大于 srcSubpass。

dependency . srcStageMask =VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT;

dependency . srcAccessMask = 0 ;

srcStageMask 和 srcAccessMask 成员变量用于指定需要等待的管线阶
段和子流程将进行的操作类型。

我们需要等待交换链结束对图像的读取才
能对图像进行访问操作,也就是等待颜色附着输出这一管线阶段。

dependency . dstStageMask =VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT;
dependency . dstAccessMask = VK_ACCESS_COLOR_ATTACHMENT_READ_BIT
| VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT;

dstStageMask 和 dstAccessMask 成员变量用于指定需要等待的管线阶
段和子流程将进行的操作类型。在这里,我们的设置为等待颜色附着的输
出阶段,子流程将会进行颜色附着的读写操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

祝太勇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值