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

From: Chen-Yu Tsai
Date: Fri May 31 2024 - 00:01:00 EST


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

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

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

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

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

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

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


For reference, on the BeaglePlay I see:

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


Regards
ChenYu


> Anyway, please have a look and test.
>
>
> Thanks
> ChenYu
>
> [1] https://lore.kernel.org/dri-devel/20220815165156.118212-2-sarah.walker@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
>