Vulkan 中是否有类似的资源状态衰减或提升的概念?

Is there a similar concept of resource state decay or promotion in Vulkan?

我开始学习Vulkan的时候已经学习了Direct3D 12。我记得在Direct3D 12中有一个关于资源状态衰减或提升的概念。Vulkan中有类似的概念吗?

不,这听起来令人困惑。在 Vulkan 中,资源状态(布局)仅根据您的 VkImageMemoryBarrierVkAttachmentDescription::finalLayoutVkAttachmentReference::layout 显式更改。资源在 VkImageCreateInfo::initialLayout.

中指定的布局中开始其生命周期

Vulkan 也有一个 VK_IMAGE_LAYOUT_GENERAL 布局,可用于任何目的,但 vkQueuePresentKHR 除外,但可能会降低性能。

尽管如此,Vulkan 可以通过子通道在两个不同的布局中使用资源进行读取访问。 Vulkan 将根据 VkAttachmentReference::layouts 自动管理这种情况,无需任何额外的 Subpass 依赖。但这就是 Vulkan 的极限,没有比这更神奇的驱动程序了。

Vulkan 并没有真正等同于 "resource state" 的 D3D12 概念。最接近的等效项可能是图像布局,但 1) 那些仅适用于图像,以及 2) 所有布局转换均由用户明确指定。

在我看来,D3D12 的 "resource state" 将资源中数据的可用性问题捆绑在一起。也就是说,如果某些命令向该资源写入了一些数据,则资源状态部分决定了后续命令是否可以读取该数据。在同一个命令列表中,您将需要一个明确的资源状态屏障,但如果在两个命令之间有一个资源自动衰减到公共状态的点,您就不需要它了。

Vulkan 种类 有类似的东西,但不是以如此直接的方式,也没有那么频繁。 Vulkan 的执行依赖性和内存可见性概念涵盖了它,但这些并不是对象本身的命名属性。虽然在 Vulkan 的架构中有些地方存在隐式执行和内存障碍,但它们极为罕见。通常情况下,Vulkan 要求 您显式执行某种屏障等效操作以允许写入数据的可见性。