
[英]Vulkan vkCreateImage: The combination of format, type, tiling, usage and flags (…) unsupported when creating depth image
[英]Checking to see if an image format supports a usage in Vulkan?
如果我想查看图像格式的用途,我可以执行 vkGetPhysicalDeviceImageFormatProperties2() 并设置图像格式的使用标志。 我注意到如果这些用法和设置不支持格式,我传入的结构设置为全零,我可以知道格式是否支持这些用途。 因此,如果我想知道 VK_FORMAT_R8G8B8_UINT 是否支持从着色器采样,我会在使用标志中设置 VK_IMAGE_USAGE_SAMPLED_BIT 并将其称为 function。
我想知道的是,这是否等同于调用另一个名为 vkGetPhysicalDeviceFormatProperties2() 的 function,名称完全相同但名称中没有“图像”,为 function 指定格式,并检查是否设置了 VK_IMAGE_USAGE_SAMPLED_BIT。
因此,使用第一种方法,我给出了我想要的格式和用法,然后检查返回的值是否为零最大宽度、最大高度等,这意味着不支持这些用法,与传递格式的第二种方法相比,取回标志,然后检查标志。
这两种方法等效吗?
TL;DR:正确检查图像格式:询问如何使用该格式,然后询问可用格式和用法组合有哪些功能可用。
如果您调用vkGetPhysicalDeviceImageFormatProperties2
时使用的标志等与支持的图像类型不对应,则会出现错误: VK_ERROR_FORMAT_NOT_SUPPORTED
。 它继承了这一点,因为据说它“行为类似于vkGetPhysicalDeviceImageFormatProperties
”,它有一个关于这个错误的明确声明:
如果
format
不是受支持的图像格式,或者如果图像不支持format
、type
、tiling
、usage
和flags
的组合,则vkGetPhysicalDeviceImageFormatProperties
返回VK_ERROR_FORMAT_NOT_SUPPORTED
。
现在通常,引起错误的 function 将在任何返回值中产生未定义的值。 但是有一个奇怪的例外:
如果在
vkCreateImage
中使用的实现不支持vkGetPhysicalDeviceImageFormatProperties2
的参数组合,则imageFormatProperties
的所有成员都将填充为零。
但是,有一条明确的说明说这是旧的、不良的行为,只是为了兼容性而保留。 作为兼容性功能意味着您可以依赖它,但您不应该依赖它。 此外,它仅适用于imageFormatProperties
数据,不适用于您可以传递的任何扩展结构。
所以最好忽略这一点并按正确的顺序提问。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.