[PATCH 0/6] powervr: MT8173 GPU support

Chen-Yu Tsai wenst at chromium.org
Thu May 30 21:00:32 PDT 2024


On Thu, May 30, 2024 at 4:35 PM Chen-Yu Tsai <wenst at chromium.org> wrote:
>
> Hi everyone,
>
> This series enables the PowerVR GPU found in the MT8173 SoC, found in
> some Chromebooks.
>
> This version is different from the initial powervr driver submission [1]
> in that it splits out the GPU glue layer support out of the powervr
> driver and into a separate clock and power domain driver. The glue code
> is otherwise the same, and also the same as found in the ChromeOS
> kernels, with some extra comments and macro names added where possible.
>
> Patch 1 adds a binding for the glue layer, called mfgtop. The glue layer
> contains clock and power controls for the GPU.
>
> Patch 2 adds a driver for the glue layer.
>
> Patch 3 adds an entry for the MT8173 GPU and 6XT series to the PowerVR
> binding.
>
> Patch 4 adds an entry for the PowerVR 6XT series GPU to the driver.
>
> Patch 5 corrects the clock for the GPU (called MFG) power domain.
>
> Patch 6 adds device nodes for the GPU and glue layer to the MT8173 dtsi
> file.
>
> Patch 2 and 6 depend on patch 1 to build. I suppose some common
> immutable tree would be needed from the MediaTek maintainers.
>
> The kernel driver successfully probes the hardware and loads the
> "rogue_4.40.2.51_v1.fw" firmware provided by Imagination Technologies [2].
> Userspace was tested with Mesa 24.0.8 from Debian Trixie rebuilt with
> the powervr vulkan driver enabled. `vulkaninfo` gives some information
> about the GPU (attached at the end), but running the `triangle` example
> from the Sascha Willems demos [3] with -DUSE_D2D_WSI=ON as recommended [4]
> failed with:
>
>     Can't find a display and a display mode!
>
> Same program worked correctly on a BeaglePlay and displayed a color
> gradient triangle. Not sure what went wrong here.

Frank mentioned over IRC that giving `triangle` a screen resolution would
make it work, and it did! Thanks Frank!

OTOH I'm getting some extra warnings not seen on the BeaglePlay:

    MESA: error: No hard coded passthrough rta vertex shader.
Returning empty shader.
    MESA: warning: ../src/imagination/vulkan/pvr_job_context.c:71:
FINISHME: Missing reset support for brn51764
    MESA: warning: ../src/imagination/vulkan/pvr_job_context.c:74:
FINISHME: Missing reset support for brn58839
    MESA: warning: ../src/imagination/vulkan/pvr_border.c:104:
FINISHME: Devices without tpu_border_colour_enhanced require entries
for compressed formats to be stored in the table pre-compressed.

I also get a constant stream of kernel error messages, all the same:

    powervr 13000000.gpu: [drm] Received unknown FWCCB command 2abc0069

