1

我正在尝试使用计算着色器直接渲染到交换链。

为此,我需要swapchain使用使用来创建VK_IMAGE_USAGE_STORAGE_BIT

问题是swapchain需要使用格式创建,VK_FORMAT_B8G8R8A8_UNORM或者VK_FORMAT_B8G8R8A8_SRGB两者都不允许VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT使用我使用的物理设备的格式功能。

我是不是说错了什么,或者swapchain使用我的配置无法渲染到带有计算着色器的内容?

4

1 回答 1

2

Vulkan 对实现没有任何要求,即它允许在计算着色器操作中直接使用交换链图像(仅供参考:“渲染”通常是指非常具体的操作;这不是在计算着色器中发生的事情)。因此,实现完全有可能通过各种方式禁止您在 CS 中使用交换链图像。

如果您无法以首选格式创建交换链图像,那么下一个最佳选择是查看是否可以找到可用作存储图像格式的图像视图的兼容格式。然而,这要求实现支持 KHR 扩展 swapchain_mutable_format,并且交换链的创建标志必须包括您打算VK_SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR为其VkImageFormatListCreateInfoKHR创建视图的格式列表。

此外,如果得到支持,这将意味着您的 CS 将不得不交换数据的顺序。并且不要忘记,当你创建交换链时,你必须询问它是否可以使用它的图像作为存储图像(imageUsage)。它可以直接禁止这个。

于 2019-12-11T14:37:11.213 回答