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

C++ 使用计算着色器渲染到交换链,c++,vulkan,C++,Vulkan,我正在尝试使用计算着色器直接渲染到交换链 为此,我需要创建swapchain,使用VK\u IMAGE\u usage\u STORAGE\u BIT 问题是swapchain需要使用格式VK_format\u B8G8R8A8\u UNORM或VK_format\u B8G8R8A8\u SRGB创建,并且这两种格式都不允许我使用的物理设备使用格式功能VK_format\u功能\u存储图像\u位 我是否说错了什么,或者使用我的配置无法使用compute shader渲染到swapchain?V

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

为此,我需要创建
swapchain
,使用
VK\u IMAGE\u usage\u STORAGE\u BIT

问题是
swapchain
需要使用格式
VK_format\u B8G8R8A8\u UNORM
VK_format\u B8G8R8A8\u SRGB
创建,并且这两种格式都不允许我使用的物理设备使用格式功能
VK_format\u功能\u存储图像\u位


我是否说错了什么,或者使用我的配置无法使用compute shader渲染到
swapchain

Vulkan不要求实现允许在计算着色器操作中直接使用swapchain图像(仅供参考:“渲染”)通常是指一个非常特定的操作;它不是在计算着色器中发生的事情)。因此,该实现完全可能禁止您通过各种方式在CS中使用swapchain映像

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


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

Vulkan不要求实现允许在计算着色器操作中直接使用swapchain图像(仅供参考:“渲染”通常指非常特定的操作;这不是在计算着色器中发生的事情)。因此,该实现完全可能禁止您通过各种方式在CS中使用swapchain映像

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


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

谢谢您的回答。在创建视图中更改
VK_format_R8G8B8A8_UNORM
的格式正在工作。问题是它会创建警告,说我需要标志
VK\u SWAPCHAIN\u CREATE\u MUTABLE\u FORMAT\u BIT\u KHR
。要添加它,我需要扩展名
VK_KHR_SWAPCHAIN_MUTABLE_FORMAT_extension_NAME
,但我的物理设备不支持它。继续发出警告是有问题还是有其他解决办法?@ArthurMonteiro:我错了;我不知道你需要那面旗子才能让它工作。谢谢你的回答。在创建视图中更改
VK_format_R8G8B8A8_UNORM
的格式正在工作。问题是它会创建警告,说我需要标志
VK\u SWAPCHAIN\u CREATE\u MUTABLE\u FORMAT\u BIT\u KHR
。要添加它,我需要扩展名
VK_KHR_SWAPCHAIN_MUTABLE_FORMAT_extension_NAME
,但我的物理设备不支持它。继续发出警告是有问题还是有其他解决办法?@ArthurMonteiro:我错了;我不知道你需要那面旗帜才能让它发挥作用。