Vulkan vkGetPhysicalDeviceSurfaceFormatsKHR中的pSurfaceFormats代表什么?

Vulkan vkGetPhysicalDeviceSurfaceFormatsKHR中的pSurfaceFormats代表什么?,vulkan,Vulkan,根据,参数pSurfaceFormats是指向VkSurfaceFormatKHR结构数组的指针。如果pSurfaceFormats为空,则在pSurfaceFormatCount中返回给定曲面支持的格式对数。支持的格式对数将大于或等于1 我已将vkGetPhysicalDeviceSurfaceFormatsKHR函数与具有空值的pSurfaceFormats一起使用,以返回名为surface\u formats的数组。我使用vulkan(vulkan的python包装器)完成了这项工作 vk

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

我已将
vkGetPhysicalDeviceSurfaceFormatsKHR
函数与具有空值的
pSurfaceFormats
一起使用,以返回名为
surface\u 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 )
下面是数组
表面\u格式的打印输出:

format =  <cdata 'struct VkSurfaceFormatKHR &' 0x1a76f60>
format.format =  44
format.colorSpace =  0
format =  <cdata 'struct VkSurfaceFormatKHR &' 0x1a76f68>
format.format =  50
format.colorSpace =  0
格式=
format.format=44
format.colorSpace=0
格式=
format.format=50
format.colorSpace=0
我的问题:

  • 为什么
    surface\u formats
    数组有两个索引,而不是一个或多个索引,如3、4、5、。。。?指数的数量与什么有关?例如,它是否与我的物理设备中
    vkqueuefamilyProperty
    的索引数有关

  • VkColorSpaceKHR
    (即f.colorSpace)是否仅从下面列出的允许值返回一个结果或几个可能的结果?例如,它是否可以返回
    VK\u颜色空间\u SRGB\u非线性空间\u KHR
    VK\u颜色空间\u显示\u P3\u非线性空间\u EXT
    ,而不是只返回
    VK\u颜色空间\u SRGB\u非线性空间\u KHR

    typedef枚举VkColorSpaceKHR{ VK_颜色_空间_SRGB_非线性_KHR=0, VK颜色空间显示P3非线性EXT=1000104001, VK\u颜色\u空间\u扩展\u SRGB\u线性\u扩展=1000104002, VK_颜色_空间_DCI_P3_线性_外部=10000404003, VK_颜色_空间_DCI_P3_非线性_EXT=1000104004, VK_颜色_空间_BT709_线性_外部=10000104005, VK_颜色_空间_BT709_非线性_EXT=1000104006, VK_颜色_空间_BT2020_线性_外部=1000104007, VK_颜色_空间_HDR10_ST2084_分机=1000104008, VK(颜色)空间(杜比视觉)分机=1000104009, VK_颜色_空间_HDR10_HLG_EXT=1000104010, VK_颜色_空间_ADOBERGB_线性_EXT=1000104011, VK\u颜色空间ADOBERGB\u非线性EXT=1000104012, VK_颜色_空间_通过_EXT=1000104013, }VkColorSpaceKHR


  • 格式描述颜色通道如何编码到内存中,包括每个通道的位数

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


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

    谢谢您的回答。我的第二个问题(你的第2和第3段)得到了你的答案。我不明白你的第一段与我的第一个问题有什么关系。你能详细说明一下吗?我不知道你说的“索引”是什么意思。索引指的是表示数组大小的索引
    surface\u格式
    。在我的例子中,我发现
    surface\u格式的大小是两个。因此,print语句输出两次
    .format
    .colorSpace
    值。我想知道数组大小的含义
    surface\u格式
    。还有,为什么它的大小不是1或3、4、5等,而是2。它是否与
    VKQueueFamilyProperty
    的大小有关?不,这是不相关的,大小实际上是实现为曲面支持多少不同的格式/颜色空间对。然后,在创建swapchain时,选择一个并将值传递到VkSwapchainCreateInfoKHR。数组的大小可以是1到2688(所有可能的格式乘以所有可能的颜色空间)。虽然获得超过一个数量的将是非常罕见的。最有可能的组合驱动程序,GPU,连接显示器和操作系统的窗口合成器。