vkGetPhysicalDeviceSurfaceFormatsKHR 中的 pSurfaceFormats 代表什么?

What does the pSurfaceFormats in vkGetPhysicalDeviceSurfaceFormatsKHR represent?

根据vkGetPhysicalDeviceSurfaceFormatsKHR,参数pSurfaceFormats是指向VkSurfaceFormatKHR结构数组的指针。如果 pSurfaceFormats 为 NULL,则给定表面支持的格式对数在 pSurfaceFormatCount 中 returned。支持的格式对数量将大于或等于 1。

我使用了 vkGetPhysicalDeviceSurfaceFormatsKHR 函数,其中 pSurfaceFormats 具有 NULL 值 return 一个名为 surface_formats 的数组。我使用 vulkan 完成了此操作,它是 Vulkan 的 python 包装器。

vkGetPhysicalDeviceSurfaceFormatsKHR = vkGetInstanceProcAddr(
    instance, "vkGetPhysicalDeviceSurfaceFormatsKHR")

surface_formats = vkGetPhysicalDeviceSurfaceFormatsKHR (
    physicalDevice = physical_device,
    surface = surface )

for f in surface_formats:
    print('    format = ', f )
    print('    format.format = ', f.format )
    print('    format.colorSpace = ', f.colorSpace )

下面是数组的打印输出 surface_formats:

format =  <cdata 'struct VkSurfaceFormatKHR &' 0x1a76f60>
format.format =  44
format.colorSpace =  0
format =  <cdata 'struct VkSurfaceFormatKHR &' 0x1a76f68>
format.format =  50
format.colorSpace =  0

我的问题:

  1. 为什么 surface_formats 数组有两个索引,而不是只有 1 个索引或多个索引,如 3、4、5、...?指数的数量与什么有关?例如,是否与我的物理设备中VkQueueFamilyProperties的索引数有关?

  2. VkColorSpaceKHR(即f.colorSpace)仅return一个结果还是下面列出的允许值的一些可能结果?例如。可以 return VK_COLOR_SPACE_SRGB_NONLINEAR_KHRVK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT 而不仅仅是 VK_COLOR_SPACE_SRGB_NONLINEAR_KHR 吗?

    typedef 枚举 VkColorSpaceKHR { VK_COLOR_SPACE_SRGB_NONLINEAR_KHR = 0, VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT = 1000104001, VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT = 1000104002, VK_COLOR_SPACE_DCI_P3_LINEAR_EXT = 1000104003, VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT = 1000104004, VK_COLOR_SPACE_BT709_LINEAR_EXT = 1000104005, VK_COLOR_SPACE_BT709_NONLINEAR_EXT = 1000104006, VK_COLOR_SPACE_BT2020_LINEAR_EXT = 1000104007, VK_COLOR_SPACE_HDR10_ST2084_EXT = 1000104008, VK_COLOR_SPACE_DOLBYVISION_EXT = 1000104009, VK_COLOR_SPACE_HDR10_HLG_EXT = 1000104010, VK_COLOR_SPACE_ADOBERGB_LINEAR_EXT = 1000104011, VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT = 1000104012, VK_COLOR_SPACE_PASS_THROUGH_EXT = 1000104013, } VkColorSpaceKHR

格式描述了颜色通道如何编码到内存中,这包括每个通道有多少位。

颜色space 描述了从编码颜色到实际线性 sRGB 颜色的映射 space,您希望颜色用于基于物理的东西。

这不是一组标志,而是一个值,如果一种格式支持多种颜色 space,那么数组中的每一对都需要一个单独的值。