使用计算着色器渲染到交换链

Render to swap chain using compute shader

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

为此,我需要使用 VK_IMAGE_USAGE_STORAGE_BIT.

创建 swapchain

问题是 swapchain 需要使用格式 VK_FORMAT_B8G8R8A8_UNORMVK_FORMAT_B8G8R8A8_SRGB 创建,而这两种格式都不允许 VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT 具有物理格式我使用的设备。

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

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

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

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