[PATCH 0/6] powervr: MT8173 GPU support

From: Chen-Yu Tsai
Date: Thu May 30 2024 - 04:35:47 EST


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.

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