[PATCH 0/6] powervr: MT8173 GPU support

Adam Ford aford173 at gmail.com
Sun Jun 2 12:53:02 PDT 2024


On Fri, May 31, 2024 at 6:23 AM Frank Binns <Frank.Binns at imgtec.com> wrote:
>
> Hi ChenYu,
>
> On Fri, 2024-05-31 at 12:00 +0800, Chen-Yu Tsai wrote:
> > 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.
>
> Thank you for the patches, I'm really happy to see these!
>
> > >
> > > 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!
>
> No problem :)
>
> I've not dug into the display mode issue, but I'm wondering if it happens
> because there isn't a mode flagged as the preferred mode.
>
> >
> > 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.)
>
> The unknown commands are related to the GPU locking up, presumably because bad
> jobs are being submitted, likely due to missing bits of support for the
> Series6XT GPUs in the Vulkan driver / compiler. The unknown commands are the
> firmware notifying the host that the GPU has been reset. The GPU resets would
> explain the flickering you're seeing.

For what it's worth the GX6250 on my Renesas board appears to behave
the same way. I Used a different branch, but applied the patches to
support the BVNC.  I then tweaked it for my Renesas hardware.   I ran
vkd3d-gears, and I get several frames before it glitched out and
reappeared.

adam

>
> Thanks
> Frank
>
> >
> >
> > 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