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

Render to swap chain using compute shader

本文关键字:交换 计算      更新时间:2023-10-16

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

为此,我需要使用用法创建swapchainVK_IMAGE_USAGE_STORAGE_BIT

问题是swapchain需要使用格式VK_FORMAT_B8G8R8A8_UNORMVK_FORMAT_B8G8R8A8_SRGB创建,并且 2 个都不允许与我使用的物理设备VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT格式功能。

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

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

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

此外,在提供支持的情况下,这意味着您的 CS 将不得不交换数据的顺序。并且不要忘记,当您创建交换链时,您必须询问它是否可以将其映像用作存储映像(imageUsage(。它可能直接禁止这样做。