vkGetPhysicalDeviceSurfaceFormatsKHR中的pSurfaceFormats代表什么?

时间:2017-05-03 07:11:41

标签: vulkan

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

我使用vkGetPhysicalDeviceSurfaceFormatsKHR函数,pSurfaceFormats具有NULL值,以返回名为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)是否仅从下面列出的允许值中返回一个结果或几个可能的结果?例如。可以返回VK_COLOR_SPACE_SRGB_NONLINEAR_KHRVK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT而不只是VK_COLOR_SPACE_SRGB_NONLINEAR_KHR吗?

    typedef enum 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

1 个答案:

答案 0 :(得分:1)

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

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

这不是一组标志,而是一个值,如果格式支持多个颜色空间,则每对在数组中需要一个单独的值。