Re: [PATCH 0/6] powervr: MT8173 GPU support

From: Frank Binns
Date: Fri May 31 2024 - 07:23:12 EST


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@xxxxxxxxxxxx> 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@xxxxxxxxxx/
> > [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@xxxxxxxxxx/
> >
> > 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
> >