lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Fri, 31 May 2024 11:15:26 +0000
From: Frank Binns <Frank.Binns@...tec.com>
To: "matthias.bgg@...il.com" <matthias.bgg@...il.com>,
        "tzimmermann@...e.de"
	<tzimmermann@...e.de>,
        Matt Coster <Matt.Coster@...tec.com>,
        "sboyd@...nel.org" <sboyd@...nel.org>,
        "robh@...nel.org" <robh@...nel.org>,
        "krzk+dt@...nel.org" <krzk+dt@...nel.org>,
        "maarten.lankhorst@...ux.intel.com" <maarten.lankhorst@...ux.intel.com>,
        "wenst@...omium.org" <wenst@...omium.org>,
        "mripard@...nel.org"
	<mripard@...nel.org>,
        "conor+dt@...nel.org" <conor+dt@...nel.org>,
        "angelogioacchino.delregno@...labora.com"
	<angelogioacchino.delregno@...labora.com>
CC: "dri-devel@...ts.freedesktop.org" <dri-devel@...ts.freedesktop.org>,
        "devicetree@...r.kernel.org" <devicetree@...r.kernel.org>,
        "linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>,
        "airlied@...il.com" <airlied@...il.com>,
        "linux-arm-kernel@...ts.infradead.org"
	<linux-arm-kernel@...ts.infradead.org>,
        "linux-mediatek@...ts.infradead.org"
	<linux-mediatek@...ts.infradead.org>,
        "daniel@...ll.ch" <daniel@...ll.ch>,
        "linux-clk@...r.kernel.org" <linux-clk@...r.kernel.org>
Subject: Re: [PATCH 0/6] powervr: MT8173 GPU support

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@...omium.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.

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

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