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

From: Adam Ford
Date: Sun Jun 02 2024 - 15:53:27 EST


On Fri, May 31, 2024 at 6:23 AM Frank Binns <Frank.Binns@xxxxxxxxxx> wrote:
>
> Hi ChenYu,
>
> On Fri, 2024-05-31 at 12:00 +0800, Chen-Yu Tsai wrote:
> > On Thu, May 30, 2024 at 4:35 PM Chen-Yu Tsai <wenst@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.

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

adam

>
> Thanks
> Frank
>
> >
> >
> > For reference, on the BeaglePlay I see:
> >
> > MESA: error: No hard coded idfwdf program. Returning empty program.
> > MESA: error: No hard coded passthrough vertex shader. Returning
> > empty shader.
> > MESA: warning:
> > ../src/imagination/vulkan/pvr_descriptor_set.c:1073: FINISHME: Entry
> > tracker for allocations?
> >
> >
> > Regards
> > ChenYu
> >
> >
> > > Anyway, please have a look and test.
> > >
> > >
> > > Thanks
> > > ChenYu
> > >
> > > [1] https://lore.kernel.org/dri-devel/20220815165156.118212-2-sarah.walker@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
> > >