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

时间:2019-12-31 06:29:23

标签: vulkan

当我开始学习Vulkan时,我已经学习了Direct3D 12。我记得Direct3D 12中存在关于资源状态衰减或提升的概念。Vulkan中是否存在类似的概念?

2 个答案:

答案 0 :(得分:1)

不,这听起来令人困惑。在Vulkan中,资源状态(布局)仅根据您的VkImageMemoryBarrierVkAttachmentDescription::finalLayoutVkAttachmentReference::layout进行显式更改。资源在VkImageCreateInfo::initialLayout中指定的布局中开始其生命。

Vulkan还具有VK_IMAGE_LAYOUT_GENERAL布局,该布局可用于除vkQueuePresentKHR之外的任何目的,这可能会降低性能。

尽管如此,Vulkan可以通过子通道在两种不同的布局中使用资源进行读取访问。 Vulkan将基于VkAttachmentReference::layout自动管理这种情况,而无需任何其他子通过依赖项。但这是Vulkan所能做到的,而且没有比这更多的驾驶员魔力了。

答案 1 :(得分:1)

Vulkan实际上并没有等同于D3D12的“资源状态”概念。最接近的等效项可能是图像布局,但是1)仅适用于图像,以及2)所有布局转换均由用户明确指定。

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

Vulkan的种类与此类似,但不是以这种直接的方式,而且也不是那么频繁。 Vulkan的执行依赖关系和内存可见性的概念涵盖了这一点,但是这些并不是对象本身的命名属性。尽管Vulkan体系结构中存在隐式执行和内存障碍的地方,但它们极为罕见。 Vulkan通常会要求您显式地执行某种等效于屏障的操作,以允许可视化的书面数据。