And the first few frames seem to flicker. (Though that could also be the
display driver that's at fault.)


For reference, on the BeaglePlay I see:

    MESA: error: No hard coded idfwdf program. Returning empty program.
    MESA: error: No hard coded passthrough vertex shader. Returning
empty shader.
    MESA: warning:
../src/imagination/vulkan/pvr_descriptor_set.c:1073: FINISHME: Entry
tracker for allocations?


Regards
ChenYu


> Anyway, please have a look and test.
>
>
> Thanks
> ChenYu
>
> [1] https://lore.kernel.org/dri-devel/20220815165156.118212-2-sarah.walker@imgtec.com/
> [2] https://gitlab.freedesktop.org/imagination/linux-firmware/-/tree/powervr
> [3] https://github.com/SaschaWillems/Vulkan
> [4] https://lore.kernel.org/dri-devel/f2b2671e-5acc-4dec-9c2e-3c9cd2e1f19e@imgtec.com/
>
> Chen-Yu Tsai (6):
>   dt-bindings: clock: mediatek: Add mt8173 mfgtop
>   clk: mediatek: Add mt8173-mfgtop driver
>   dt-bindings: gpu: powervr-rogue: Add MediaTek MT8173 GPU
>   drm/imagination: Add compatible string entry for Series6XT
>   arm64: dts: mediatek: mt8173: Fix MFG_ASYNC power domain clock
>   arm64: dts: mediatek: mt8173: Add GPU device nodes
>
>  .../clock/mediatek,mt8173-mfgtop.yaml         |  71 ++++++
>  .../bindings/gpu/img,powervr-rogue.yaml       |  24 +-
>  arch/arm64/boot/dts/mediatek/mt8173.dtsi      |  26 +-
>  drivers/clk/mediatek/Kconfig                  |   9 +
>  drivers/clk/mediatek/Makefile                 |   1 +
>  drivers/clk/mediatek/clk-mt8173-mfgtop.c      | 240 ++++++++++++++++++
>  drivers/gpu/drm/imagination/pvr_drv.c         |   1 +
>  include/dt-bindings/clock/mt8173-clk.h        |   7 +
>  8 files changed, 374 insertions(+), 5 deletions(-)
>  create mode 100644 Documentation/devicetree/bindings/clock/mediatek,mt8173-mfgtop.yaml
>  create mode 100644 drivers/clk/mediatek/clk-mt8173-mfgtop.c
>
>
> base-commit: 1613e604df0cd359cf2a7fbd9be7a0bcfacfabd0
>
> Vulkan info output:
>
> WARNING: [Loader Message] Code 0 : terminator_CreateInstance: Received return code -3 from call to vkCreateInstance in ICD /usr/lib/aarch64-linux-gnu/libvulkan_virtio.so. Skipping this driver.
> 'DISPLAY' environment variable not set... skipping surface info
> ERROR: [../src/panfrost/vulkan/panvk_device.c:386] Code 0 : WARNING: panvk is not a conformant vulkan implementation, pass PAN_I_WANT_A_BROKEN_VULKAN_DRIVER=1 if you know what you're doing. (VK_ERROR_INCOMPATIBLE_DRIVER)
> MESA: error: No hard coded idfwdf program. Returning empty program.
> MESA: error: No hard coded passthrough rta vertex shader. Returning empty shader.
> MESA: error: No hard coded passthrough vertex shader. Returning empty shader.
> MESA: warning: ../src/imagination/vulkan/pvr_job_context.c:71: FINISHME: Missing reset support for brn51764
> MESA: warning: ../src/imagination/vulkan/pvr_job_context.c:74: FINISHME: Missing reset support for brn58839
> MESA: warning: ../src/imagination/vulkan/pvr_border.c:104: FINISHME: Devices without tpu_border_colour_enhanced require entries for compressed formats to be stored in the table pre-compressed.
> ==========
> VULKANINFO
> ==========
>
> Vulkan Instance Version: 1.3.280
>
>
> Instance Extensions: count = 23
> ===============================
>         VK_EXT_acquire_drm_display             : extension revision 1
>         VK_EXT_acquire_xlib_display            : extension revision 1
>         VK_EXT_debug_report                    : extension revision 10
>         VK_EXT_debug_utils                     : extension revision 2
>         VK_EXT_direct_mode_display             : extension revision 1
>         VK_EXT_display_surface_counter         : extension revision 1
>         VK_EXT_surface_maintenance1            : extension revision 1
>         VK_EXT_swapchain_colorspace            : extension revision 4
>         VK_KHR_device_group_creation           : extension revision 1
>         VK_KHR_display                         : extension revision 23
>         VK_KHR_external_fence_capabilities     : extension revision 1
>         VK_KHR_external_memory_capabilities    : extension revision 1
>         VK_KHR_external_semaphore_capabilities : extension revision 1
>         VK_KHR_get_display_properties2         : extension revision 1
>         VK_KHR_get_physical_device_properties2 : extension revision 2
>         VK_KHR_get_surface_capabilities2       : extension revision 1
>         VK_KHR_portability_enumeration         : extension revision 1
>         VK_KHR_surface                         : extension revision 25
>         VK_KHR_surface_protected_capabilities  : extension revision 1
>         VK_KHR_wayland_surface                 : extension revision 6
>         VK_KHR_xcb_surface                     : extension revision 6
>         VK_KHR_xlib_surface                    : extension revision 6
>         VK_LUNARG_direct_driver_loading        : extension revision 1
>
> Layers: count = 2
> =================
> VK_LAYER_MESA_device_select (Linux device selection layer) Vulkan version 1.3.211, layer version 1:
>         Layer Extensions: count = 0
>         Devices: count = 2
>                 GPU id = 0 (Imagination PowerVR Rogue GX6250)
>                 Layer-Device Extensions: count = 0
>
>                 GPU id = 1 (llvmpipe (LLVM 17.0.6, 128 bits))
>                 Layer-Device Extensions: count = 0
>
> VK_LAYER_MESA_overlay (Mesa Overlay layer) Vulkan version 1.3.211, layer version 1:
>         Layer Extensions: count = 0
>         Devices: count = 2
>                 GPU id = 0 (Imagination PowerVR Rogue GX6250)
>                 Layer-Device Extensions: count = 0
>
>                 GPU id = 1 (llvmpipe (LLVM 17.0.6, 128 bits))
>                 Layer-Device Extensions: count = 0
>
> Device Properties and Extensions:
> =================================
> GPU0:
> VkPhysicalDeviceProperties:
> ---------------------------
>         apiVersion        = 1.0.274 (4194578)
>         driverVersion     = 24.0.8 (100663304)
>         vendorID          = 0x1010
>         deviceID          = 0x6250
>         deviceType        = PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU
>         deviceName        = Imagination PowerVR Rogue GX6250
>         pipelineCacheUUID = 6ddf30eb-d118-41f1-455f-580ae751c27b
>
> VkPhysicalDeviceLimits:
> -----------------------
>         maxImageDimension1D                             = 8192
>         maxImageDimension2D                             = 8192
>         maxImageDimension3D                             = 2048
>         maxImageDimensionCube                           = 8192
>         maxImageArrayLayers                             = 2048
>         maxTexelBufferElements                          = 65536
>         maxUniformBufferRange                           = 134217728
>         maxStorageBufferRange                           = 134217728
>         maxPushConstantsSize                            = 256
>         maxMemoryAllocationCount                        = 4294967295
>         maxSamplerAllocationCount                       = 4294967295
>         bufferImageGranularity                          = 0x00000001
>         sparseAddressSpaceSize                          = 0x4000000000
>         maxBoundDescriptorSets                          = 4
>         maxPerStageDescriptorSamplers                   = 32
>         maxPerStageDescriptorUniformBuffers             = 64
>         maxPerStageDescriptorStorageBuffers             = 36
>         maxPerStageDescriptorSampledImages              = 48
>         maxPerStageDescriptorStorageImages              = 8
>         maxPerStageDescriptorInputAttachments           = 8
>         maxPerStageResources                            = 224
>         maxDescriptorSetSamplers                        = 256
>         maxDescriptorSetUniformBuffers                  = 256
>         maxDescriptorSetUniformBuffersDynamic           = 8
>         maxDescriptorSetStorageBuffers                  = 256
>         maxDescriptorSetStorageBuffersDynamic           = 8
>         maxDescriptorSetSampledImages                   = 256
>         maxDescriptorSetStorageImages                   = 256
>         maxDescriptorSetInputAttachments                = 256
>         maxVertexInputAttributes                        = 16
>         maxVertexInputBindings                          = 16
>         maxVertexInputAttributeOffset                   = 65535
>         maxVertexInputBindingStride                     = 2147483648
>         maxVertexOutputComponents                       = 128
>         maxTessellationGenerationLevel                  = 0
>         maxTessellationPatchSize                        = 0
>         maxTessellationControlPerVertexInputComponents  = 0
>         maxTessellationControlPerVertexOutputComponents = 0
>         maxTessellationControlPerPatchOutputComponents  = 0
>         maxTessellationControlTotalOutputComponents     = 0
>         maxTessellationEvaluationInputComponents        = 0
>         maxTessellationEvaluationOutputComponents       = 0
>         maxGeometryShaderInvocations                    = 0
>         maxGeometryInputComponents                      = 0
>         maxGeometryOutputComponents                     = 0
>         maxGeometryOutputVertices                       = 0
>         maxGeometryTotalOutputComponents                = 0
>         maxFragmentInputComponents                      = 128
>         maxFragmentOutputAttachments                    = 8
>         maxFragmentDualSrcAttachments                   = 0
>         maxFragmentCombinedOutputResources              = 52
>         maxComputeSharedMemorySize                      = 16384
>         maxComputeWorkGroupCount: count = 3
>                 65536
>                 65536
>                 65536
>         maxComputeWorkGroupInvocations                  = 512
>         maxComputeWorkGroupSize: count = 3
>                 512
>                 512
>                 64
>         subPixelPrecisionBits                           = 8
>         subTexelPrecisionBits                           = 8
>         mipmapPrecisionBits                             = 8
>         maxDrawIndexedIndexValue                        = 4294967295
>         maxDrawIndirectCount                            = 2147483648
>         maxSamplerLodBias                               = 16
>         maxSamplerAnisotropy                            = 1
>         maxViewports                                    = 1
>         maxViewportDimensions: count = 2
>                 8192
>                 8192
>         viewportBoundsRange: count = 2
>                 -16384
>                 16384
>         viewportSubPixelBits                            = 0
>         minMemoryMapAlignment                           = 64
>         minTexelBufferOffsetAlignment                   = 0x00000010
>         minUniformBufferOffsetAlignment                 = 0x00000004
>         minStorageBufferOffsetAlignment                 = 0x00000004
>         minTexelOffset                                  = -8
>         maxTexelOffset                                  = 7
>         minTexelGatherOffset                            = -8
>         maxTexelGatherOffset                            = 7
>         minInterpolationOffset                          = -0.5
>         maxInterpolationOffset                          = 0.5
>         subPixelInterpolationOffsetBits                 = 4
>         maxFramebufferWidth                             = 8192
>         maxFramebufferHeight                            = 8192
>         maxFramebufferLayers                            = 2048
>         framebufferColorSampleCounts: count = 4
>                 SAMPLE_COUNT_1_BIT
>                 SAMPLE_COUNT_2_BIT
>                 SAMPLE_COUNT_4_BIT
>                 SAMPLE_COUNT_8_BIT
>         framebufferDepthSampleCounts: count = 4
>                 SAMPLE_COUNT_1_BIT
>                 SAMPLE_COUNT_2_BIT
>                 SAMPLE_COUNT_4_BIT
>                 SAMPLE_COUNT_8_BIT
>         framebufferStencilSampleCounts: count = 4
>                 SAMPLE_COUNT_1_BIT
>                 SAMPLE_COUNT_2_BIT
>                 SAMPLE_COUNT_4_BIT
>                 SAMPLE_COUNT_8_BIT
>         framebufferNoAttachmentsSampleCounts: count = 4
>                 SAMPLE_COUNT_1_BIT
>                 SAMPLE_COUNT_2_BIT
>                 SAMPLE_COUNT_4_BIT
>                 SAMPLE_COUNT_8_BIT
>         maxColorAttachments                             = 8
>         sampledImageColorSampleCounts: count = 4
>                 SAMPLE_COUNT_1_BIT
>                 SAMPLE_COUNT_2_BIT
>                 SAMPLE_COUNT_4_BIT
>                 SAMPLE_COUNT_8_BIT
>         sampledImageIntegerSampleCounts: count = 4
>                 SAMPLE_COUNT_1_BIT
>                 SAMPLE_COUNT_2_BIT
>                 SAMPLE_COUNT_4_BIT
>                 SAMPLE_COUNT_8_BIT
>         sampledImageDepthSampleCounts: count = 4
>                 SAMPLE_COUNT_1_BIT
>                 SAMPLE_COUNT_2_BIT
>                 SAMPLE_COUNT_4_BIT
>                 SAMPLE_COUNT_8_BIT
>         sampledImageStencilSampleCounts: count = 4
>                 SAMPLE_COUNT_1_BIT
>                 SAMPLE_COUNT_2_BIT
>                 SAMPLE_COUNT_4_BIT
>                 SAMPLE_COUNT_8_BIT
>         storageImageSampleCounts: count = 4
>                 SAMPLE_COUNT_1_BIT
>                 SAMPLE_COUNT_2_BIT
>                 SAMPLE_COUNT_4_BIT
>                 SAMPLE_COUNT_8_BIT
>         maxSampleMaskWords                              = 1
>         timestampComputeAndGraphics                     = false
>         timestampPeriod                                 = 0
>         maxClipDistances                                = 8
>         maxCullDistances                                = 8
>         maxCombinedClipAndCullDistances                 = 8
>         discreteQueuePriorities                         = 2
>         pointSizeRange: count = 2
>                 1
>                 511
>         lineWidthRange: count = 2
>                 0.0625
>                 16
>         pointSizeGranularity                            = 0.0625
>         lineWidthGranularity                            = 0.0625
>         strictLines                                     = false
>         standardSampleLocations                         = true
>         optimalBufferCopyOffsetAlignment                = 0x00000004
>         optimalBufferCopyRowPitchAlignment              = 0x00000004
>         nonCoherentAtomSize                             = 0x00000001
>
> VkPhysicalDeviceSparseProperties:
> ---------------------------------
>         residencyStandard2DBlockShape            = false
>         residencyStandard2DMultisampleBlockShape = false
>         residencyStandard3DBlockShape            = false
>         residencyAlignedMipSize                  = false
>         residencyNonResidentStrict               = false
>
> VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT:
> --------------------------------------------------
>         storageTexelBufferOffsetAlignmentBytes       = 0x00000010
>         storageTexelBufferOffsetSingleTexelAlignment = true
>         uniformTexelBufferOffsetAlignmentBytes       = 0x00000010
>         uniformTexelBufferOffsetSingleTexelAlignment = false
>
> VkPhysicalDeviceTimelineSemaphorePropertiesKHR:
> -----------------------------------------------
>         maxTimelineSemaphoreValueDifference = 18446744073709551615
>
> Device Extensions: count = 20
>         VK_EXT_external_memory_dma_buf        : extension revision 1
>         VK_EXT_host_query_reset               : extension revision 1
>         VK_EXT_private_data                   : extension revision 1
>         VK_EXT_scalar_block_layout            : extension revision 1
>         VK_EXT_texel_buffer_alignment         : extension revision 1
>         VK_EXT_tooling_info                   : extension revision 1
>         VK_KHR_bind_memory2                   : extension revision 1
>         VK_KHR_copy_commands2                 : extension revision 1
>         VK_KHR_external_fence                 : extension revision 1
>         VK_KHR_external_fence_fd              : extension revision 1
>         VK_KHR_external_memory                : extension revision 1
>         VK_KHR_external_memory_fd             : extension revision 1
>         VK_KHR_external_semaphore             : extension revision 1
>         VK_KHR_external_semaphore_fd          : extension revision 1
>         VK_KHR_format_feature_flags2          : extension revision 2
>         VK_KHR_get_memory_requirements2       : extension revision 1
>         VK_KHR_image_format_list              : extension revision 1
>         VK_KHR_swapchain                      : extension revision 70
>         VK_KHR_timeline_semaphore             : extension revision 2
>         VK_KHR_uniform_buffer_standard_layout : extension revision 1
>
> VkQueueFamilyProperties:
> ========================
>         queueProperties[0]:
>         -------------------
>                 minImageTransferGranularity = (1,1,1)
>                 queueCount                  = 2
>                 queueFlags                  = QUEUE_GRAPHICS_BIT | QUEUE_COMPUTE_BIT | QUEUE_TRANSFER_BIT
>                 timestampValidBits          = 0
>                 present support             = false
>
> VkPhysicalDeviceMemoryProperties:
> =================================
> memoryHeaps: count = 1
>         memoryHeaps[0]:
>                 size   = 1752969216 (0x687c3000) (1.63 GiB)
>                 flags: count = 1
>                         MEMORY_HEAP_DEVICE_LOCAL_BIT
> memoryTypes: count = 1
>         memoryTypes[0]:
>                 heapIndex     = 0
>                 propertyFlags = 0x0007: count = 3
>                         MEMORY_PROPERTY_DEVICE_LOCAL_BIT
>                         MEMORY_PROPERTY_HOST_VISIBLE_BIT
>                         MEMORY_PROPERTY_HOST_COHERENT_BIT
>                 usable for:
>                         IMAGE_TILING_OPTIMAL:
>                                 color images
>                                 FORMAT_D16_UNORM
>                                 FORMAT_D32_SFLOAT
>                                 FORMAT_S8_UINT
>                                 FORMAT_D24_UNORM_S8_UINT
>                                 (non-sparse)
>                         IMAGE_TILING_LINEAR:
>                                 color images
>                                 (non-sparse)
>
> VkPhysicalDeviceFeatures:
> =========================
>         robustBufferAccess                      = true
>         fullDrawIndexUint32                     = true
>         imageCubeArray                          = true
>         independentBlend                        = false
>         geometryShader                          = false
>         tessellationShader                      = false
>         sampleRateShading                       = true
>         dualSrcBlend                            = false
>         logicOp                                 = false
>         multiDrawIndirect                       = true
>         drawIndirectFirstInstance               = true
>         depthClamp                              = true
>         depthBiasClamp                          = true
>         fillModeNonSolid                        = false
>         depthBounds                             = false
>         wideLines                               = true
>         largePoints                             = true
>         alphaToOne                              = false
>         multiViewport                           = false
>         samplerAnisotropy                       = false
>         textureCompressionETC2                  = true
>         textureCompressionASTC_LDR              = false
>         textureCompressionBC                    = false
>         occlusionQueryPrecise                   = false
>         pipelineStatisticsQuery                 = false
>         vertexPipelineStoresAndAtomics          = true
>         fragmentStoresAndAtomics                = true
>         shaderTessellationAndGeometryPointSize  = false
>         shaderImageGatherExtended               = false
>         shaderStorageImageExtendedFormats       = true
>         shaderStorageImageMultisample           = false
>         shaderStorageImageReadWithoutFormat     = true
>         shaderStorageImageWriteWithoutFormat    = false
>         shaderUniformBufferArrayDynamicIndexing = true
>         shaderSampledImageArrayDynamicIndexing  = true
>         shaderStorageBufferArrayDynamicIndexing = true
>         shaderStorageImageArrayDynamicIndexing  = true
>         shaderClipDistance                      = false
>         shaderCullDistance                      = false
>         shaderFloat64                           = false
>         shaderInt64                             = true
>         shaderInt16                             = true
>         shaderResourceResidency                 = false
>         shaderResourceMinLod                    = false
>         sparseBinding                           = false
>         sparseResidencyBuffer                   = false
>         sparseResidencyImage2D                  = false
>         sparseResidencyImage3D                  = false
>         sparseResidency2Samples                 = false
>         sparseResidency4Samples                 = false
>         sparseResidency8Samples                 = false
>         sparseResidency16Samples                = false
>         sparseResidencyAliased                  = false
>         variableMultisampleRate                 = false
>         inheritedQueries                        = false
>
> VkPhysicalDeviceHostQueryResetFeaturesEXT:
> ------------------------------------------
>         hostQueryReset = true
>
> VkPhysicalDevicePrivateDataFeaturesEXT:
> ---------------------------------------
>         privateData = true
>
> VkPhysicalDeviceScalarBlockLayoutFeaturesEXT:
> ---------------------------------------------
>         scalarBlockLayout = true
>
> VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT:
> ------------------------------------------------
>         texelBufferAlignment = true
>
> VkPhysicalDeviceTimelineSemaphoreFeaturesKHR:
> ---------------------------------------------
>         timelineSemaphore = true
>
> VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR:
> -------------------------------------------------------
>         uniformBufferStandardLayout = true
>
>
> GPU1:
> VkPhysicalDeviceProperties:
> ---------------------------
>         apiVersion        = 1.3.274 (4206866)
>         driverVersion     = 0.0.1 (1)
>         vendorID          = 0x10005
>         deviceID          = 0x0000
>         deviceType        = PHYSICAL_DEVICE_TYPE_CPU
>         deviceName        = llvmpipe (LLVM 17.0.6, 128 bits)
>         pipelineCacheUUID = 32342e30-2e38-2d31-2b70-316161616161
>
> VkPhysicalDeviceLimits:
> -----------------------
>         maxImageDimension1D                             = 16384
>         maxImageDimension2D                             = 16384
>         maxImageDimension3D                             = 4096
>         maxImageDimensionCube                           = 32768
>         maxImageArrayLayers                             = 2048
>         maxTexelBufferElements                          = 134217728
>         maxUniformBufferRange                           = 65536
>         maxStorageBufferRange                           = 134217728
>         maxPushConstantsSize                            = 256
>         maxMemoryAllocationCount                        = 4294967295
>         maxSamplerAllocationCount                       = 32768
>         bufferImageGranularity                          = 0x00000040
>         sparseAddressSpaceSize                          = 0x00000000
>         maxBoundDescriptorSets                          = 8
>         maxPerStageDescriptorSamplers                   = 1000000
>         maxPerStageDescriptorUniformBuffers             = 1000000
>         maxPerStageDescriptorStorageBuffers             = 1000000
>         maxPerStageDescriptorSampledImages              = 1000000
>         maxPerStageDescriptorStorageImages              = 1000000
>         maxPerStageDescriptorInputAttachments           = 1000000
>         maxPerStageResources                            = 1000000
>         maxDescriptorSetSamplers                        = 1000000
>         maxDescriptorSetUniformBuffers                  = 1000000
>         maxDescriptorSetUniformBuffersDynamic           = 1000000
>         maxDescriptorSetStorageBuffers                  = 1000000
>         maxDescriptorSetStorageBuffersDynamic           = 1000000
>         maxDescriptorSetSampledImages                   = 1000000
>         maxDescriptorSetStorageImages                   = 1000000
>         maxDescriptorSetInputAttachments                = 1000000
>         maxVertexInputAttributes                        = 32
>         maxVertexInputBindings                          = 32
>         maxVertexInputAttributeOffset                   = 2047
>         maxVertexInputBindingStride                     = 2048
>         maxVertexOutputComponents                       = 128
>         maxTessellationGenerationLevel                  = 64
>         maxTessellationPatchSize                        = 32
>         maxTessellationControlPerVertexInputComponents  = 128
>         maxTessellationControlPerVertexOutputComponents = 128
>         maxTessellationControlPerPatchOutputComponents  = 128
>         maxTessellationControlTotalOutputComponents     = 4096
>         maxTessellationEvaluationInputComponents        = 128
>         maxTessellationEvaluationOutputComponents       = 128
>         maxGeometryShaderInvocations                    = 32
>         maxGeometryInputComponents                      = 64
>         maxGeometryOutputComponents                     = 128
>         maxGeometryOutputVertices                       = 1024
>         maxGeometryTotalOutputComponents                = 1024
>         maxFragmentInputComponents                      = 128
>         maxFragmentOutputAttachments                    = 8
>         maxFragmentDualSrcAttachments                   = 2
>         maxFragmentCombinedOutputResources              = 104
>         maxComputeSharedMemorySize                      = 32768
>         maxComputeWorkGroupCount: count = 3
>                 65535
>                 65535
>                 65535
>         maxComputeWorkGroupInvocations                  = 1024
>         maxComputeWorkGroupSize: count = 3
>                 1024
>                 1024
>                 1024
>         subPixelPrecisionBits                           = 8
>         subTexelPrecisionBits                           = 8
>         mipmapPrecisionBits                             = 4
>         maxDrawIndexedIndexValue                        = 4294967295
>         maxDrawIndirectCount                            = 4294967295
>         maxSamplerLodBias                               = 16
>         maxSamplerAnisotropy                            = 16
>         maxViewports                                    = 16
>         maxViewportDimensions: count = 2
>                 16384
>                 16384
>         viewportBoundsRange: count = 2
>                 -32768
>                 32768
>         viewportSubPixelBits                            = 0
>         minMemoryMapAlignment                           = 64
>         minTexelBufferOffsetAlignment                   = 0x00000010
>         minUniformBufferOffsetAlignment                 = 0x00000010
>         minStorageBufferOffsetAlignment                 = 0x00000010
>         minTexelOffset                                  = -32
>         maxTexelOffset                                  = 31
>         minTexelGatherOffset                            = -32
>         maxTexelGatherOffset                            = 31
>         minInterpolationOffset                          = -2
>         maxInterpolationOffset                          = 2
>         subPixelInterpolationOffsetBits                 = 8
>         maxFramebufferWidth                             = 16384
>         maxFramebufferHeight                            = 16384
>         maxFramebufferLayers                            = 2048
>         framebufferColorSampleCounts: count = 2
>                 SAMPLE_COUNT_1_BIT
>                 SAMPLE_COUNT_4_BIT
>         framebufferDepthSampleCounts: count = 2
>                 SAMPLE_COUNT_1_BIT
>                 SAMPLE_COUNT_4_BIT
>         framebufferStencilSampleCounts: count = 2
>                 SAMPLE_COUNT_1_BIT
>                 SAMPLE_COUNT_4_BIT
>         framebufferNoAttachmentsSampleCounts: count = 2
>                 SAMPLE_COUNT_1_BIT
>                 SAMPLE_COUNT_4_BIT
>         maxColorAttachments                             = 8
>         sampledImageColorSampleCounts: count = 2
>                 SAMPLE_COUNT_1_BIT
>                 SAMPLE_COUNT_4_BIT
>         sampledImageIntegerSampleCounts: count = 2
>                 SAMPLE_COUNT_1_BIT
>                 SAMPLE_COUNT_4_BIT
>         sampledImageDepthSampleCounts: count = 2
>                 SAMPLE_COUNT_1_BIT
>                 SAMPLE_COUNT_4_BIT
>         sampledImageStencilSampleCounts: count = 2
>                 SAMPLE_COUNT_1_BIT
>                 SAMPLE_COUNT_4_BIT
>         storageImageSampleCounts: count = 2
>                 SAMPLE_COUNT_1_BIT
>                 SAMPLE_COUNT_4_BIT
>         maxSampleMaskWords                              = 1
>         timestampComputeAndGraphics                     = true
>         timestampPeriod                                 = 1
>         maxClipDistances                                = 8
>         maxCullDistances                                = 8
>         maxCombinedClipAndCullDistances                 = 8
>         discreteQueuePriorities                         = 2
>         pointSizeRange: count = 2
>                 0
>                 255
>         lineWidthRange: count = 2
>                 1
>                 255
>         pointSizeGranularity                            = 0.125
>         lineWidthGranularity                            = 0.0078125
>         strictLines                                     = true
>         standardSampleLocations                         = true
>         optimalBufferCopyOffsetAlignment                = 0x00000080
>         optimalBufferCopyRowPitchAlignment              = 0x00000080
>         nonCoherentAtomSize                             = 0x00000040
>
> VkPhysicalDeviceSparseProperties:
> ---------------------------------
>         residencyStandard2DBlockShape            = false
>         residencyStandard2DMultisampleBlockShape = false
>         residencyStandard3DBlockShape            = false
>         residencyAlignedMipSize                  = false
>         residencyNonResidentStrict               = false
>
> VkPhysicalDeviceCustomBorderColorPropertiesEXT:
> -----------------------------------------------
>         maxCustomBorderColorSamplers = 32768
>
> VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT:
> --------------------------------------------------------
>         combinedImageSamplerDensityMapDescriptorSize = 0
>
> VkPhysicalDeviceDescriptorBufferPropertiesEXT:
> ----------------------------------------------
>         combinedImageSamplerDescriptorSingleArray            = true
>         bufferlessPushDescriptors                            = true
>         allowSamplerImageViewPostSubmitCreation              = false
>         descriptorBufferOffsetAlignment                      = 0x00000004
>         maxDescriptorBufferBindings                          = 8
>         maxResourceDescriptorBufferBindings                  = 8
>         maxSamplerDescriptorBufferBindings                   = 8
>         maxEmbeddedImmutableSamplerBindings                  = 8
>         maxEmbeddedImmutableSamplers                         = 2032
>         bufferCaptureReplayDescriptorDataSize                = 0
>         imageCaptureReplayDescriptorDataSize                 = 0
>         imageViewCaptureReplayDescriptorDataSize             = 0
>         samplerCaptureReplayDescriptorDataSize               = 0
>         accelerationStructureCaptureReplayDescriptorDataSize = 0
>         samplerDescriptorSize                                = 256
>         combinedImageSamplerDescriptorSize                   = 256
>         sampledImageDescriptorSize                           = 256
>         storageImageDescriptorSize                           = 256
>         uniformTexelBufferDescriptorSize                     = 256
>         robustUniformTexelBufferDescriptorSize               = 256
>         storageTexelBufferDescriptorSize                     = 256
>         robustStorageTexelBufferDescriptorSize               = 256
>         uniformBufferDescriptorSize                          = 256
>         robustUniformBufferDescriptorSize                    = 256
>         storageBufferDescriptorSize                          = 256
>         robustStorageBufferDescriptorSize                    = 256
>         inputAttachmentDescriptorSize                        = 256
>         accelerationStructureDescriptorSize                  = 0
>         maxSamplerDescriptorBufferRange                      = 0x08000000
>         maxResourceDescriptorBufferRange                     = 0x10000000
>         samplerDescriptorBufferAddressSpaceSize              = 0x08000000
>         resourceDescriptorBufferAddressSpaceSize             = 0x08000000
>         descriptorBufferAddressSpaceSize                     = 0x08000000
>
> VkPhysicalDeviceExtendedDynamicState3PropertiesEXT:
> ---------------------------------------------------
>         dynamicPrimitiveTopologyUnrestricted = true
>
> VkPhysicalDeviceExternalMemoryHostPropertiesEXT:
> ------------------------------------------------
>         minImportedHostPointerAlignment = 0x00001000
>
> VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT:
> -----------------------------------------------------
>         graphicsPipelineLibraryFastLinking                        = true
>         graphicsPipelineLibraryIndependentInterpolationDecoration = true
>
> VkPhysicalDeviceLineRasterizationPropertiesKHR:
> -----------------------------------------------
>         lineSubPixelPrecisionBits = 8
>
> VkPhysicalDeviceMaintenance5PropertiesKHR:
> ------------------------------------------
>         earlyFragmentMultisampleCoverageAfterSampleCounting = true
>         earlyFragmentSampleMaskTestBeforeSampleCounting     = false
>         depthStencilSwizzleOneSupport                       = false
>         polygonModePointSize                                = true
>         nonStrictSinglePixelWideLinesUseParallelogram       = false
>         nonStrictWideLinesUseParallelogram                  = false
>
> VkPhysicalDeviceMaintenance6PropertiesKHR:
> ------------------------------------------
>         blockTexelViewCompatibleMultipleLayers = true
>         maxCombinedImageSamplerDescriptorCount = 3
>         fragmentShadingRateClampCombinerInputs = false
>
> VkPhysicalDeviceMeshShaderPropertiesEXT:
> ----------------------------------------
>         maxTaskWorkGroupTotalCount            = 4194304
>         maxTaskWorkGroupCount: count = 3
>                 65536
>                 65536
>                 65536
>         maxTaskWorkGroupInvocations           = 1024
>         maxTaskWorkGroupSize: count = 3
>                 1024
>                 1024
>                 1024
>         maxTaskPayloadSize                    = 16384
>         maxTaskSharedMemorySize               = 32768
>         maxTaskPayloadAndSharedMemorySize     = 32768
>         maxMeshWorkGroupTotalCount            = 4194304
>         maxMeshWorkGroupCount: count = 3
>                 65536
>                 65536
>                 65536
>         maxMeshWorkGroupInvocations           = 1024
>         maxMeshWorkGroupSize: count = 3
>                 1024
>                 1024
>                 1024
>         maxMeshSharedMemorySize               = 28672
>         maxMeshPayloadAndSharedMemorySize     = 45056
>         maxMeshOutputMemorySize               = 32768
>         maxMeshPayloadAndOutputMemorySize     = 49152
>         maxMeshOutputComponents               = 128
>         maxMeshOutputVertices                 = 256
>         maxMeshOutputPrimitives               = 256
>         maxMeshOutputLayers                   = 8
>         maxMeshMultiviewViewCount             = 0
>         meshOutputPerVertexGranularity        = 1
>         meshOutputPerPrimitiveGranularity     = 1
>         maxPreferredTaskWorkGroupInvocations  = 64
>         maxPreferredMeshWorkGroupInvocations  = 128
>         prefersLocalInvocationVertexOutput    = true
>         prefersLocalInvocationPrimitiveOutput = true
>         prefersCompactVertexOutput            = true
>         prefersCompactPrimitiveOutput         = false
>
> VkPhysicalDeviceMultiDrawPropertiesEXT:
> ---------------------------------------
>         maxMultiDrawCount = 2048
>
> VkPhysicalDeviceNestedCommandBufferPropertiesEXT:
> -------------------------------------------------
>         maxCommandBufferNestingLevel = 4294967295
>
> VkPhysicalDeviceProvokingVertexPropertiesEXT:
> ---------------------------------------------
>         provokingVertexModePerPipeline                       = true
>         transformFeedbackPreservesTriangleFanProvokingVertex = true
>
> VkPhysicalDevicePushDescriptorPropertiesKHR:
> --------------------------------------------
>         maxPushDescriptors = 32
>
> VkPhysicalDeviceRobustness2PropertiesEXT:
> -----------------------------------------
>         robustStorageBufferAccessSizeAlignment = 0x00000001
>         robustUniformBufferAccessSizeAlignment = 0x00000001
>
> VkPhysicalDeviceShaderObjectPropertiesEXT:
> ------------------------------------------
>         shaderBinaryUUID     = 32342e30-2e38-2d31-2b70-316161616161
>         shaderBinaryVersion  = 1
>
> VkPhysicalDeviceTransformFeedbackPropertiesEXT:
> -----------------------------------------------
>         maxTransformFeedbackStreams                = 4
>         maxTransformFeedbackBuffers                = 4
>         maxTransformFeedbackBufferSize             = 0xffffffff
>         maxTransformFeedbackStreamDataSize         = 512
>         maxTransformFeedbackBufferDataSize         = 512
>         maxTransformFeedbackBufferDataStride       = 512
>         transformFeedbackQueries                   = true
>         transformFeedbackStreamsLinesTriangles     = false
>         transformFeedbackRasterizationStreamSelect = false
>         transformFeedbackDraw                      = true
>
> VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT:
> ----------------------------------------------------
>         maxVertexAttribDivisor = 4294967295
>
> VkPhysicalDeviceVulkan11Properties:
> -----------------------------------
>         deviceUUID                        = 6d657361-3234-2e30-2e38-2d312b703100
>         driverUUID                        = 6c6c766d-7069-7065-5555-494400000000
>         deviceNodeMask                    = 0
>         deviceLUIDValid                   = false
>         subgroupSize                      = 4
>         subgroupSupportedStages: count = 4
>                 SHADER_STAGE_FRAGMENT_BIT
>                 SHADER_STAGE_COMPUTE_BIT
>                 SHADER_STAGE_TASK_BIT_EXT
>                 SHADER_STAGE_MESH_BIT_EXT
>         subgroupSupportedOperations: count = 7
>                 SUBGROUP_FEATURE_BASIC_BIT
>                 SUBGROUP_FEATURE_VOTE_BIT
>                 SUBGROUP_FEATURE_ARITHMETIC_BIT
>                 SUBGROUP_FEATURE_BALLOT_BIT
>                 SUBGROUP_FEATURE_SHUFFLE_BIT
>                 SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT
>                 SUBGROUP_FEATURE_QUAD_BIT
>         subgroupQuadOperationsInAllStages = false
>         pointClippingBehavior             = POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES
>         maxMultiviewViewCount             = 6
>         maxMultiviewInstanceIndex         = 2147483647
>         protectedNoFault                  = false
>         maxPerSetDescriptors              = 1000000
>         maxMemoryAllocationSize           = 0x80000000
>
> VkPhysicalDeviceVulkan12Properties:
> -----------------------------------
>         driverID                                             = DRIVER_ID_MESA_LLVMPIPE
>         driverName                                           = llvmpipe
>         driverInfo                                           = Mesa 24.0.8-1+p1 (LLVM 17.0.6)
>         conformanceVersion:
>                 major    = 1
>                 minor    = 3
>                 subminor = 1
>                 patch    = 1
>         denormBehaviorIndependence                           = SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL
>         roundingModeIndependence                             = SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL
>         shaderSignedZeroInfNanPreserveFloat16                = true
>         shaderSignedZeroInfNanPreserveFloat32                = true
>         shaderSignedZeroInfNanPreserveFloat64                = true
>         shaderDenormPreserveFloat16                          = false
>         shaderDenormPreserveFloat32                          = false
>         shaderDenormPreserveFloat64                          = false
>         shaderDenormFlushToZeroFloat16                       = false
>         shaderDenormFlushToZeroFloat32                       = false
>         shaderDenormFlushToZeroFloat64                       = false
>         shaderRoundingModeRTEFloat16                         = true
>         shaderRoundingModeRTEFloat32                         = true
>         shaderRoundingModeRTEFloat64                         = true
>         shaderRoundingModeRTZFloat16                         = false
>         shaderRoundingModeRTZFloat32                         = false
>         shaderRoundingModeRTZFloat64                         = false
>         maxUpdateAfterBindDescriptorsInAllPools              = 4294967295
>         shaderUniformBufferArrayNonUniformIndexingNative     = true
>         shaderSampledImageArrayNonUniformIndexingNative      = true
>         shaderStorageBufferArrayNonUniformIndexingNative     = true
>         shaderStorageImageArrayNonUniformIndexingNative      = true
>         shaderInputAttachmentArrayNonUniformIndexingNative   = true
>         robustBufferAccessUpdateAfterBind                    = true
>         quadDivergentImplicitLod                             = true
>         maxPerStageDescriptorUpdateAfterBindSamplers         = 1000000
>         maxPerStageDescriptorUpdateAfterBindUniformBuffers   = 1000000
>         maxPerStageDescriptorUpdateAfterBindStorageBuffers   = 1000000
>         maxPerStageDescriptorUpdateAfterBindSampledImages    = 1000000
>         maxPerStageDescriptorUpdateAfterBindStorageImages    = 1000000
>         maxPerStageDescriptorUpdateAfterBindInputAttachments = 1000000
>         maxPerStageUpdateAfterBindResources                  = 1000000
>         maxDescriptorSetUpdateAfterBindSamplers              = 1000000
>         maxDescriptorSetUpdateAfterBindUniformBuffers        = 1000000
>         maxDescriptorSetUpdateAfterBindUniformBuffersDynamic = 1000000
>         maxDescriptorSetUpdateAfterBindStorageBuffers        = 1000000
>         maxDescriptorSetUpdateAfterBindStorageBuffersDynamic = 1000000
>         maxDescriptorSetUpdateAfterBindSampledImages         = 1000000
>         maxDescriptorSetUpdateAfterBindStorageImages         = 1000000
>         maxDescriptorSetUpdateAfterBindInputAttachments      = 1000000
>         supportedDepthResolveModes: count = 2
>                 RESOLVE_MODE_SAMPLE_ZERO_BIT
>                 RESOLVE_MODE_AVERAGE_BIT
>         supportedStencilResolveModes: count = 1
>                 RESOLVE_MODE_SAMPLE_ZERO_BIT
>         independentResolveNone                               = false
>         independentResolve                                   = false
>         filterMinmaxSingleComponentFormats                   = true
>         filterMinmaxImageComponentMapping                    = true
>         maxTimelineSemaphoreValueDifference                  = 18446744073709551615
>         framebufferIntegerColorSampleCounts: count = 1
>                 SAMPLE_COUNT_1_BIT
>
> VkPhysicalDeviceVulkan13Properties:
> -----------------------------------
>         minSubgroupSize                                                               = 4
>         maxSubgroupSize                                                               = 4
>         maxComputeWorkgroupSubgroups                                                  = 32
>         requiredSubgroupSizeStages: count = 2
>                 SHADER_STAGE_FRAGMENT_BIT
>                 SHADER_STAGE_COMPUTE_BIT
>         maxInlineUniformBlockSize                                                     = 4096
>         maxPerStageDescriptorInlineUniformBlocks                                      = 8
>         maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks                       = 8
>         maxDescriptorSetInlineUniformBlocks                                           = 8
>         maxDescriptorSetUpdateAfterBindInlineUniformBlocks                            = 8
>         maxInlineUniformTotalSize                                                     = 262144
>         integerDotProduct8BitUnsignedAccelerated                                      = false
>         integerDotProduct8BitSignedAccelerated                                        = false
>         integerDotProduct8BitMixedSignednessAccelerated                               = false
>         integerDotProduct4x8BitPackedUnsignedAccelerated                              = false
>         integerDotProduct4x8BitPackedSignedAccelerated                                = false
>         integerDotProduct4x8BitPackedMixedSignednessAccelerated                       = false
>         integerDotProduct16BitUnsignedAccelerated                                     = false
>         integerDotProduct16BitSignedAccelerated                                       = false
>         integerDotProduct16BitMixedSignednessAccelerated                              = false
>         integerDotProduct32BitUnsignedAccelerated                                     = false
>         integerDotProduct32BitSignedAccelerated                                       = false
>         integerDotProduct32BitMixedSignednessAccelerated                              = false
>         integerDotProduct64BitUnsignedAccelerated                                     = false
>         integerDotProduct64BitSignedAccelerated                                       = false
>         integerDotProduct64BitMixedSignednessAccelerated                              = false
>         integerDotProductAccumulatingSaturating8BitUnsignedAccelerated                = false
>         integerDotProductAccumulatingSaturating8BitSignedAccelerated                  = false
>         integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated         = false
>         integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated        = false
>         integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated          = false
>         integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated = false
>         integerDotProductAccumulatingSaturating16BitUnsignedAccelerated               = false
>         integerDotProductAccumulatingSaturating16BitSignedAccelerated                 = false
>         integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated        = false
>         integerDotProductAccumulatingSaturating32BitUnsignedAccelerated               = false
>         integerDotProductAccumulatingSaturating32BitSignedAccelerated                 = false
>         integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated        = false
>         integerDotProductAccumulatingSaturating64BitUnsignedAccelerated               = false
>         integerDotProductAccumulatingSaturating64BitSignedAccelerated                 = false
>         integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated        = false
>         storageTexelBufferOffsetAlignmentBytes                                        = 0x00000010
>         storageTexelBufferOffsetSingleTexelAlignment                                  = true
>         uniformTexelBufferOffsetAlignmentBytes                                        = 0x00000010
>         uniformTexelBufferOffsetSingleTexelAlignment                                  = true
>         maxBufferSize                                                                 = 0xffffffff
>
> VkPhysicalDeviceHostImageCopyPropertiesEXT:
> -------------------------------------------
>         copySrcLayoutCount                  = 23
>         pCopySrcLayouts: count = 23
>                 IMAGE_LAYOUT_GENERAL
>                 IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
>                 IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL
>                 IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL
>                 IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL
>                 IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL
>                 IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL
>                 IMAGE_LAYOUT_PREINITIALIZED
>                 IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL
>                 IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL
>                 IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL
>                 IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL
>                 IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL
>                 IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL
>                 IMAGE_LAYOUT_READ_ONLY_OPTIMAL
>                 IMAGE_LAYOUT_ATTACHMENT_OPTIMAL
>                 IMAGE_LAYOUT_PRESENT_SRC_KHR
>                 IMAGE_LAYOUT_VIDEO_DECODE_DST_KHR
>                 IMAGE_LAYOUT_VIDEO_DECODE_SRC_KHR
>                 IMAGE_LAYOUT_VIDEO_DECODE_DPB_KHR
>                 IMAGE_LAYOUT_SHARED_PRESENT_KHR
>                 IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT
>                 IMAGE_LAYOUT_FRAGMENT_SHADING_RATE_ATTACHMENT_OPTIMAL_KHR
>         copyDstLayoutCount                  = 23
>         pCopyDstLayouts: count = 23
>                 IMAGE_LAYOUT_GENERAL
>                 IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
>                 IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL
>                 IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL
>                 IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL
>                 IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL
>                 IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL
>                 IMAGE_LAYOUT_PREINITIALIZED
>                 IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL
>                 IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL
>                 IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL
>                 IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL
>                 IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL
>                 IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL
>                 IMAGE_LAYOUT_READ_ONLY_OPTIMAL
>                 IMAGE_LAYOUT_ATTACHMENT_OPTIMAL
>                 IMAGE_LAYOUT_PRESENT_SRC_KHR
>                 IMAGE_LAYOUT_VIDEO_DECODE_DST_KHR
>                 IMAGE_LAYOUT_VIDEO_DECODE_SRC_KHR
>                 IMAGE_LAYOUT_VIDEO_DECODE_DPB_KHR
>                 IMAGE_LAYOUT_SHARED_PRESENT_KHR
>                 IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT
>                 IMAGE_LAYOUT_FRAGMENT_SHADING_RATE_ATTACHMENT_OPTIMAL_KHR
>         optimalTilingLayoutUUID             = 32342e30-2e38-2d31-2b70-316161616161
>         identicalMemoryTypeRequirements     = false
>
> Device Extensions: count = 124
>         VK_AMDX_shader_enqueue                        : extension revision 1
>         VK_ARM_rasterization_order_attachment_access  : extension revision 1
>         VK_EXT_4444_formats                           : extension revision 1
>         VK_EXT_attachment_feedback_loop_dynamic_state : extension revision 1
>         VK_EXT_attachment_feedback_loop_layout        : extension revision 2
>         VK_EXT_border_color_swizzle                   : extension revision 1
>         VK_EXT_calibrated_timestamps                  : extension revision 2
>         VK_EXT_color_write_enable                     : extension revision 1
>         VK_EXT_conditional_rendering                  : extension revision 2
>         VK_EXT_custom_border_color                    : extension revision 12
>         VK_EXT_depth_clip_control                     : extension revision 1
>         VK_EXT_depth_clip_enable                      : extension revision 1
>         VK_EXT_depth_range_unrestricted               : extension revision 1
>         VK_EXT_descriptor_buffer                      : extension revision 1
>         VK_EXT_descriptor_indexing                    : extension revision 2
>         VK_EXT_dynamic_rendering_unused_attachments   : extension revision 1
>         VK_EXT_extended_dynamic_state                 : extension revision 1
>         VK_EXT_extended_dynamic_state2                : extension revision 1
>         VK_EXT_extended_dynamic_state3                : extension revision 2
>         VK_EXT_external_memory_host                   : extension revision 1
>         VK_EXT_graphics_pipeline_library              : extension revision 1
>         VK_EXT_host_image_copy                        : extension revision 1
>         VK_EXT_host_query_reset                       : extension revision 1
>         VK_EXT_image_2d_view_of_3d                    : extension revision 1
>         VK_EXT_image_robustness                       : extension revision 1
>         VK_EXT_image_sliced_view_of_3d                : extension revision 1
>         VK_EXT_index_type_uint8                       : extension revision 1
>         VK_EXT_inline_uniform_block                   : extension revision 1
>         VK_EXT_line_rasterization                     : extension revision 1
>         VK_EXT_load_store_op_none                     : extension revision 1
>         VK_EXT_memory_budget                          : extension revision 1
>         VK_EXT_memory_priority                        : extension revision 1
>         VK_EXT_mesh_shader                            : extension revision 1
>         VK_EXT_multi_draw                             : extension revision 1
>         VK_EXT_multisampled_render_to_single_sampled  : extension revision 1
>         VK_EXT_mutable_descriptor_type                : extension revision 1
>         VK_EXT_nested_command_buffer                  : extension revision 1
>         VK_EXT_non_seamless_cube_map                  : extension revision 1
>         VK_EXT_pageable_device_local_memory           : extension revision 1
>         VK_EXT_pipeline_creation_cache_control        : extension revision 3
>         VK_EXT_pipeline_creation_feedback             : extension revision 1
>         VK_EXT_post_depth_coverage                    : extension revision 1
>         VK_EXT_primitive_topology_list_restart        : extension revision 1
>         VK_EXT_primitives_generated_query             : extension revision 1
>         VK_EXT_private_data                           : extension revision 1
>         VK_EXT_provoking_vertex                       : extension revision 1
>         VK_EXT_rasterization_order_attachment_access  : extension revision 1
>         VK_EXT_robustness2                            : extension revision 1
>         VK_EXT_sampler_filter_minmax                  : extension revision 2
>         VK_EXT_scalar_block_layout                    : extension revision 1
>         VK_EXT_separate_stencil_usage                 : extension revision 1
>         VK_EXT_shader_atomic_float                    : extension revision 1
>         VK_EXT_shader_atomic_float2                   : extension revision 1
>         VK_EXT_shader_demote_to_helper_invocation     : extension revision 1
>         VK_EXT_shader_object                          : extension revision 1
>         VK_EXT_shader_stencil_export                  : extension revision 1
>         VK_EXT_shader_subgroup_ballot                 : extension revision 1
>         VK_EXT_shader_subgroup_vote                   : extension revision 1
>         VK_EXT_shader_viewport_index_layer            : extension revision 1
>         VK_EXT_subgroup_size_control                  : extension revision 2
>         VK_EXT_texel_buffer_alignment                 : extension revision 1
>         VK_EXT_transform_feedback                     : extension revision 1
>         VK_EXT_vertex_attribute_divisor               : extension revision 3
>         VK_EXT_vertex_input_dynamic_state             : extension revision 2
>         VK_EXT_ycbcr_2plane_444_formats               : extension revision 1
>         VK_EXT_ycbcr_image_arrays                     : extension revision 1
>         VK_GOOGLE_decorate_string                     : extension revision 1
>         VK_GOOGLE_hlsl_functionality1                 : extension revision 1
>         VK_KHR_16bit_storage                          : extension revision 1
>         VK_KHR_8bit_storage                           : extension revision 1
>         VK_KHR_bind_memory2                           : extension revision 1
>         VK_KHR_buffer_device_address                  : extension revision 1
>         VK_KHR_copy_commands2                         : extension revision 1
>         VK_KHR_create_renderpass2                     : extension revision 1
>         VK_KHR_dedicated_allocation                   : extension revision 3
>         VK_KHR_depth_stencil_resolve                  : extension revision 1
>         VK_KHR_descriptor_update_template             : extension revision 1
>         VK_KHR_device_group                           : extension revision 4
>         VK_KHR_draw_indirect_count                    : extension revision 1
>         VK_KHR_driver_properties                      : extension revision 1
>         VK_KHR_dynamic_rendering                      : extension revision 1
>         VK_KHR_external_fence                         : extension revision 1
>         VK_KHR_external_memory                        : extension revision 1
>         VK_KHR_external_memory_fd                     : extension revision 1
>         VK_KHR_external_semaphore                     : extension revision 1
>         VK_KHR_format_feature_flags2                  : extension revision 2
>         VK_KHR_get_memory_requirements2               : extension revision 1
>         VK_KHR_image_format_list                      : extension revision 1
>         VK_KHR_imageless_framebuffer                  : extension revision 1
>         VK_KHR_incremental_present                    : extension revision 2
>         VK_KHR_maintenance1                           : extension revision 2
>         VK_KHR_maintenance2                           : extension revision 1
>         VK_KHR_maintenance3                           : extension revision 1
>         VK_KHR_maintenance4                           : extension revision 2
>         VK_KHR_maintenance5                           : extension revision 1
>         VK_KHR_maintenance6                           : extension revision 1
>         VK_KHR_map_memory2                            : extension revision 1
>         VK_KHR_multiview                              : extension revision 1
>         VK_KHR_pipeline_library                       : extension revision 1
>         VK_KHR_push_descriptor                        : extension revision 2
>         VK_KHR_relaxed_block_layout                   : extension revision 1
>         VK_KHR_sampler_mirror_clamp_to_edge           : extension revision 3
>         VK_KHR_sampler_ycbcr_conversion               : extension revision 14
>         VK_KHR_separate_depth_stencil_layouts         : extension revision 1
>         VK_KHR_shader_atomic_int64                    : extension revision 1
>         VK_KHR_shader_clock                           : extension revision 1
>         VK_KHR_shader_draw_parameters                 : extension revision 1
>         VK_KHR_shader_float16_int8                    : extension revision 1
>         VK_KHR_shader_float_controls                  : extension revision 4
>         VK_KHR_shader_integer_dot_product             : extension revision 1
>         VK_KHR_shader_non_semantic_info               : extension revision 1
>         VK_KHR_shader_subgroup_extended_types         : extension revision 1
>         VK_KHR_shader_terminate_invocation            : extension revision 1
>         VK_KHR_spirv_1_4                              : extension revision 1
>         VK_KHR_storage_buffer_storage_class           : extension revision 1
>         VK_KHR_swapchain                              : extension revision 70
>         VK_KHR_swapchain_mutable_format               : extension revision 1
>         VK_KHR_synchronization2                       : extension revision 1
>         VK_KHR_timeline_semaphore                     : extension revision 2
>         VK_KHR_uniform_buffer_standard_layout         : extension revision 1
>         VK_KHR_variable_pointers                      : extension revision 1
>         VK_KHR_vulkan_memory_model                    : extension revision 3
>         VK_KHR_zero_initialize_workgroup_memory       : extension revision 1
>         VK_NV_device_generated_commands               : extension revision 3
>
> VkQueueFamilyProperties:
> ========================
>         queueProperties[0]:
>         -------------------
>                 minImageTransferGranularity = (1,1,1)
>                 queueCount                  = 1
>                 queueFlags                  = QUEUE_GRAPHICS_BIT | QUEUE_COMPUTE_BIT | QUEUE_TRANSFER_BIT
>                 timestampValidBits          = 64
>                 present support             = false
>
> VkPhysicalDeviceMemoryProperties:
> =================================
> memoryHeaps: count = 1
>         memoryHeaps[0]:
>                 size   = 3505938432 (0xd0f86000) (3.27 GiB)
>                 budget = 3505938432 (0xd0f86000) (3.27 GiB)
>                 usage  = 522092544 (0x1f1e8000) (497.91 MiB)
>                 flags: count = 1
>                         MEMORY_HEAP_DEVICE_LOCAL_BIT
> memoryTypes: count = 1
>         memoryTypes[0]:
>                 heapIndex     = 0
>                 propertyFlags = 0x000f: count = 4
>                         MEMORY_PROPERTY_DEVICE_LOCAL_BIT
>                         MEMORY_PROPERTY_HOST_VISIBLE_BIT
>                         MEMORY_PROPERTY_HOST_COHERENT_BIT
>                         MEMORY_PROPERTY_HOST_CACHED_BIT
>                 usable for:
>                         IMAGE_TILING_OPTIMAL:
>                                 color images
>                                 FORMAT_D16_UNORM
>                                 FORMAT_X8_D24_UNORM_PACK32
>                                 FORMAT_D32_SFLOAT
>                                 FORMAT_S8_UINT
>                                 FORMAT_D24_UNORM_S8_UINT
>                                 FORMAT_D32_SFLOAT_S8_UINT
>                                 (non-sparse)
>                         IMAGE_TILING_LINEAR:
>                                 color images
>                                 (non-sparse)
>
> VkPhysicalDeviceFeatures:
> =========================
>         robustBufferAccess                      = true
>         fullDrawIndexUint32                     = true
>         imageCubeArray                          = true
>         independentBlend                        = true
>         geometryShader                          = true
>         tessellationShader                      = true
>         sampleRateShading                       = true
>         dualSrcBlend                            = true
>         logicOp                                 = true
>         multiDrawIndirect                       = true
>         drawIndirectFirstInstance               = true
>         depthClamp                              = true
>         depthBiasClamp                          = true
>         fillModeNonSolid                        = true
>         depthBounds                             = false
>         wideLines                               = true
>         largePoints                             = true
>         alphaToOne                              = true
>         multiViewport                           = true
>         samplerAnisotropy                       = true
>         textureCompressionETC2                  = false
>         textureCompressionASTC_LDR              = false
>         textureCompressionBC                    = true
>         occlusionQueryPrecise                   = true
>         pipelineStatisticsQuery                 = true
>         vertexPipelineStoresAndAtomics          = true
>         fragmentStoresAndAtomics                = true
>         shaderTessellationAndGeometryPointSize  = true
>         shaderImageGatherExtended               = true
>         shaderStorageImageExtendedFormats       = true
>         shaderStorageImageMultisample           = true
>         shaderStorageImageReadWithoutFormat     = true
>         shaderStorageImageWriteWithoutFormat    = true
>         shaderUniformBufferArrayDynamicIndexing = true
>         shaderSampledImageArrayDynamicIndexing  = true
>         shaderStorageBufferArrayDynamicIndexing = true
>         shaderStorageImageArrayDynamicIndexing  = true
>         shaderClipDistance                      = true
>         shaderCullDistance                      = true
>         shaderFloat64                           = true
>         shaderInt64                             = true
>         shaderInt16                             = true
>         shaderResourceResidency                 = false
>         shaderResourceMinLod                    = false
>         sparseBinding                           = false
>         sparseResidencyBuffer                   = false
>         sparseResidencyImage2D                  = false
>         sparseResidencyImage3D                  = false
>         sparseResidency2Samples                 = false
>         sparseResidency4Samples                 = false
>         sparseResidency8Samples                 = false
>         sparseResidency16Samples                = false
>         sparseResidencyAliased                  = false
>         variableMultisampleRate                 = false
>         inheritedQueries                        = false
>
> VkPhysicalDevice4444FormatsFeaturesEXT:
> ---------------------------------------
>         formatA4R4G4B4 = true
>         formatA4B4G4R4 = true
>
> VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT:
> --------------------------------------------------------------
>         attachmentFeedbackLoopDynamicState = true
>
> VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT:
> --------------------------------------------------------
>         attachmentFeedbackLoopLayout = true
>
> VkPhysicalDeviceBorderColorSwizzleFeaturesEXT:
> ----------------------------------------------
>         borderColorSwizzle          = true
>         borderColorSwizzleFromImage = true
>
> VkPhysicalDeviceColorWriteEnableFeaturesEXT:
> --------------------------------------------
>         colorWriteEnable = true
>
> VkPhysicalDeviceConditionalRenderingFeaturesEXT:
> ------------------------------------------------
>         conditionalRendering          = true
>         inheritedConditionalRendering = false
>
> VkPhysicalDeviceCustomBorderColorFeaturesEXT:
> ---------------------------------------------
>         customBorderColors             = true
>         customBorderColorWithoutFormat = true
>
> VkPhysicalDeviceDepthClipControlFeaturesEXT:
> --------------------------------------------
>         depthClipControl = true
>
> VkPhysicalDeviceDepthClipEnableFeaturesEXT:
> -------------------------------------------
>         depthClipEnable = true
>
> VkPhysicalDeviceDescriptorBufferFeaturesEXT:
> --------------------------------------------
>         descriptorBuffer                   = true
>         descriptorBufferCaptureReplay      = false
>         descriptorBufferImageLayoutIgnored = true
>         descriptorBufferPushDescriptors    = true
>
> VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT:
> -------------------------------------------------------------
>         dynamicRenderingUnusedAttachments = true
>
> VkPhysicalDeviceExtendedDynamicState2FeaturesEXT:
> -------------------------------------------------
>         extendedDynamicState2                   = true
>         extendedDynamicState2LogicOp            = true
>         extendedDynamicState2PatchControlPoints = true
>
> VkPhysicalDeviceExtendedDynamicState3FeaturesEXT:
> -------------------------------------------------
>         extendedDynamicState3TessellationDomainOrigin         = true
>         extendedDynamicState3DepthClampEnable                 = true
>         extendedDynamicState3PolygonMode                      = true
>         extendedDynamicState3RasterizationSamples             = true
>         extendedDynamicState3SampleMask                       = true
>         extendedDynamicState3AlphaToCoverageEnable            = true
>         extendedDynamicState3AlphaToOneEnable                 = true
>         extendedDynamicState3LogicOpEnable                    = true
>         extendedDynamicState3ColorBlendEnable                 = true
>         extendedDynamicState3ColorBlendEquation               = true
>         extendedDynamicState3ColorWriteMask                   = true
>         extendedDynamicState3RasterizationStream              = false
>         extendedDynamicState3ConservativeRasterizationMode    = false
>         extendedDynamicState3ExtraPrimitiveOverestimationSize = false
>         extendedDynamicState3DepthClipEnable                  = true
>         extendedDynamicState3SampleLocationsEnable            = false
>         extendedDynamicState3ColorBlendAdvanced               = false
>         extendedDynamicState3ProvokingVertexMode              = true
>         extendedDynamicState3LineRasterizationMode            = true
>         extendedDynamicState3LineStippleEnable                = true
>         extendedDynamicState3DepthClipNegativeOneToOne        = true
>         extendedDynamicState3ViewportWScalingEnable           = false
>         extendedDynamicState3ViewportSwizzle                  = false
>         extendedDynamicState3CoverageToColorEnable            = false
>         extendedDynamicState3CoverageToColorLocation          = false
>         extendedDynamicState3CoverageModulationMode           = false
>         extendedDynamicState3CoverageModulationTableEnable    = false
>         extendedDynamicState3CoverageModulationTable          = false
>         extendedDynamicState3CoverageReductionMode            = false
>         extendedDynamicState3RepresentativeFragmentTestEnable = false
>         extendedDynamicState3ShadingRateImageEnable           = false
>
> VkPhysicalDeviceExtendedDynamicStateFeaturesEXT:
> ------------------------------------------------
>         extendedDynamicState = true
>
> VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT:
> ---------------------------------------------------
>         graphicsPipelineLibrary = true
>
> VkPhysicalDeviceHostImageCopyFeaturesEXT:
> -----------------------------------------
>         hostImageCopy = true
>
> VkPhysicalDeviceImage2DViewOf3DFeaturesEXT:
> -------------------------------------------
>         image2DViewOf3D   = true
>         sampler2DViewOf3D = true
>
> VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT:
> -----------------------------------------------
>         imageSlicedViewOf3D = true
>
> VkPhysicalDeviceIndexTypeUint8FeaturesKHR:
> ------------------------------------------
>         indexTypeUint8 = true
>
> VkPhysicalDeviceLineRasterizationFeaturesKHR:
> ---------------------------------------------
>         rectangularLines         = true
>         bresenhamLines           = true
>         smoothLines              = true
>         stippledRectangularLines = true
>         stippledBresenhamLines   = true
>         stippledSmoothLines      = true
>
> VkPhysicalDeviceMaintenance5FeaturesKHR:
> ----------------------------------------
>         maintenance5 = true
>
> VkPhysicalDeviceMaintenance6FeaturesKHR:
> ----------------------------------------
>         maintenance6 = true
>
> VkPhysicalDeviceMemoryPriorityFeaturesEXT:
> ------------------------------------------
>         memoryPriority = true
>
> VkPhysicalDeviceMeshShaderFeaturesEXT:
> --------------------------------------
>         taskShader                             = true
>         meshShader                             = true
>         multiviewMeshShader                    = false
>         primitiveFragmentShadingRateMeshShader = false
>         meshShaderQueries                      = true
>
> VkPhysicalDeviceMultiDrawFeaturesEXT:
> -------------------------------------
>         multiDraw = true
>
> VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT:
> -------------------------------------------------------------
>         multisampledRenderToSingleSampled = true
>
> VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT:
> -------------------------------------------------
>         mutableDescriptorType = true
>
> VkPhysicalDeviceNestedCommandBufferFeaturesEXT:
> -----------------------------------------------
>         nestedCommandBuffer                = true
>         nestedCommandBufferRendering       = true
>         nestedCommandBufferSimultaneousUse = true
>
> VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT:
> ----------------------------------------------
>         nonSeamlessCubeMap = true
>
> VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT:
> -----------------------------------------------------
>         pageableDeviceLocalMemory = true
>
> VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT:
> --------------------------------------------------------
>         primitiveTopologyListRestart      = true
>         primitiveTopologyPatchListRestart = true
>
> VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT:
> ----------------------------------------------------
>         primitivesGeneratedQuery                      = true
>         primitivesGeneratedQueryWithRasterizerDiscard = true
>         primitivesGeneratedQueryWithNonZeroStreams    = true
>
> VkPhysicalDeviceProvokingVertexFeaturesEXT:
> -------------------------------------------
>         provokingVertexLast                       = true
>         transformFeedbackPreservesProvokingVertex = true
>
> VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT:
> --------------------------------------------------------------
>         rasterizationOrderColorAttachmentAccess   = true
>         rasterizationOrderDepthAttachmentAccess   = true
>         rasterizationOrderStencilAttachmentAccess = true
>
> VkPhysicalDeviceRobustness2FeaturesEXT:
> ---------------------------------------
>         robustBufferAccess2 = true
>         robustImageAccess2  = true
>         nullDescriptor      = true
>
> VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT:
> ----------------------------------------------
>         shaderBufferFloat16Atomics      = false
>         shaderBufferFloat16AtomicAdd    = false
>         shaderBufferFloat16AtomicMinMax = false
>         shaderBufferFloat32AtomicMinMax = true
>         shaderBufferFloat64AtomicMinMax = false
>         shaderSharedFloat16Atomics      = false
>         shaderSharedFloat16AtomicAdd    = false
>         shaderSharedFloat16AtomicMinMax = false
>         shaderSharedFloat32AtomicMinMax = true
>         shaderSharedFloat64AtomicMinMax = false
>         shaderImageFloat32AtomicMinMax  = true
>         sparseImageFloat32AtomicMinMax  = false
>
> VkPhysicalDeviceShaderAtomicFloatFeaturesEXT:
> ---------------------------------------------
>         shaderBufferFloat32Atomics   = true
>         shaderBufferFloat32AtomicAdd = true
>         shaderBufferFloat64Atomics   = false
>         shaderBufferFloat64AtomicAdd = false
>         shaderSharedFloat32Atomics   = true
>         shaderSharedFloat32AtomicAdd = true
>         shaderSharedFloat64Atomics   = false
>         shaderSharedFloat64AtomicAdd = false
>         shaderImageFloat32Atomics    = true
>         shaderImageFloat32AtomicAdd  = true
>         sparseImageFloat32Atomics    = false
>         sparseImageFloat32AtomicAdd  = false
>
> VkPhysicalDeviceShaderClockFeaturesKHR:
> ---------------------------------------
>         shaderSubgroupClock = true
>         shaderDeviceClock   = true
>
> VkPhysicalDeviceShaderObjectFeaturesEXT:
> ----------------------------------------
>         shaderObject = true
>
> VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT:
> ------------------------------------------------
>         texelBufferAlignment = true
>
> VkPhysicalDeviceTransformFeedbackFeaturesEXT:
> ---------------------------------------------
>         transformFeedback = true
>         geometryStreams   = true
>
> VkPhysicalDeviceVertexAttributeDivisorFeaturesKHR:
> --------------------------------------------------
>         vertexAttributeInstanceRateDivisor     = true
>         vertexAttributeInstanceRateZeroDivisor = true
>
> VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT:
> ---------------------------------------------------
>         vertexInputDynamicState = true
>
> VkPhysicalDeviceVulkan11Features:
> ---------------------------------
>         storageBuffer16BitAccess           = true
>         uniformAndStorageBuffer16BitAccess = true
>         storagePushConstant16              = true
>         storageInputOutput16               = false
>         multiview                          = true
>         multiviewGeometryShader            = true
>         multiviewTessellationShader        = true
>         variablePointersStorageBuffer      = true
>         variablePointers                   = true
>         protectedMemory                    = false
>         samplerYcbcrConversion             = true
>         shaderDrawParameters               = true
>
> VkPhysicalDeviceVulkan12Features:
> ---------------------------------
>         samplerMirrorClampToEdge                           = true
>         drawIndirectCount                                  = true
>         storageBuffer8BitAccess                            = true
>         uniformAndStorageBuffer8BitAccess                  = true
>         storagePushConstant8                               = true
>         shaderBufferInt64Atomics                           = true
>         shaderSharedInt64Atomics                           = true
>         shaderFloat16                                      = true
>         shaderInt8                                         = true
>         descriptorIndexing                                 = true
>         shaderInputAttachmentArrayDynamicIndexing          = true
>         shaderUniformTexelBufferArrayDynamicIndexing       = true
>         shaderStorageTexelBufferArrayDynamicIndexing       = true
>         shaderUniformBufferArrayNonUniformIndexing         = true
>         shaderSampledImageArrayNonUniformIndexing          = true
>         shaderStorageBufferArrayNonUniformIndexing         = true
>         shaderStorageImageArrayNonUniformIndexing          = true
>         shaderInputAttachmentArrayNonUniformIndexing       = true
>         shaderUniformTexelBufferArrayNonUniformIndexing    = true
>         shaderStorageTexelBufferArrayNonUniformIndexing    = true
>         descriptorBindingUniformBufferUpdateAfterBind      = true
>         descriptorBindingSampledImageUpdateAfterBind       = true
>         descriptorBindingStorageImageUpdateAfterBind       = true
>         descriptorBindingStorageBufferUpdateAfterBind      = true
>         descriptorBindingUniformTexelBufferUpdateAfterBind = true
>         descriptorBindingStorageTexelBufferUpdateAfterBind = true
>         descriptorBindingUpdateUnusedWhilePending          = true
>         descriptorBindingPartiallyBound                    = true
>         descriptorBindingVariableDescriptorCount           = true
>         runtimeDescriptorArray                             = true
>         samplerFilterMinmax                                = true
>         scalarBlockLayout                                  = true
>         imagelessFramebuffer                               = true
>         uniformBufferStandardLayout                        = true
>         shaderSubgroupExtendedTypes                        = true
>         separateDepthStencilLayouts                        = true
>         hostQueryReset                                     = true
>         timelineSemaphore                                  = true
>         bufferDeviceAddress                                = true
>         bufferDeviceAddressCaptureReplay                   = false
>         bufferDeviceAddressMultiDevice                     = false
>         vulkanMemoryModel                                  = true
>         vulkanMemoryModelDeviceScope                       = true
>         vulkanMemoryModelAvailabilityVisibilityChains      = true
>         shaderOutputViewportIndex                          = true
>         shaderOutputLayer                                  = true
>         subgroupBroadcastDynamicId                         = true
>
> VkPhysicalDeviceVulkan13Features:
> ---------------------------------
>         robustImageAccess                                  = true
>         inlineUniformBlock                                 = true
>         descriptorBindingInlineUniformBlockUpdateAfterBind = true
>         pipelineCreationCacheControl                       = true
>         privateData                                        = true
>         shaderDemoteToHelperInvocation                     = true
>         shaderTerminateInvocation                          = true
>         subgroupSizeControl                                = true
>         computeFullSubgroups                               = true
>         synchronization2                                   = true
>         textureCompressionASTC_HDR                         = false
>         shaderZeroInitializeWorkgroupMemory                = true
>         dynamicRendering                                   = true
>         shaderIntegerDotProduct                            = true
>         maintenance4                                       = true
>
> VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT:
> -------------------------------------------------
>         ycbcr2plane444Formats = true
>
> VkPhysicalDeviceYcbcrImageArraysFeaturesEXT:
> --------------------------------------------
>         ycbcrImageArrays = true
>
>
> --
> 2.45.1.288.g0e0cd299f1-goog
>



More information about the linux-arm-kernel mailing list