chfi / gfaestus

GFA visualizer, GPU-accelerated using Vulkan
MIT License
68 stars 5 forks source link

How to install gfaestus #10

Closed Overcraft90 closed 1 year ago

Overcraft90 commented 2 years ago

Hi @chfi,

I just got my 2D layout for a human pangenome using odgi. Just wondering how can I install gfaestus in order to use the interactive tool for navigating the VGS?

Thanks in advance!

AndreaGuarracino commented 2 years ago

Try using this Dockerfile https://github.com/chfi/gfaestus/issues/9#issuecomment-1160250301

Overcraft90 commented 2 years ago

Hi @AndreaGuarracino,

Thanks a lot, I'm not exactly practical with Dockerfiles (in fact I just installed Docker). With that said, in this case what is the advantage of using docker over a normal installation, is it because of the large number of dependencies? Let me know!

Afterwards, I followed a simple tutorial on how to use Dockerfiles, and by following the instructions I created a folder, saved the #9 (comment) as a Dockerfile, and compiled it with docker build -t gfaestus:1.0 . It looks like it worked, can you confirm (attached the gfaestus.log file)?

Then, I tried to run my image with docker run 3f0fd5f6300d but nothing happened..., so for some reasons when I executed gfaestus pangenome_ref_guided_pggb.gfa pangenome_ref_guided_pggb.og.lay.tsv I got the following message:

gfaestus: command not found

Please, let me know how to proceed from here. Thanks again.

ekg commented 2 years ago

@chfi you need to sort this out. There needs to be a way to cargo install gfaestus and make it runnable with a basic CLI. Right now it's completely non-documented. I suggest taking an hour to fix this and add basic documentation for how to interact with gfaestus to the readme.

On Mon, Jun 20, 2022, 17:15 Matteo @.***> wrote:

Hi @AndreaGuarracino https://github.com/AndreaGuarracino,

Thanks a lot, I'm not exactly practical with Dockerfiles (in fact I just installed Docker). With that said, in this case what is the advantage of using docker over a normal installation, is it because of the large number of dependencies? Let me know!

Afterwards, I followed a simple tutorial on how to use Dockerfiles, and by following the instructions I created a folder, saved the #9 https://github.com/chfi/gfaestus/issues/9 (comment) as a Dockerfile, and compiled it with docker build -t gfaestus:1.0 . It looks like it worked, can you confirm (attached the gfaestus.log https://github.com/chfi/gfaestus/files/8941714/gfaestus.log file)?

Then, I tried to run my image with docker run 3f0fd5f6300d but nothing happened..., so for some reasons when I executed gfaestus pangenome_ref_guided_pggb.gfa pangenome_ref_guided_pggb.og.lay.tsv I got the following message:

gfaestus: command not found

Please, let me know how to proceed from here. Thanks again.

— Reply to this email directly, view it on GitHub https://github.com/chfi/gfaestus/issues/10#issuecomment-1160572602, or unsubscribe https://github.com/notifications/unsubscribe-auth/AABDQEKYBW64SGUUBZHI7LDVQCDKFANCNFSM5ZIW4FBQ . You are receiving this because you are subscribed to this thread.Message ID: @.***>

davidebolo1993 commented 2 years ago

Hey @Overcraft90,

the executable is in /opt/gfaestus/target/release/gfaestus. I can't run docker in the HPC we have, but for singularity (very similar to docker):

singularity run gfaestus_v0.1.0.sif /opt/gfaestus/target/release/gfaestus --help
Overcraft90 commented 2 years ago

Hello @davidebolo1993,

And thanks. However, just for me to understand since I'm running this on a local workstation, can the former line of command, or any other Dockerfile, be executed in local?

Also, it appears I cannot access the gfaestus_v0.1.0.sif, do I need to git clone the repository as well other than compiling the Dockerfile?

P.S. Just now I looked a bit into the singularity container, still I'm not aware of how to get the .sif file

davidebolo1993 commented 2 years ago

Hi @Overcraft90,

sorry I did not give more details in advance.

And thanks. However, just for me to understand since I'm running this on a local workstation, can the former line of command, or any other Dockerfile, be executed in local?

Yes.

_Also, it appears I cannot access the gfaestusv0.1.0.sif, do I need to git clone the repository as well other than compiling the Dockerfile?

This is when you run this with singularity (I can't use docker in the cluster I have). Install Singularity first. Then pull the image and run gfaestus.

singularity pull docker://edg1983/gfaestus:v0.1.0
singularity run --nv gfaestus_v0.1.0.sif /opt/gfaestus/target/release/gfaestus
Overcraft90 commented 2 years ago

OK, I will try as you said and let you know! Thanks again.

Overcraft90 commented 2 years ago

Hi all, I have some updates

I installed singularity; however, I did it without realising there was an Debian/Ubuntu package installation I could follow instead of starting from the very beginning.

What I've done is installing both dependencies & Go, then considering that downloading Singularity from release didn't work for me, I downloaded the .deb file and installed it with apt. When I run singularity --version it appears:

singularity-ce version 3.10.0-jammy

so I thought everything was fine, and indeed when I run the commands @davidebolo1993 indicated in his message it seemed 'gfaestus' was working but then I got this message:

WARN [gfaestus::vulkan::init] enumerating instance extension properties WARN [gfaestus::vulkan::init] "VK_EXT_debug_report" WARN [gfaestus::vulkan::init] "VK_EXT_debug_utils" WARN [gfaestus::vulkan::init] "VK_KHR_portability_enumeration" INFO [winit::platform_impl::platform::x11::window] Guessed window scale factor: 2 ERROR [gfaestus] Error initializing Gfaestus ERROR [gfaestus] VkError(ERROR_INCOMPATIBLE_DRIVER)

after executing singularity run --nv gfaestus_v0.1.0.sif /opt/gfaestus/target/release/gfaestus ../pangenome/pangenome_ref_guided_pggb.gfa ../pangenome/pangenome_ref_guided_pggb.og.lay.tsv. Why is this happening? Is it because I missed out on something after installing the dependencies & GO? Should I remove the singularity package so installed and go for the Debian/Ubuntu version with the following command:

    sudo apt-key adv --recv-keys --keyserver hkp://pool.sks-keyservers.net:80 0xA5D32F012649A5A9 && \
    sudo apt-get update

    sudo apt-get install -y singularity-container

and, afterwards, define default configurations? Please, let me know. Thanks!

chfi commented 2 years ago

gfaestus' current graphics implementation isn't exactly doing everything correctly, so it has trouble running on less common hardware/more exotic Vulkan implementations. A switch to a new engine with much better compatibility is coming.

Can you show the output of running vulkaninfo?

Overcraft90 commented 2 years ago

Actually, I get this message...

Command 'vulkaninfo' not found, but can be installed with: sudo apt install vulkan-tools

I believe I should install it and then try again. Let me know, thanks @chfi!

P.S. Should I install it with that command or from the website? I noticed there is no version for Ubuntu 22.04 "Jammy Jellyfish".

davidebolo1993 commented 2 years ago

Hi @Overcraft90,

the container now includes vulkan-tools and gfaestus can be run as follows:

singularity pull docker://edg1983/gfaestus:v0.1.0
singularity run --nv gfaestus_v0.1.0.sif gfaestus

But still there are issues. @chfi, this is what I see running vulkaninfo

singularity run --nv  gfaestus_v0.1.0.sif vulkaninfo
ERROR: [Loader Message] Code 0 : vkCreateInstance: Found no drivers!
Cannot create Vulkan instance.
This problem is often caused by a faulty installation of the Vulkan driver or attempting to use a GPU that does not support Vulkan.
ERROR at /build/vulkan-tools-1.3.216.0~rc1-1lunarg18.04/vulkaninfo/vulkaninfo.h:665:vkCreateInstance failed with ERROR_INCOMPATIBLE_DRIVER

I'm running the container from a cluster partition with gpu. nvidia-smi confirms there are 4 gpus available in this partition. Complete Dockerfile used to build gfaestus is:

FROM ubuntu:20.04
ENV DEBIAN_FRONTEND=noninteractive 
LABEL version="0.1.0"
LABEL description="gfaestus"
WORKDIR /opt
RUN apt-get update
RUN apt-get -y install build-essential curl wget git libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-dev \ 
&& wget -qO - http://packages.lunarg.com/lunarg-signing-key-pub.asc | apt-key add - \
&& wget -qO /etc/apt/sources.list.d/lunarg-vulkan-bionic.list http://packages.lunarg.com/vulkan/lunarg-vulkan-bionic.list \
&& apt-get update \
&& apt-get install -y apt vulkan-sdk vulkan-tools \
&& apt-get -y clean all \
&& rm -rf /var/cache
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | bash -s -- -y
ENV PATH="/root/.cargo/bin:${PATH}"
RUN git clone --recursive https://github.com/chfi/gfaestus.git \
&& cd gfaestus \
&& git checkout dev \
&& RUST_BACKTRACE=full cargo build --release
ENV PATH="/opt/gfaestus/target/release:${PATH}"

It looks ok to me, but maybe I'm missing something obvious.

Thanks,

Davide

Overcraft90 commented 2 years ago

Hi @chfi & @davidebolo1993,

I installed Vulkan with the following sudo apt install vulkan-tools. Now, after I run vulkaninfo I get back this:


WARNING: lavapipe is not a conformant vulkan implementation, testing use only.
==========
VULKANINFO
==========

Vulkan Instance Version: 1.3.204

Instance Extensions: count = 19
===============================
    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_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_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

Layers: count = 3
=================
VK_LAYER_MESA_device_select (Linux device selection layer) Vulkan version 1.2.73, layer version 1:
    Layer Extensions: count = 0
    Devices: count = 3
        GPU id = 0 (Quadro RTX 4000)
        Layer-Device Extensions: count = 0

        GPU id = 1 (llvmpipe (LLVM 13.0.1, 256 bits))
        Layer-Device Extensions: count = 0

        GPU id = 2 (Intel(R) UHD Graphics (CML GT2))
        Layer-Device Extensions: count = 0

VK_LAYER_MESA_overlay (Mesa Overlay layer) Vulkan version 1.2.199, layer version 1:
    Layer Extensions: count = 0
    Devices: count = 3
        GPU id = 0 (Quadro RTX 4000)
        Layer-Device Extensions: count = 0

        GPU id = 1 (llvmpipe (LLVM 13.0.1, 256 bits))
        Layer-Device Extensions: count = 0

        GPU id = 2 (Intel(R) UHD Graphics (CML GT2))
        Layer-Device Extensions: count = 0

VK_LAYER_NV_optimus (NVIDIA Optimus layer) Vulkan version 1.3.194, layer version 1:
    Layer Extensions: count = 0
    Devices: count = 3
        GPU id = 0 (Quadro RTX 4000)
        Layer-Device Extensions: count = 0

        GPU id = 1 (llvmpipe (LLVM 13.0.1, 256 bits))
        Layer-Device Extensions: count = 0

        GPU id = 2 (Intel(R) UHD Graphics (CML GT2))
        Layer-Device Extensions: count = 0

Presentable Surfaces:
=====================
GPU id : 0 (Quadro RTX 4000):
    Surface types: count = 2
        VK_KHR_xcb_surface
        VK_KHR_xlib_surface
    Formats: count = 2
        SurfaceFormat[0]:
            format = FORMAT_B8G8R8A8_UNORM
            colorSpace = COLOR_SPACE_SRGB_NONLINEAR_KHR
        SurfaceFormat[1]:
            format = FORMAT_B8G8R8A8_SRGB
            colorSpace = COLOR_SPACE_SRGB_NONLINEAR_KHR
    Present Modes: count = 3
        PRESENT_MODE_FIFO_KHR
        PRESENT_MODE_FIFO_RELAXED_KHR
        PRESENT_MODE_IMMEDIATE_KHR
    VkSurfaceCapabilitiesKHR:
    -------------------------
        minImageCount = 2
        maxImageCount = 8
        currentExtent:
            width  = 256
            height = 256
        minImageExtent:
            width  = 256
            height = 256
        maxImageExtent:
            width  = 256
            height = 256
        maxImageArrayLayers = 1
        supportedTransforms: count = 1
            SURFACE_TRANSFORM_IDENTITY_BIT_KHR
        currentTransform = SURFACE_TRANSFORM_IDENTITY_BIT_KHR
        supportedCompositeAlpha: count = 1
            COMPOSITE_ALPHA_OPAQUE_BIT_KHR
        supportedUsageFlags: count = 6
            IMAGE_USAGE_TRANSFER_SRC_BIT
            IMAGE_USAGE_TRANSFER_DST_BIT
            IMAGE_USAGE_SAMPLED_BIT
            IMAGE_USAGE_STORAGE_BIT
            IMAGE_USAGE_COLOR_ATTACHMENT_BIT
            IMAGE_USAGE_INPUT_ATTACHMENT_BIT
    VkSurfaceCapabilities2EXT:
    --------------------------
        supportedSurfaceCounters:
            None
    VkSurfaceProtectedCapabilitiesKHR:
    ----------------------------------
        supportsProtected = false

GPU id : 1 (llvmpipe (LLVM 13.0.1, 256 bits)):
    Surface types: count = 2
        VK_KHR_xcb_surface
        VK_KHR_xlib_surface
    Formats: count = 0
    Present Modes: count = 4
        PRESENT_MODE_IMMEDIATE_KHR
        PRESENT_MODE_MAILBOX_KHR
        PRESENT_MODE_FIFO_KHR
        PRESENT_MODE_FIFO_RELAXED_KHR
    VkSurfaceCapabilitiesKHR:
    -------------------------
        minImageCount = 3
        maxImageCount = 0
        currentExtent:
            width  = 256
            height = 256
        minImageExtent:
            width  = 256
            height = 256
        maxImageExtent:
            width  = 256
            height = 256
        maxImageArrayLayers = 1
        supportedTransforms: count = 1
            SURFACE_TRANSFORM_IDENTITY_BIT_KHR
        currentTransform = SURFACE_TRANSFORM_IDENTITY_BIT_KHR
        supportedCompositeAlpha: count = 2
            COMPOSITE_ALPHA_OPAQUE_BIT_KHR
            COMPOSITE_ALPHA_INHERIT_BIT_KHR
        supportedUsageFlags: count = 6
            IMAGE_USAGE_TRANSFER_SRC_BIT
            IMAGE_USAGE_TRANSFER_DST_BIT
            IMAGE_USAGE_SAMPLED_BIT
            IMAGE_USAGE_STORAGE_BIT
            IMAGE_USAGE_COLOR_ATTACHMENT_BIT
            IMAGE_USAGE_INPUT_ATTACHMENT_BIT
    VkSurfaceCapabilities2EXT:
    --------------------------
        supportedSurfaceCounters:
            None
    VkSurfaceProtectedCapabilitiesKHR:
    ----------------------------------
        supportsProtected = false

GPU id : 2 (Intel(R) UHD Graphics (CML GT2)):
    Surface types: count = 2
        VK_KHR_xcb_surface
        VK_KHR_xlib_surface
    Formats: count = 0
    Present Modes: count = 4
        PRESENT_MODE_IMMEDIATE_KHR
        PRESENT_MODE_MAILBOX_KHR
        PRESENT_MODE_FIFO_KHR
        PRESENT_MODE_FIFO_RELAXED_KHR
    VkSurfaceCapabilitiesKHR:
    -------------------------
        minImageCount = 3
        maxImageCount = 0
        currentExtent:
            width  = 256
            height = 256
        minImageExtent:
            width  = 256
            height = 256
        maxImageExtent:
            width  = 256
            height = 256
        maxImageArrayLayers = 1
        supportedTransforms: count = 1
            SURFACE_TRANSFORM_IDENTITY_BIT_KHR
        currentTransform = SURFACE_TRANSFORM_IDENTITY_BIT_KHR
        supportedCompositeAlpha: count = 2
            COMPOSITE_ALPHA_OPAQUE_BIT_KHR
            COMPOSITE_ALPHA_INHERIT_BIT_KHR
        supportedUsageFlags: count = 6
            IMAGE_USAGE_TRANSFER_SRC_BIT
            IMAGE_USAGE_TRANSFER_DST_BIT
            IMAGE_USAGE_SAMPLED_BIT
            IMAGE_USAGE_STORAGE_BIT
            IMAGE_USAGE_COLOR_ATTACHMENT_BIT
            IMAGE_USAGE_INPUT_ATTACHMENT_BIT
    VkSurfaceCapabilities2EXT:
    --------------------------
        supportedSurfaceCounters:
            None
    VkSurfaceProtectedCapabilitiesKHR:
    ----------------------------------
        supportsProtected = false

Device Groups:
==============
Group 0:
    Properties:
        physicalDevices: count = 1
            Quadro RTX 4000 (ID: 0)
        subsetAllocation = 0

    Present Capabilities:
        Quadro RTX 4000 (ID: 0):
            Can present images from the following devices: count = 1
                Quadro RTX 4000 (ID: 0)
        Present modes: count = 1
            DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR

Group 1:
    Properties:
        physicalDevices: count = 1
            llvmpipe (LLVM 13.0.1, 256 bits) (ID: 0)
        subsetAllocation = 0

WARNING: lavapipe is not a conformant vulkan implementation, testing use only.
    Present Capabilities:
        llvmpipe (LLVM 13.0.1, 256 bits) (ID: 0):
            Can present images from the following devices: count = 1
                llvmpipe (LLVM 13.0.1, 256 bits) (ID: 0)
        Present modes: count = 1
            DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR

Group 2:
    Properties:
        physicalDevices: count = 1
            Intel(R) UHD Graphics (CML GT2) (ID: 0)
        subsetAllocation = 0

    Present Capabilities:
        Intel(R) UHD Graphics (CML GT2) (ID: 0):
            Can present images from the following devices: count = 1
                Intel(R) UHD Graphics (CML GT2) (ID: 0)
        Present modes: count = 1
            DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR

Device Properties and Extensions:
=================================
GPU0:
VkPhysicalDeviceProperties:
---------------------------
    apiVersion        = 4206786 (1.3.194)
    driverVersion     = 2140291392 (0x7f924140)
    vendorID          = 0x10de
    deviceID          = 0x1eb6
    deviceType        = PHYSICAL_DEVICE_TYPE_DISCRETE_GPU
    deviceName        = Quadro RTX 4000
    pipelineCacheUUID = c621bcda-fc02-102c-3650-90a787bb4b38

VkPhysicalDeviceLimits:
-----------------------
    maxImageDimension1D                             = 32768
    maxImageDimension2D                             = 32768
    maxImageDimension3D                             = 16384
    maxImageDimensionCube                           = 32768
    maxImageArrayLayers                             = 2048
    maxTexelBufferElements                          = 134217728
    maxUniformBufferRange                           = 65536
    maxStorageBufferRange                           = 4294967295
    maxPushConstantsSize                            = 256
    maxMemoryAllocationCount                        = 4294967295
    maxSamplerAllocationCount                       = 4000
    bufferImageGranularity                          = 0x00000400
    sparseAddressSpaceSize                          = 0xffffffffff
    maxBoundDescriptorSets                          = 32
    maxPerStageDescriptorSamplers                   = 1048576
    maxPerStageDescriptorUniformBuffers             = 1048576
    maxPerStageDescriptorStorageBuffers             = 1048576
    maxPerStageDescriptorSampledImages              = 1048576
    maxPerStageDescriptorStorageImages              = 1048576
    maxPerStageDescriptorInputAttachments           = 1048576
    maxPerStageResources                            = 4294967295
    maxDescriptorSetSamplers                        = 1048576
    maxDescriptorSetUniformBuffers                  = 1048576
    maxDescriptorSetUniformBuffersDynamic           = 15
    maxDescriptorSetStorageBuffers                  = 1048576
    maxDescriptorSetStorageBuffersDynamic           = 16
    maxDescriptorSetSampledImages                   = 1048576
    maxDescriptorSetStorageImages                   = 1048576
    maxDescriptorSetInputAttachments                = 1048576
    maxVertexInputAttributes                        = 32
    maxVertexInputBindings                          = 32
    maxVertexInputAttributeOffset                   = 2047
    maxVertexInputBindingStride                     = 2048
    maxVertexOutputComponents                       = 128
    maxTessellationGenerationLevel                  = 64
    maxTessellationPatchSize                        = 32
    maxTessellationControlPerVertexInputComponents  = 128
    maxTessellationControlPerVertexOutputComponents = 128
    maxTessellationControlPerPatchOutputComponents  = 120
    maxTessellationControlTotalOutputComponents     = 4216
    maxTessellationEvaluationInputComponents        = 128
    maxTessellationEvaluationOutputComponents       = 128
    maxGeometryShaderInvocations                    = 32
    maxGeometryInputComponents                      = 128
    maxGeometryOutputComponents                     = 128
    maxGeometryOutputVertices                       = 1024
    maxGeometryTotalOutputComponents                = 1024
    maxFragmentInputComponents                      = 128
    maxFragmentOutputAttachments                    = 8
    maxFragmentDualSrcAttachments                   = 1
    maxFragmentCombinedOutputResources              = 4294967295
    maxComputeSharedMemorySize                      = 49152
    maxComputeWorkGroupCount: count = 3
        2147483647
        65535
        65535
    maxComputeWorkGroupInvocations                  = 1024
    maxComputeWorkGroupSize: count = 3
        1024
        1024
        64
    subPixelPrecisionBits                           = 8
    subTexelPrecisionBits                           = 8
    mipmapPrecisionBits                             = 8
    maxDrawIndexedIndexValue                        = 4294967295
    maxDrawIndirectCount                            = 4294967295
    maxSamplerLodBias                               = 15
    maxSamplerAnisotropy                            = 16
    maxViewports                                    = 16
    maxViewportDimensions: count = 2
        32768
        32768
    viewportBoundsRange: count = 2
        -65536
        65536
    viewportSubPixelBits                            = 8
    minMemoryMapAlignment                           = 64
    minTexelBufferOffsetAlignment                   = 0x00000010
    minUniformBufferOffsetAlignment                 = 0x00000040
    minStorageBufferOffsetAlignment                 = 0x00000010
    minTexelOffset                                  = -8
    maxTexelOffset                                  = 7
    minTexelGatherOffset                            = -32
    maxTexelGatherOffset                            = 31
    minInterpolationOffset                          = -0.5
    maxInterpolationOffset                          = 0.4375
    subPixelInterpolationOffsetBits                 = 4
    maxFramebufferWidth                             = 32768
    maxFramebufferHeight                            = 32768
    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 = 5
        SAMPLE_COUNT_1_BIT
        SAMPLE_COUNT_2_BIT
        SAMPLE_COUNT_4_BIT
        SAMPLE_COUNT_8_BIT
        SAMPLE_COUNT_16_BIT
    framebufferNoAttachmentsSampleCounts: count = 5
        SAMPLE_COUNT_1_BIT
        SAMPLE_COUNT_2_BIT
        SAMPLE_COUNT_4_BIT
        SAMPLE_COUNT_8_BIT
        SAMPLE_COUNT_16_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 = 5
        SAMPLE_COUNT_1_BIT
        SAMPLE_COUNT_2_BIT
        SAMPLE_COUNT_4_BIT
        SAMPLE_COUNT_8_BIT
        SAMPLE_COUNT_16_BIT
    storageImageSampleCounts: count = 4
        SAMPLE_COUNT_1_BIT
        SAMPLE_COUNT_2_BIT
        SAMPLE_COUNT_4_BIT
        SAMPLE_COUNT_8_BIT
    maxSampleMaskWords                              = 1
    timestampComputeAndGraphics                     = true
    timestampPeriod                                 = 1
    maxClipDistances                                = 8
    maxCullDistances                                = 8
    maxCombinedClipAndCullDistances                 = 8
    discreteQueuePriorities                         = 2
    pointSizeRange: count = 2
        1
        2047.94
    lineWidthRange: count = 2
        1
        64
    pointSizeGranularity                            = 0.0625
    lineWidthGranularity                            = 0.0625
    strictLines                                     = true
    standardSampleLocations                         = true
    optimalBufferCopyOffsetAlignment                = 0x00000001
    optimalBufferCopyRowPitchAlignment              = 0x00000001
    nonCoherentAtomSize                             = 0x00000040

VkPhysicalDeviceSparseProperties:
---------------------------------
    residencyStandard2DBlockShape            = true
    residencyStandard2DMultisampleBlockShape = true
    residencyStandard3DBlockShape            = true
    residencyAlignedMipSize                  = false
    residencyNonResidentStrict               = true

VkPhysicalDeviceAccelerationStructurePropertiesKHR:
---------------------------------------------------
    maxGeometryCount                                           = 16777215
    maxInstanceCount                                           = 16777215
    maxPrimitiveCount                                          = 536870911
    maxPerStageDescriptorAccelerationStructures                = 1048576
    maxPerStageDescriptorUpdateAfterBindAccelerationStructures = 1048576
    maxDescriptorSetAccelerationStructures                     = 1048576
    maxDescriptorSetUpdateAfterBindAccelerationStructures      = 1048576
    minAccelerationStructureScratchOffsetAlignment             = 128

VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT:
----------------------------------------------------
    advancedBlendMaxColorAttachments      = 8
    advancedBlendIndependentBlend         = false
    advancedBlendNonPremultipliedSrcColor = true
    advancedBlendNonPremultipliedDstColor = true
    advancedBlendCorrelatedOverlap        = true
    advancedBlendAllOperations            = true

VkPhysicalDeviceConservativeRasterizationPropertiesEXT:
-------------------------------------------------------
    primitiveOverestimationSize                 = 0.00195312
    maxExtraPrimitiveOverestimationSize         = 0.75
    extraPrimitiveOverestimationSizeGranularity = 0.25
    primitiveUnderestimation                    = true
    conservativePointAndLineRasterization       = true
    degenerateTrianglesRasterized               = true
    degenerateLinesRasterized                   = true
    fullyCoveredFragmentShaderInputVariable     = true
    conservativeRasterizationPostDepthCoverage  = true

VkPhysicalDeviceCustomBorderColorPropertiesEXT:
-----------------------------------------------
    maxCustomBorderColorSamplers = 4000

VkPhysicalDeviceDepthStencilResolveProperties:
----------------------------------------------
    supportedDepthResolveModes: count = 4
        RESOLVE_MODE_SAMPLE_ZERO_BIT
        RESOLVE_MODE_AVERAGE_BIT
        RESOLVE_MODE_MIN_BIT
        RESOLVE_MODE_MAX_BIT
    supportedStencilResolveModes: count = 3
        RESOLVE_MODE_SAMPLE_ZERO_BIT
        RESOLVE_MODE_MIN_BIT
        RESOLVE_MODE_MAX_BIT
    independentResolveNone = true
    independentResolve     = true

VkPhysicalDeviceDescriptorIndexingProperties:
---------------------------------------------
    maxUpdateAfterBindDescriptorsInAllPools              = 4294967295
    shaderUniformBufferArrayNonUniformIndexingNative     = true
    shaderSampledImageArrayNonUniformIndexingNative      = true
    shaderStorageBufferArrayNonUniformIndexingNative     = true
    shaderStorageImageArrayNonUniformIndexingNative      = true
    shaderInputAttachmentArrayNonUniformIndexingNative   = true
    robustBufferAccessUpdateAfterBind                    = true
    quadDivergentImplicitLod                             = true
    maxPerStageDescriptorUpdateAfterBindSamplers         = 1048576
    maxPerStageDescriptorUpdateAfterBindUniformBuffers   = 1048576
    maxPerStageDescriptorUpdateAfterBindStorageBuffers   = 1048576
    maxPerStageDescriptorUpdateAfterBindSampledImages    = 1048576
    maxPerStageDescriptorUpdateAfterBindStorageImages    = 1048576
    maxPerStageDescriptorUpdateAfterBindInputAttachments = 1048576
    maxPerStageUpdateAfterBindResources                  = 4294967295
    maxDescriptorSetUpdateAfterBindSamplers              = 1048576
    maxDescriptorSetUpdateAfterBindUniformBuffers        = 1048576
    maxDescriptorSetUpdateAfterBindUniformBuffersDynamic = 15
    maxDescriptorSetUpdateAfterBindStorageBuffers        = 1048576
    maxDescriptorSetUpdateAfterBindStorageBuffersDynamic = 16
    maxDescriptorSetUpdateAfterBindSampledImages         = 1048576
    maxDescriptorSetUpdateAfterBindStorageImages         = 1048576
    maxDescriptorSetUpdateAfterBindInputAttachments      = 1048576

VkPhysicalDeviceDiscardRectanglePropertiesEXT:
----------------------------------------------
    maxDiscardRectangles = 8

VkPhysicalDeviceDriverProperties:
---------------------------------
    driverID           = DRIVER_ID_NVIDIA_PROPRIETARY
    driverName         = NVIDIA
    driverInfo         = 510.73.05
    conformanceVersion = 1.3.0.0

VkPhysicalDeviceDrmPropertiesEXT:
---------------------------------
    hasPrimary   = true
    hasRender    = true
    primaryMajor = 226
    primaryMinor = 1
    renderMajor  = 226
    renderMinor  = 129

VkPhysicalDeviceExternalMemoryHostPropertiesEXT:
------------------------------------------------
    minImportedHostPointerAlignment = 0x00001000

VkPhysicalDeviceFloatControlsProperties:
----------------------------------------
    denormBehaviorIndependence            = SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL
    roundingModeIndependence              = SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL
    shaderSignedZeroInfNanPreserveFloat16 = true
    shaderSignedZeroInfNanPreserveFloat32 = true
    shaderSignedZeroInfNanPreserveFloat64 = true
    shaderDenormPreserveFloat16           = true
    shaderDenormPreserveFloat32           = false
    shaderDenormPreserveFloat64           = false
    shaderDenormFlushToZeroFloat16        = false
    shaderDenormFlushToZeroFloat32        = false
    shaderDenormFlushToZeroFloat64        = false
    shaderRoundingModeRTEFloat16          = true
    shaderRoundingModeRTEFloat32          = true
    shaderRoundingModeRTEFloat64          = true
    shaderRoundingModeRTZFloat16          = false
    shaderRoundingModeRTZFloat32          = true
    shaderRoundingModeRTZFloat64          = true

VkPhysicalDeviceFragmentShadingRatePropertiesKHR:
-------------------------------------------------
    minFragmentShadingRateAttachmentTexelSize:
        width  = 16
        height = 16
    maxFragmentShadingRateAttachmentTexelSize:
        width  = 16
        height = 16
    maxFragmentShadingRateAttachmentTexelSizeAspectRatio = 1
    primitiveFragmentShadingRateWithMultipleViewports    = false
    layeredShadingRateAttachments                        = true
    fragmentShadingRateNonTrivialCombinerOps             = true
    maxFragmentSize:
        width  = 4
        height = 4
    maxFragmentSizeAspectRatio                           = 2
    maxFragmentShadingRateCoverageSamples                = 16
    maxFragmentShadingRateRasterizationSamples           = SAMPLE_COUNT_16_BIT
    fragmentShadingRateWithShaderDepthStencilWrites      = true
    fragmentShadingRateWithSampleMask                    = true
    fragmentShadingRateWithShaderSampleMask              = true
    fragmentShadingRateWithConservativeRasterization     = true
    fragmentShadingRateWithFragmentShaderInterlock       = true
    fragmentShadingRateWithCustomSampleLocations         = true
    fragmentShadingRateStrictMultiplyCombiner            = true

VkPhysicalDeviceIDProperties:
-----------------------------
    deviceUUID      = 6c83891d-6f24-b87b-8f08-0f9867b7509a
    driverUUID      = 64858d9a-d61c-5cef-9f5f-589bb2070b62
    deviceNodeMask  = 1
    deviceLUIDValid = false

VkPhysicalDeviceInlineUniformBlockProperties:
---------------------------------------------
    maxInlineUniformBlockSize                               = 256
    maxPerStageDescriptorInlineUniformBlocks                = 32
    maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks = 32
    maxDescriptorSetInlineUniformBlocks                     = 32
    maxDescriptorSetUpdateAfterBindInlineUniformBlocks      = 32

VkPhysicalDeviceLineRasterizationPropertiesEXT:
-----------------------------------------------
    lineSubPixelPrecisionBits = 8

VkPhysicalDeviceMaintenance3Properties:
---------------------------------------
    maxPerSetDescriptors    = 4294967295
    maxMemoryAllocationSize = 0xffe00000

VkPhysicalDeviceMaintenance4Properties:
---------------------------------------
    maxBufferSize = 0xffffffffffff0000

VkPhysicalDeviceMultiDrawPropertiesEXT:
---------------------------------------
    maxMultiDrawCount = 4294967295

VkPhysicalDeviceMultiviewProperties:
------------------------------------
    maxMultiviewViewCount     = 32
    maxMultiviewInstanceIndex = 134217727

VkPhysicalDevicePCIBusInfoPropertiesEXT:
----------------------------------------
    pciDomain   = 0
    pciBus      = 1
    pciDevice   = 0
    pciFunction = 0

VkPhysicalDevicePointClippingProperties:
----------------------------------------
    pointClippingBehavior = POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY

VkPhysicalDeviceProtectedMemoryProperties:
------------------------------------------
    protectedNoFault = false

VkPhysicalDeviceProvokingVertexPropertiesEXT:
---------------------------------------------
    provokingVertexModePerPipeline                       = true
    transformFeedbackPreservesTriangleFanProvokingVertex = true

VkPhysicalDevicePushDescriptorPropertiesKHR:
--------------------------------------------
    maxPushDescriptors = 32

VkPhysicalDeviceRayTracingPipelinePropertiesKHR:
------------------------------------------------
    shaderGroupHandleSize              = 32
    maxRayRecursionDepth               = 31
    maxShaderGroupStride               = 4096
    shaderGroupBaseAlignment           = 64
    shaderGroupHandleCaptureReplaySize = 32
    maxRayDispatchInvocationCount      = 1073741824
    shaderGroupHandleAlignment         = 32
    maxRayHitAttributeSize             = 32

VkPhysicalDeviceRobustness2PropertiesEXT:
-----------------------------------------
    robustStorageBufferAccessSizeAlignment = 0x00000001
    robustUniformBufferAccessSizeAlignment = 0x00000010

VkPhysicalDeviceSampleLocationsPropertiesEXT:
---------------------------------------------
    sampleLocationSampleCounts: count = 5
        SAMPLE_COUNT_1_BIT
        SAMPLE_COUNT_2_BIT
        SAMPLE_COUNT_4_BIT
        SAMPLE_COUNT_8_BIT
        SAMPLE_COUNT_16_BIT
    maxSampleLocationGridSize:
        width  = 1
        height = 1
    sampleLocationCoordinateRange: count = 2
        0
        0.9375
    sampleLocationSubPixelBits       = 4
    variableSampleLocations          = true

VkPhysicalDeviceSamplerFilterMinmaxProperties:
----------------------------------------------
    filterMinmaxSingleComponentFormats = true
    filterMinmaxImageComponentMapping  = true

VkPhysicalDeviceShaderIntegerDotProductProperties:
--------------------------------------------------
    integerDotProduct8BitUnsignedAccelerated                                      = true
    integerDotProduct8BitSignedAccelerated                                        = true
    integerDotProduct8BitMixedSignednessAccelerated                               = true
    integerDotProduct4x8BitPackedUnsignedAccelerated                              = true
    integerDotProduct4x8BitPackedSignedAccelerated                                = true
    integerDotProduct4x8BitPackedMixedSignednessAccelerated                       = true
    integerDotProduct16BitUnsignedAccelerated                                     = false
    integerDotProduct16BitSignedAccelerated                                       = false
    integerDotProduct16BitMixedSignednessAccelerated                              = false
    integerDotProduct32BitUnsignedAccelerated                                     = false
    integerDotProduct32BitSignedAccelerated                                       = false
    integerDotProduct32BitMixedSignednessAccelerated                              = false
    integerDotProduct64BitUnsignedAccelerated                                     = false
    integerDotProduct64BitSignedAccelerated                                       = false
    integerDotProduct64BitMixedSignednessAccelerated                              = false
    integerDotProductAccumulatingSaturating8BitUnsignedAccelerated                = true
    integerDotProductAccumulatingSaturating8BitSignedAccelerated                  = true
    integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated         = true
    integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated        = true
    integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated          = true
    integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated = true
    integerDotProductAccumulatingSaturating16BitUnsignedAccelerated               = true
    integerDotProductAccumulatingSaturating16BitSignedAccelerated                 = true
    integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated        = true
    integerDotProductAccumulatingSaturating32BitUnsignedAccelerated               = true
    integerDotProductAccumulatingSaturating32BitSignedAccelerated                 = true
    integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated        = true
    integerDotProductAccumulatingSaturating64BitUnsignedAccelerated               = true
    integerDotProductAccumulatingSaturating64BitSignedAccelerated                 = true
    integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated        = true

VkPhysicalDeviceSubgroupProperties:
-----------------------------------
    subgroupSize              = 32
    supportedStages: count = 16
        SHADER_STAGE_VERTEX_BIT
        SHADER_STAGE_TESSELLATION_CONTROL_BIT
        SHADER_STAGE_TESSELLATION_EVALUATION_BIT
        SHADER_STAGE_GEOMETRY_BIT
        SHADER_STAGE_FRAGMENT_BIT
        SHADER_STAGE_COMPUTE_BIT
        SHADER_STAGE_ALL_GRAPHICS
        SHADER_STAGE_ALL
        SHADER_STAGE_RAYGEN_BIT_KHR
        SHADER_STAGE_ANY_HIT_BIT_KHR
        SHADER_STAGE_CLOSEST_HIT_BIT_KHR
        SHADER_STAGE_MISS_BIT_KHR
        SHADER_STAGE_INTERSECTION_BIT_KHR
        SHADER_STAGE_CALLABLE_BIT_KHR
        SHADER_STAGE_TASK_BIT_NV
        SHADER_STAGE_MESH_BIT_NV
    supportedOperations: count = 9
        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_CLUSTERED_BIT
        SUBGROUP_FEATURE_QUAD_BIT
        SUBGROUP_FEATURE_PARTITIONED_BIT_NV
    quadOperationsInAllStages = true

VkPhysicalDeviceSubgroupSizeControlProperties:
----------------------------------------------
    minSubgroupSize              = 32
    maxSubgroupSize              = 32
    maxComputeWorkgroupSubgroups = 2097152
    requiredSubgroupSizeStages: count = 16
        SHADER_STAGE_VERTEX_BIT
        SHADER_STAGE_TESSELLATION_CONTROL_BIT
        SHADER_STAGE_TESSELLATION_EVALUATION_BIT
        SHADER_STAGE_GEOMETRY_BIT
        SHADER_STAGE_FRAGMENT_BIT
        SHADER_STAGE_COMPUTE_BIT
        SHADER_STAGE_ALL_GRAPHICS
        SHADER_STAGE_ALL
        SHADER_STAGE_RAYGEN_BIT_KHR
        SHADER_STAGE_ANY_HIT_BIT_KHR
        SHADER_STAGE_CLOSEST_HIT_BIT_KHR
        SHADER_STAGE_MISS_BIT_KHR
        SHADER_STAGE_INTERSECTION_BIT_KHR
        SHADER_STAGE_CALLABLE_BIT_KHR
        SHADER_STAGE_TASK_BIT_NV
        SHADER_STAGE_MESH_BIT_NV

VkPhysicalDeviceTexelBufferAlignmentProperties:
-----------------------------------------------
    storageTexelBufferOffsetAlignmentBytes       = 0x00000010
    storageTexelBufferOffsetSingleTexelAlignment = true
    uniformTexelBufferOffsetAlignmentBytes       = 0x00000010
    uniformTexelBufferOffsetSingleTexelAlignment = true

VkPhysicalDeviceTimelineSemaphoreProperties:
--------------------------------------------
    maxTimelineSemaphoreValueDifference = 18446744073709551615

VkPhysicalDeviceTransformFeedbackPropertiesEXT:
-----------------------------------------------
    maxTransformFeedbackStreams                = 4
    maxTransformFeedbackBuffers                = 4
    maxTransformFeedbackBufferSize             = 0xffffffff
    maxTransformFeedbackStreamDataSize         = 2048
    maxTransformFeedbackBufferDataSize         = 512
    maxTransformFeedbackBufferDataStride       = 2048
    transformFeedbackQueries                   = true
    transformFeedbackStreamsLinesTriangles     = false
    transformFeedbackRasterizationStreamSelect = true
    transformFeedbackDraw                      = true

VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT:
----------------------------------------------------
    maxVertexAttribDivisor = 4294967295

VkPhysicalDeviceVulkan11Properties:
-----------------------------------
    deviceUUID                        = 6c83891d-6f24-b87b-8f08-0f9867b7509a
    driverUUID                        = 64858d9a-d61c-5cef-9f5f-589bb2070b62
    deviceNodeMask                    = 1
    deviceLUIDValid                   = false
    subgroupSize                      = 32
    subgroupSupportedStages: count = 16
        SHADER_STAGE_VERTEX_BIT
        SHADER_STAGE_TESSELLATION_CONTROL_BIT
        SHADER_STAGE_TESSELLATION_EVALUATION_BIT
        SHADER_STAGE_GEOMETRY_BIT
        SHADER_STAGE_FRAGMENT_BIT
        SHADER_STAGE_COMPUTE_BIT
        SHADER_STAGE_ALL_GRAPHICS
        SHADER_STAGE_ALL
        SHADER_STAGE_RAYGEN_BIT_KHR
        SHADER_STAGE_ANY_HIT_BIT_KHR
        SHADER_STAGE_CLOSEST_HIT_BIT_KHR
        SHADER_STAGE_MISS_BIT_KHR
        SHADER_STAGE_INTERSECTION_BIT_KHR
        SHADER_STAGE_CALLABLE_BIT_KHR
        SHADER_STAGE_TASK_BIT_NV
        SHADER_STAGE_MESH_BIT_NV
    subgroupSupportedOperations: count = 9
        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_CLUSTERED_BIT
        SUBGROUP_FEATURE_QUAD_BIT
        SUBGROUP_FEATURE_PARTITIONED_BIT_NV
    subgroupQuadOperationsInAllStages = true
    pointClippingBehavior             = POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY
    maxMultiviewViewCount             = 32
    maxMultiviewInstanceIndex         = 134217727
    protectedNoFault                  = false
    maxPerSetDescriptors              = 4294967295
    maxMemoryAllocationSize           = 0xffe00000

VkPhysicalDeviceVulkan12Properties:
-----------------------------------
    driverID                                             = DRIVER_ID_NVIDIA_PROPRIETARY
    driverName                                           = NVIDIA
    driverInfo                                           = 510.73.05
    conformanceVersion                                   = 1.3.0.0
    denormBehaviorIndependence                           = SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL
    roundingModeIndependence                             = SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL
    shaderSignedZeroInfNanPreserveFloat16                = true
    shaderSignedZeroInfNanPreserveFloat32                = true
    shaderSignedZeroInfNanPreserveFloat64                = true
    shaderDenormPreserveFloat16                          = true
    shaderDenormPreserveFloat32                          = false
    shaderDenormPreserveFloat64                          = false
    shaderDenormFlushToZeroFloat16                       = false
    shaderDenormFlushToZeroFloat32                       = false
    shaderDenormFlushToZeroFloat64                       = false
    shaderRoundingModeRTEFloat16                         = true
    shaderRoundingModeRTEFloat32                         = true
    shaderRoundingModeRTEFloat64                         = true
    shaderRoundingModeRTZFloat16                         = false
    shaderRoundingModeRTZFloat32                         = true
    shaderRoundingModeRTZFloat64                         = true
    maxUpdateAfterBindDescriptorsInAllPools              = 4294967295
    shaderUniformBufferArrayNonUniformIndexingNative     = true
    shaderSampledImageArrayNonUniformIndexingNative      = true
    shaderStorageBufferArrayNonUniformIndexingNative     = true
    shaderStorageImageArrayNonUniformIndexingNative      = true
    shaderInputAttachmentArrayNonUniformIndexingNative   = true
    robustBufferAccessUpdateAfterBind                    = true
    quadDivergentImplicitLod                             = true
    maxPerStageDescriptorUpdateAfterBindSamplers         = 1048576
    maxPerStageDescriptorUpdateAfterBindUniformBuffers   = 1048576
    maxPerStageDescriptorUpdateAfterBindStorageBuffers   = 1048576
    maxPerStageDescriptorUpdateAfterBindSampledImages    = 1048576
    maxPerStageDescriptorUpdateAfterBindStorageImages    = 1048576
    maxPerStageDescriptorUpdateAfterBindInputAttachments = 1048576
    maxPerStageUpdateAfterBindResources                  = 4294967295
    maxDescriptorSetUpdateAfterBindSamplers              = 1048576
    maxDescriptorSetUpdateAfterBindUniformBuffers        = 1048576
    maxDescriptorSetUpdateAfterBindUniformBuffersDynamic = 15
    maxDescriptorSetUpdateAfterBindStorageBuffers        = 1048576
    maxDescriptorSetUpdateAfterBindStorageBuffersDynamic = 16
    maxDescriptorSetUpdateAfterBindSampledImages         = 1048576
    maxDescriptorSetUpdateAfterBindStorageImages         = 1048576
    maxDescriptorSetUpdateAfterBindInputAttachments      = 1048576
    supportedDepthResolveModes: count = 4
        RESOLVE_MODE_SAMPLE_ZERO_BIT
        RESOLVE_MODE_AVERAGE_BIT
        RESOLVE_MODE_MIN_BIT
        RESOLVE_MODE_MAX_BIT
    supportedStencilResolveModes: count = 3
        RESOLVE_MODE_SAMPLE_ZERO_BIT
        RESOLVE_MODE_MIN_BIT
        RESOLVE_MODE_MAX_BIT
    independentResolveNone                               = true
    independentResolve                                   = true
    filterMinmaxSingleComponentFormats                   = true
    filterMinmaxImageComponentMapping                    = true
    maxTimelineSemaphoreValueDifference                  = 18446744073709551615
    framebufferIntegerColorSampleCounts: count = 4
        SAMPLE_COUNT_1_BIT
        SAMPLE_COUNT_2_BIT
        SAMPLE_COUNT_4_BIT
        SAMPLE_COUNT_8_BIT

VkPhysicalDeviceVulkan13Properties:
-----------------------------------
    minSubgroupSize                                                               = 32
    maxSubgroupSize                                                               = 32
    maxComputeWorkgroupSubgroups                                                  = 2097152
    requiredSubgroupSizeStages: count = 16
        SHADER_STAGE_VERTEX_BIT
        SHADER_STAGE_TESSELLATION_CONTROL_BIT
        SHADER_STAGE_TESSELLATION_EVALUATION_BIT
        SHADER_STAGE_GEOMETRY_BIT
        SHADER_STAGE_FRAGMENT_BIT
        SHADER_STAGE_COMPUTE_BIT
        SHADER_STAGE_ALL_GRAPHICS
        SHADER_STAGE_ALL
        SHADER_STAGE_RAYGEN_BIT_KHR
        SHADER_STAGE_ANY_HIT_BIT_KHR
        SHADER_STAGE_CLOSEST_HIT_BIT_KHR
        SHADER_STAGE_MISS_BIT_KHR
        SHADER_STAGE_INTERSECTION_BIT_KHR
        SHADER_STAGE_CALLABLE_BIT_KHR
        SHADER_STAGE_TASK_BIT_NV
        SHADER_STAGE_MESH_BIT_NV
    maxInlineUniformBlockSize                                                     = 256
    maxPerStageDescriptorInlineUniformBlocks                                      = 32
    maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks                       = 32
    maxDescriptorSetInlineUniformBlocks                                           = 32
    maxDescriptorSetUpdateAfterBindInlineUniformBlocks                            = 32
    maxInlineUniformTotalSize                                                     = 3584
    integerDotProduct8BitUnsignedAccelerated                                      = true
    integerDotProduct8BitSignedAccelerated                                        = true
    integerDotProduct8BitMixedSignednessAccelerated                               = true
    integerDotProduct4x8BitPackedUnsignedAccelerated                              = true
    integerDotProduct4x8BitPackedSignedAccelerated                                = true
    integerDotProduct4x8BitPackedMixedSignednessAccelerated                       = true
    integerDotProduct16BitUnsignedAccelerated                                     = false
    integerDotProduct16BitSignedAccelerated                                       = false
    integerDotProduct16BitMixedSignednessAccelerated                              = false
    integerDotProduct32BitUnsignedAccelerated                                     = false
    integerDotProduct32BitSignedAccelerated                                       = false
    integerDotProduct32BitMixedSignednessAccelerated                              = false
    integerDotProduct64BitUnsignedAccelerated                                     = false
    integerDotProduct64BitSignedAccelerated                                       = false
    integerDotProduct64BitMixedSignednessAccelerated                              = false
    integerDotProductAccumulatingSaturating8BitUnsignedAccelerated                = true
    integerDotProductAccumulatingSaturating8BitSignedAccelerated                  = true
    integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated         = true
    integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated        = true
    integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated          = true
    integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated = true
    integerDotProductAccumulatingSaturating16BitUnsignedAccelerated               = true
    integerDotProductAccumulatingSaturating16BitSignedAccelerated                 = true
    integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated        = true
    integerDotProductAccumulatingSaturating32BitUnsignedAccelerated               = true
    integerDotProductAccumulatingSaturating32BitSignedAccelerated                 = true
    integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated        = true
    integerDotProductAccumulatingSaturating64BitUnsignedAccelerated               = true
    integerDotProductAccumulatingSaturating64BitSignedAccelerated                 = true
    integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated        = true
    storageTexelBufferOffsetAlignmentBytes                                        = 0x00000010
    storageTexelBufferOffsetSingleTexelAlignment                                  = true
    uniformTexelBufferOffsetAlignmentBytes                                        = 0x00000010
    uniformTexelBufferOffsetSingleTexelAlignment                                  = true
    maxBufferSize                                                                 = 0xffffffffffff0000

Device Extensions: count = 155
    VK_EXT_4444_formats                         : extension revision 1
    VK_EXT_blend_operation_advanced             : extension revision 2
    VK_EXT_border_color_swizzle                 : extension revision 1
    VK_EXT_buffer_device_address                : extension revision 2
    VK_EXT_calibrated_timestamps                : extension revision 2
    VK_EXT_color_write_enable                   : extension revision 1
    VK_EXT_conditional_rendering                : extension revision 2
    VK_EXT_conservative_rasterization           : extension revision 1
    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_indexing                  : extension revision 2
    VK_EXT_discard_rectangles                   : extension revision 1
    VK_EXT_display_control                      : extension revision 1
    VK_EXT_extended_dynamic_state               : extension revision 1
    VK_EXT_extended_dynamic_state2              : extension revision 1
    VK_EXT_external_memory_host                 : extension revision 1
    VK_EXT_fragment_shader_interlock            : extension revision 1
    VK_EXT_global_priority                      : extension revision 2
    VK_EXT_global_priority_query                : extension revision 1
    VK_EXT_host_query_reset                     : extension revision 1
    VK_EXT_image_robustness                     : extension revision 1
    VK_EXT_image_view_min_lod                   : 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_multi_draw                           : extension revision 1
    VK_EXT_pci_bus_info                         : extension revision 2
    VK_EXT_physical_device_drm                  : 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_private_data                         : extension revision 1
    VK_EXT_provoking_vertex                     : extension revision 1
    VK_EXT_queue_family_foreign                 : extension revision 1
    VK_EXT_robustness2                          : extension revision 1
    VK_EXT_sample_locations                     : 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_demote_to_helper_invocation   : extension revision 1
    VK_EXT_shader_image_atomic_int64            : 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_tooling_info                         : 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_KHR_16bit_storage                        : extension revision 1
    VK_KHR_8bit_storage                         : extension revision 1
    VK_KHR_acceleration_structure               : extension revision 12
    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_deferred_host_operations             : extension revision 4
    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_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 1
    VK_KHR_fragment_shading_rate                : extension revision 1
    VK_KHR_get_memory_requirements2             : extension revision 1
    VK_KHR_global_priority                      : extension revision 1
    VK_KHR_image_format_list                    : extension revision 1
    VK_KHR_imageless_framebuffer                : extension revision 1
    VK_KHR_maintenance1                         : extension revision 2
    VK_KHR_maintenance2                         : extension revision 1
    VK_KHR_maintenance3                         : extension revision 1
    VK_KHR_maintenance4                         : extension revision 1
    VK_KHR_multiview                            : extension revision 1
    VK_KHR_pipeline_executable_properties       : extension revision 1
    VK_KHR_pipeline_library                     : extension revision 1
    VK_KHR_present_id                           : extension revision 1
    VK_KHR_present_wait                         : extension revision 1
    VK_KHR_push_descriptor                      : extension revision 2
    VK_KHR_ray_query                            : extension revision 1
    VK_KHR_ray_tracing_pipeline                 : extension revision 1
    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_subgroup_uniform_control_flow : 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_workgroup_memory_explicit_layout     : extension revision 1
    VK_KHR_zero_initialize_workgroup_memory     : extension revision 1
    VK_NVX_binary_import                        : extension revision 1
    VK_NVX_image_view_handle                    : extension revision 2
    VK_NVX_multiview_per_view_attributes        : extension revision 1
    VK_NV_clip_space_w_scaling                  : extension revision 1
    VK_NV_compute_shader_derivatives            : extension revision 1
    VK_NV_cooperative_matrix                    : extension revision 1
    VK_NV_corner_sampled_image                  : extension revision 2
    VK_NV_coverage_reduction_mode               : extension revision 1
    VK_NV_cuda_kernel_launch                    : extension revision 2
    VK_NV_dedicated_allocation                  : extension revision 1
    VK_NV_dedicated_allocation_image_aliasing   : extension revision 1
    VK_NV_device_diagnostic_checkpoints         : extension revision 2
    VK_NV_device_diagnostics_config             : extension revision 1
    VK_NV_device_generated_commands             : extension revision 3
    VK_NV_fill_rectangle                        : extension revision 1
    VK_NV_fragment_coverage_to_color            : extension revision 1
    VK_NV_fragment_shader_barycentric           : extension revision 1
    VK_NV_fragment_shading_rate_enums           : extension revision 1
    VK_NV_framebuffer_mixed_samples             : extension revision 1
    VK_NV_geometry_shader_passthrough           : extension revision 1
    VK_NV_inherited_viewport_scissor            : extension revision 1
    VK_NV_mesh_shader                           : extension revision 1
    VK_NV_present_barrier                       : extension revision 1
    VK_NV_ray_tracing                           : extension revision 3
    VK_NV_representative_fragment_test          : extension revision 2
    VK_NV_sample_mask_override_coverage         : extension revision 1
    VK_NV_scissor_exclusive                     : extension revision 1
    VK_NV_shader_image_footprint                : extension revision 2
    VK_NV_shader_sm_builtins                    : extension revision 1
    VK_NV_shader_subgroup_partitioned           : extension revision 1
    VK_NV_shading_rate_image                    : extension revision 3
    VK_NV_viewport_array2                       : extension revision 1
    VK_NV_viewport_swizzle                      : extension revision 1

VkQueueFamilyProperties:
========================
    queueProperties[0]:
    -------------------
        minImageTransferGranularity = (1,1,1)
        queueCount                  = 16
        queueFlags                  = QUEUE_GRAPHICS | QUEUE_COMPUTE | QUEUE_TRANSFER | QUEUE_SPARSE_BINDING
        timestampValidBits          = 64
        present support             = true
        VkQueueFamilyGlobalPriorityPropertiesKHR:
        -----------------------------------------
            priorityCount  = 1
            priorities: count = 16
                256
                0
                0
                0
                0
                0
                0
                0
                0
                0
                0
                0
                0
                0
                0
                0

    queueProperties[1]:
    -------------------
        minImageTransferGranularity = (1,1,1)
        queueCount                  = 2
        queueFlags                  = QUEUE_TRANSFER | QUEUE_SPARSE_BINDING
        timestampValidBits          = 64
        present support             = false
        VkQueueFamilyGlobalPriorityPropertiesKHR:
        -----------------------------------------
            priorityCount  = 1
            priorities: count = 16
                256
                0
                0
                0
                0
                0
                0
                0
                0
                0
                0
                0
                0
                0
                0
                0

    queueProperties[2]:
    -------------------
        minImageTransferGranularity = (1,1,1)
        queueCount                  = 8
        queueFlags                  = QUEUE_COMPUTE | QUEUE_TRANSFER | QUEUE_SPARSE_BINDING
        timestampValidBits          = 64
        present support             = true
        VkQueueFamilyGlobalPriorityPropertiesKHR:
        -----------------------------------------
            priorityCount  = 1
            priorities: count = 16
                256
                0
                0
                0
                0
                0
                0
                0
                0
                0
                0
                0
                0
                0
                0
                0

VkPhysicalDeviceMemoryProperties:
=================================
memoryHeaps: count = 3
    memoryHeaps[0]:
        size   = 8589934592 (0x200000000) (8.00 GiB)
        budget = 6813450240 (0x1961d0000) (6.35 GiB)
        usage  = 0 (0x00000000) (0.00 B)
        flags: count = 1
            MEMORY_HEAP_DEVICE_LOCAL_BIT
    memoryHeaps[1]:
        size   = 50288179200 (0xbb568b800) (46.83 GiB)
        budget = 50288179200 (0xbb568b800) (46.83 GiB)
        usage  = 0 (0x00000000) (0.00 B)
        flags:
            None
    memoryHeaps[2]:
        size   = 257949696 (0x0f600000) (246.00 MiB)
        budget = 250609664 (0x0ef00000) (239.00 MiB)
        usage  = 7340032 (0x00700000) (7.00 MiB)
        flags: count = 1
            MEMORY_HEAP_DEVICE_LOCAL_BIT
memoryTypes: count = 11
    memoryTypes[0]:
        heapIndex     = 1
        propertyFlags = 0x0000:
            None
        usable for:
            IMAGE_TILING_OPTIMAL:
                None
            IMAGE_TILING_LINEAR:
                color images
                (non-sparse, non-transient)
    memoryTypes[1]:
        heapIndex     = 1
        propertyFlags = 0x0000:
            None
        usable for:
            IMAGE_TILING_OPTIMAL:
                color images
            IMAGE_TILING_LINEAR:
                None
    memoryTypes[2]:
        heapIndex     = 1
        propertyFlags = 0x0000:
            None
        usable for:
            IMAGE_TILING_OPTIMAL:
                FORMAT_D16_UNORM
                (non-sparse, non-transient)
            IMAGE_TILING_LINEAR:
                None
    memoryTypes[3]:
        heapIndex     = 1
        propertyFlags = 0x0000:
            None
        usable for:
            IMAGE_TILING_OPTIMAL:
                FORMAT_X8_D24_UNORM_PACK32
                FORMAT_D24_UNORM_S8_UINT
                (non-sparse, non-transient)
            IMAGE_TILING_LINEAR:
                None
    memoryTypes[4]:
        heapIndex     = 1
        propertyFlags = 0x0000:
            None
        usable for:
            IMAGE_TILING_OPTIMAL:
                FORMAT_D32_SFLOAT
                (non-sparse, non-transient)
            IMAGE_TILING_LINEAR:
                None
    memoryTypes[5]:
        heapIndex     = 1
        propertyFlags = 0x0000:
            None
        usable for:
            IMAGE_TILING_OPTIMAL:
                FORMAT_D32_SFLOAT_S8_UINT
                (non-sparse, non-transient)
            IMAGE_TILING_LINEAR:
                None
    memoryTypes[6]:
        heapIndex     = 1
        propertyFlags = 0x0000:
            None
        usable for:
            IMAGE_TILING_OPTIMAL:
                FORMAT_S8_UINT
                (non-sparse, non-transient)
            IMAGE_TILING_LINEAR:
                None
    memoryTypes[7]:
        heapIndex     = 0
        propertyFlags = 0x0001: count = 1
            MEMORY_PROPERTY_DEVICE_LOCAL_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
            IMAGE_TILING_LINEAR:
                color images
                (non-sparse, non-transient)
    memoryTypes[8]:
        heapIndex     = 1
        propertyFlags = 0x0006: count = 2
            MEMORY_PROPERTY_HOST_VISIBLE_BIT
            MEMORY_PROPERTY_HOST_COHERENT_BIT
        usable for:
            IMAGE_TILING_OPTIMAL:
                None
            IMAGE_TILING_LINEAR:
                color images
                (non-sparse, non-transient)
    memoryTypes[9]:
        heapIndex     = 1
        propertyFlags = 0x000e: count = 3
            MEMORY_PROPERTY_HOST_VISIBLE_BIT
            MEMORY_PROPERTY_HOST_COHERENT_BIT
            MEMORY_PROPERTY_HOST_CACHED_BIT
        usable for:
            IMAGE_TILING_OPTIMAL:
                None
            IMAGE_TILING_LINEAR:
                color images
                (non-sparse, non-transient)
    memoryTypes[10]:
        heapIndex     = 2
        propertyFlags = 0x0007: count = 3
            MEMORY_PROPERTY_DEVICE_LOCAL_BIT
            MEMORY_PROPERTY_HOST_VISIBLE_BIT
            MEMORY_PROPERTY_HOST_COHERENT_BIT
        usable for:
            IMAGE_TILING_OPTIMAL:
                None
            IMAGE_TILING_LINEAR:
                color images
                (non-sparse, non-transient)

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                             = true
    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                 = true
    shaderResourceMinLod                    = true
    sparseBinding                           = true
    sparseResidencyBuffer                   = true
    sparseResidencyImage2D                  = true
    sparseResidencyImage3D                  = true
    sparseResidency2Samples                 = true
    sparseResidency4Samples                 = true
    sparseResidency8Samples                 = true
    sparseResidency16Samples                = true
    sparseResidencyAliased                  = true
    variableMultisampleRate                 = true
    inheritedQueries                        = true

VkPhysicalDevice16BitStorageFeatures:
-------------------------------------
    storageBuffer16BitAccess           = true
    uniformAndStorageBuffer16BitAccess = true
    storagePushConstant16              = true
    storageInputOutput16               = false

VkPhysicalDevice4444FormatsFeaturesEXT:
---------------------------------------
    formatA4R4G4B4 = true
    formatA4B4G4R4 = true

VkPhysicalDevice8BitStorageFeatures:
------------------------------------
    storageBuffer8BitAccess           = true
    uniformAndStorageBuffer8BitAccess = true
    storagePushConstant8              = true

VkPhysicalDeviceAccelerationStructureFeaturesKHR:
-------------------------------------------------
    accelerationStructure                                 = true
    accelerationStructureCaptureReplay                    = true
    accelerationStructureIndirectBuild                    = false
    accelerationStructureHostCommands                     = false
    descriptorBindingAccelerationStructureUpdateAfterBind = true

VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT:
--------------------------------------------------
    advancedBlendCoherentOperations = true

VkPhysicalDeviceBorderColorSwizzleFeaturesEXT:
----------------------------------------------
    borderColorSwizzle          = true
    borderColorSwizzleFromImage = false

VkPhysicalDeviceBufferDeviceAddressFeatures:
--------------------------------------------
    bufferDeviceAddress              = true
    bufferDeviceAddressCaptureReplay = true
    bufferDeviceAddressMultiDevice   = true

VkPhysicalDeviceBufferDeviceAddressFeaturesEXT:
-----------------------------------------------
    bufferDeviceAddress              = true
    bufferDeviceAddressCaptureReplay = true
    bufferDeviceAddressMultiDevice   = true

VkPhysicalDeviceColorWriteEnableFeaturesEXT:
--------------------------------------------
    colorWriteEnable = true

VkPhysicalDeviceConditionalRenderingFeaturesEXT:
------------------------------------------------
    conditionalRendering          = true
    inheritedConditionalRendering = true

VkPhysicalDeviceCustomBorderColorFeaturesEXT:
---------------------------------------------
    customBorderColors             = true
    customBorderColorWithoutFormat = true

VkPhysicalDeviceDepthClipControlFeaturesEXT:
--------------------------------------------
    depthClipControl = true

VkPhysicalDeviceDepthClipEnableFeaturesEXT:
-------------------------------------------
    depthClipEnable = true

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

VkPhysicalDeviceDynamicRenderingFeatures:
-----------------------------------------
    dynamicRendering = true

VkPhysicalDeviceExtendedDynamicState2FeaturesEXT:
-------------------------------------------------
    extendedDynamicState2                   = true
    extendedDynamicState2LogicOp            = true
    extendedDynamicState2PatchControlPoints = true

VkPhysicalDeviceExtendedDynamicStateFeaturesEXT:
------------------------------------------------
    extendedDynamicState = true

VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT:
---------------------------------------------------
    fragmentShaderSampleInterlock      = true
    fragmentShaderPixelInterlock       = true
    fragmentShaderShadingRateInterlock = true

VkPhysicalDeviceFragmentShadingRateFeaturesKHR:
-----------------------------------------------
    pipelineFragmentShadingRate   = true
    primitiveFragmentShadingRate  = true
    attachmentFragmentShadingRate = true

VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR:
-----------------------------------------------
    globalPriorityQuery = true

VkPhysicalDeviceHostQueryResetFeatures:
---------------------------------------
    hostQueryReset = true

VkPhysicalDeviceImageRobustnessFeatures:
----------------------------------------
    robustImageAccess = true

VkPhysicalDeviceImageViewMinLodFeaturesEXT:
-------------------------------------------
    minLod = true

VkPhysicalDeviceImagelessFramebufferFeatures:
---------------------------------------------
    imagelessFramebuffer = true

VkPhysicalDeviceIndexTypeUint8FeaturesEXT:
------------------------------------------
    indexTypeUint8 = true

VkPhysicalDeviceInlineUniformBlockFeatures:
-------------------------------------------
    inlineUniformBlock                                 = true
    descriptorBindingInlineUniformBlockUpdateAfterBind = true

VkPhysicalDeviceLineRasterizationFeaturesEXT:
---------------------------------------------
    rectangularLines         = true
    bresenhamLines           = true
    smoothLines              = true
    stippledRectangularLines = true
    stippledBresenhamLines   = true
    stippledSmoothLines      = true

VkPhysicalDeviceMaintenance4Features:
-------------------------------------
    maintenance4 = true

VkPhysicalDeviceMultiDrawFeaturesEXT:
-------------------------------------
    multiDraw = true

VkPhysicalDeviceMultiviewFeatures:
----------------------------------
    multiview                   = true
    multiviewGeometryShader     = true
    multiviewTessellationShader = true

VkPhysicalDevicePipelineCreationCacheControlFeatures:
-----------------------------------------------------
    pipelineCreationCacheControl = true

VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR:
--------------------------------------------------------
    pipelineExecutableInfo = true

VkPhysicalDevicePresentIdFeaturesKHR:
-------------------------------------
    presentId = true

VkPhysicalDevicePresentWaitFeaturesKHR:
---------------------------------------
    presentWait = true

VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT:
--------------------------------------------------------
    primitiveTopologyListRestart      = true
    primitiveTopologyPatchListRestart = true

VkPhysicalDevicePrivateDataFeatures:
------------------------------------
    privateData = true

VkPhysicalDeviceProtectedMemoryFeatures:
----------------------------------------
    protectedMemory = false

VkPhysicalDeviceProvokingVertexFeaturesEXT:
-------------------------------------------
    provokingVertexLast                       = true
    transformFeedbackPreservesProvokingVertex = true

VkPhysicalDeviceRayQueryFeaturesKHR:
------------------------------------
    rayQuery = true

VkPhysicalDeviceRayTracingPipelineFeaturesKHR:
----------------------------------------------
    rayTracingPipeline                                    = true
    rayTracingPipelineShaderGroupHandleCaptureReplay      = false
    rayTracingPipelineShaderGroupHandleCaptureReplayMixed = false
    rayTracingPipelineTraceRaysIndirect                   = true
    rayTraversalPrimitiveCulling                          = true

VkPhysicalDeviceRobustness2FeaturesEXT:
---------------------------------------
    robustBufferAccess2 = true
    robustImageAccess2  = true
    nullDescriptor      = true

VkPhysicalDeviceSamplerYcbcrConversionFeatures:
-----------------------------------------------
    samplerYcbcrConversion = true

VkPhysicalDeviceScalarBlockLayoutFeatures:
------------------------------------------
    scalarBlockLayout = true

VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures:
----------------------------------------------------
    separateDepthStencilLayouts = true

VkPhysicalDeviceShaderAtomicFloatFeaturesEXT:
---------------------------------------------
    shaderBufferFloat32Atomics   = true
    shaderBufferFloat32AtomicAdd = true
    shaderBufferFloat64Atomics   = true
    shaderBufferFloat64AtomicAdd = true
    shaderSharedFloat32Atomics   = true
    shaderSharedFloat32AtomicAdd = true
    shaderSharedFloat64Atomics   = true
    shaderSharedFloat64AtomicAdd = true
    shaderImageFloat32Atomics    = true
    shaderImageFloat32AtomicAdd  = true
    sparseImageFloat32Atomics    = true
    sparseImageFloat32AtomicAdd  = true

VkPhysicalDeviceShaderAtomicInt64Features:
------------------------------------------
    shaderBufferInt64Atomics = true
    shaderSharedInt64Atomics = true

VkPhysicalDeviceShaderClockFeaturesKHR:
---------------------------------------
    shaderSubgroupClock = true
    shaderDeviceClock   = true

VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures:
-------------------------------------------------------
    shaderDemoteToHelperInvocation = true

VkPhysicalDeviceShaderDrawParametersFeatures:
---------------------------------------------
    shaderDrawParameters = true

VkPhysicalDeviceShaderFloat16Int8Features:
------------------------------------------
    shaderFloat16 = true
    shaderInt8    = true

VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT:
--------------------------------------------------
    shaderImageInt64Atomics = true
    sparseImageInt64Atomics = true

VkPhysicalDeviceShaderIntegerDotProductFeatures:
------------------------------------------------
    shaderIntegerDotProduct = true

VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures:
----------------------------------------------------
    shaderSubgroupExtendedTypes = true

VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR:
------------------------------------------------------------
    shaderSubgroupUniformControlFlow = true

VkPhysicalDeviceShaderTerminateInvocationFeatures:
--------------------------------------------------
    shaderTerminateInvocation = true

VkPhysicalDeviceSubgroupSizeControlFeatures:
--------------------------------------------
    subgroupSizeControl  = true
    computeFullSubgroups = true

VkPhysicalDeviceSynchronization2Features:
-----------------------------------------
    synchronization2 = true

VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT:
------------------------------------------------
    texelBufferAlignment = true

VkPhysicalDeviceTextureCompressionASTCHDRFeatures:
--------------------------------------------------
    textureCompressionASTC_HDR = false

VkPhysicalDeviceTimelineSemaphoreFeatures:
------------------------------------------
    timelineSemaphore = true

VkPhysicalDeviceTransformFeedbackFeaturesEXT:
---------------------------------------------
    transformFeedback = true
    geometryStreams   = true

VkPhysicalDeviceUniformBufferStandardLayoutFeatures:
----------------------------------------------------
    uniformBufferStandardLayout = true

VkPhysicalDeviceVariablePointersFeatures:
-----------------------------------------
    variablePointersStorageBuffer = true
    variablePointers              = true

VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT:
--------------------------------------------------
    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                   = true
    bufferDeviceAddressMultiDevice                     = true
    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

VkPhysicalDeviceVulkanMemoryModelFeatures:
------------------------------------------
    vulkanMemoryModel                             = true
    vulkanMemoryModelDeviceScope                  = true
    vulkanMemoryModelAvailabilityVisibilityChains = true

VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR:
---------------------------------------------------------
    workgroupMemoryExplicitLayout                  = true
    workgroupMemoryExplicitLayoutScalarBlockLayout = true
    workgroupMemoryExplicitLayout8BitAccess        = true
    workgroupMemoryExplicitLayout16BitAccess       = true

VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT:
-------------------------------------------------
    ycbcr2plane444Formats = true

VkPhysicalDeviceYcbcrImageArraysFeaturesEXT:
--------------------------------------------
    ycbcrImageArrays = true

VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures:
------------------------------------------------------
    shaderZeroInitializeWorkgroupMemory = true

GPU1:
VkPhysicalDeviceProperties:
---------------------------
    apiVersion        = 4202700 (1.2.204)
    driverVersion     = 1 (0x0001)
    vendorID          = 0x10005
    deviceID          = 0x0000
    deviceType        = PHYSICAL_DEVICE_TYPE_CPU
    deviceName        = llvmpipe (LLVM 13.0.1, 256 bits)
    pipelineCacheUUID = 76616c2d-6c6c-206e-6f3d-270000000000

VkPhysicalDeviceLimits:
-----------------------
    maxImageDimension1D                             = 16384
    maxImageDimension2D                             = 16384
    maxImageDimension3D                             = 4096
    maxImageDimensionCube                           = 32768
    maxImageArrayLayers                             = 2048
    maxTexelBufferElements                          = 134217728
    maxUniformBufferRange                           = 65536
    maxStorageBufferRange                           = 134217728
    maxPushConstantsSize                            = 128
    maxMemoryAllocationCount                        = 4294967295
    maxSamplerAllocationCount                       = 32768
    bufferImageGranularity                          = 0x00000040
    sparseAddressSpaceSize                          = 0x00000000
    maxBoundDescriptorSets                          = 8
    maxPerStageDescriptorSamplers                   = 32
    maxPerStageDescriptorUniformBuffers             = 15
    maxPerStageDescriptorStorageBuffers             = 16
    maxPerStageDescriptorSampledImages              = 128
    maxPerStageDescriptorStorageImages              = 16
    maxPerStageDescriptorInputAttachments           = 8
    maxPerStageResources                            = 128
    maxDescriptorSetSamplers                        = 32768
    maxDescriptorSetUniformBuffers                  = 256
    maxDescriptorSetUniformBuffersDynamic           = 256
    maxDescriptorSetStorageBuffers                  = 256
    maxDescriptorSetStorageBuffersDynamic           = 256
    maxDescriptorSetSampledImages                   = 256
    maxDescriptorSetStorageImages                   = 256
    maxDescriptorSetInputAttachments                = 256
    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              = 40
    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

VkPhysicalDeviceDepthStencilResolveProperties:
----------------------------------------------
    supportedDepthResolveModes: count = 2
        RESOLVE_MODE_SAMPLE_ZERO_BIT
        RESOLVE_MODE_AVERAGE_BIT
    supportedStencilResolveModes: count = 1
        RESOLVE_MODE_SAMPLE_ZERO_BIT
    independentResolveNone = false
    independentResolve     = false

VkPhysicalDeviceDescriptorIndexingProperties:
---------------------------------------------
    maxUpdateAfterBindDescriptorsInAllPools              = 67108863
    shaderUniformBufferArrayNonUniformIndexingNative     = false
    shaderSampledImageArrayNonUniformIndexingNative      = false
    shaderStorageBufferArrayNonUniformIndexingNative     = false
    shaderStorageImageArrayNonUniformIndexingNative      = false
    shaderInputAttachmentArrayNonUniformIndexingNative   = false
    robustBufferAccessUpdateAfterBind                    = true
    quadDivergentImplicitLod                             = false
    maxPerStageDescriptorUpdateAfterBindSamplers         = 65536
    maxPerStageDescriptorUpdateAfterBindUniformBuffers   = 65536
    maxPerStageDescriptorUpdateAfterBindStorageBuffers   = 65536
    maxPerStageDescriptorUpdateAfterBindSampledImages    = 65536
    maxPerStageDescriptorUpdateAfterBindStorageImages    = 65536
    maxPerStageDescriptorUpdateAfterBindInputAttachments = 65536
    maxPerStageUpdateAfterBindResources                  = 65536
    maxDescriptorSetUpdateAfterBindSamplers              = 65536
    maxDescriptorSetUpdateAfterBindUniformBuffers        = 65536
    maxDescriptorSetUpdateAfterBindUniformBuffersDynamic = 16
    maxDescriptorSetUpdateAfterBindStorageBuffers        = 65536
    maxDescriptorSetUpdateAfterBindStorageBuffersDynamic = 16
    maxDescriptorSetUpdateAfterBindSampledImages         = 65536
    maxDescriptorSetUpdateAfterBindStorageImages         = 65536
    maxDescriptorSetUpdateAfterBindInputAttachments      = 65536

VkPhysicalDeviceDriverProperties:
---------------------------------
    driverID           = DRIVER_ID_MESA_LLVMPIPE
    driverName         = llvmpipe
    driverInfo         = Mesa 22.0.1 (LLVM 13.0.1)
    conformanceVersion = 0.0.0.0

VkPhysicalDeviceExternalMemoryHostPropertiesEXT:
------------------------------------------------
    minImportedHostPointerAlignment = 0x00001000

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

VkPhysicalDeviceIDProperties:
-----------------------------
    deviceUUID      = 00000000-0000-0000-0000-000000000000
    driverUUID      = 00000000-0000-0000-0000-000000000000
    deviceNodeMask  = 0
    deviceLUIDValid = false

VkPhysicalDeviceLineRasterizationPropertiesEXT:
-----------------------------------------------
    lineSubPixelPrecisionBits = 8

VkPhysicalDeviceMaintenance3Properties:
---------------------------------------
    maxPerSetDescriptors    = 1024
    maxMemoryAllocationSize = 0x80000000

VkPhysicalDeviceMultiDrawPropertiesEXT:
---------------------------------------
    maxMultiDrawCount = 2048

VkPhysicalDeviceMultiviewProperties:
------------------------------------
    maxMultiviewViewCount     = 6
    maxMultiviewInstanceIndex = 2147483647

VkPhysicalDevicePointClippingProperties:
----------------------------------------
    pointClippingBehavior = POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES

VkPhysicalDeviceProtectedMemoryProperties:
------------------------------------------
    protectedNoFault = false

VkPhysicalDeviceProvokingVertexPropertiesEXT:
---------------------------------------------
    provokingVertexModePerPipeline                       = true
    transformFeedbackPreservesTriangleFanProvokingVertex = true

VkPhysicalDevicePushDescriptorPropertiesKHR:
--------------------------------------------
    maxPushDescriptors = 32

VkPhysicalDeviceSamplerFilterMinmaxProperties:
----------------------------------------------
    filterMinmaxSingleComponentFormats = true
    filterMinmaxImageComponentMapping  = true

VkPhysicalDeviceSubgroupProperties:
-----------------------------------
    subgroupSize              = 8
    supportedStages: count = 4
        SHADER_STAGE_FRAGMENT_BIT
        SHADER_STAGE_COMPUTE_BIT
        SHADER_STAGE_ALL_GRAPHICS
        SHADER_STAGE_ALL
    supportedOperations: count = 4
        SUBGROUP_FEATURE_BASIC_BIT
        SUBGROUP_FEATURE_VOTE_BIT
        SUBGROUP_FEATURE_ARITHMETIC_BIT
        SUBGROUP_FEATURE_BALLOT_BIT
    quadOperationsInAllStages = false

VkPhysicalDeviceTimelineSemaphoreProperties:
--------------------------------------------
    maxTimelineSemaphoreValueDifference = 18446744073709551615

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                        = 00000000-0000-0000-0000-000000000000
    driverUUID                        = 00000000-0000-0000-0000-000000000000
    deviceNodeMask                    = 0
    deviceLUIDValid                   = false
    subgroupSize                      = 8
    subgroupSupportedStages: count = 4
        SHADER_STAGE_FRAGMENT_BIT
        SHADER_STAGE_COMPUTE_BIT
        SHADER_STAGE_ALL_GRAPHICS
        SHADER_STAGE_ALL
    subgroupSupportedOperations: count = 4
        SUBGROUP_FEATURE_BASIC_BIT
        SUBGROUP_FEATURE_VOTE_BIT
        SUBGROUP_FEATURE_ARITHMETIC_BIT
        SUBGROUP_FEATURE_BALLOT_BIT
    subgroupQuadOperationsInAllStages = false
    pointClippingBehavior             = POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES
    maxMultiviewViewCount             = 6
    maxMultiviewInstanceIndex         = 2147483647
    protectedNoFault                  = false
    maxPerSetDescriptors              = 1024
    maxMemoryAllocationSize           = 0x80000000

VkPhysicalDeviceVulkan12Properties:
-----------------------------------
    driverID                                             = DRIVER_ID_MESA_LLVMPIPE
    driverName                                           = llvmpipe
    driverInfo                                           = Mesa 22.0.1 (LLVM 13.0.1)
    conformanceVersion                                   = 0.0.0.0
    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              = 67108863
    shaderUniformBufferArrayNonUniformIndexingNative     = false
    shaderSampledImageArrayNonUniformIndexingNative      = false
    shaderStorageBufferArrayNonUniformIndexingNative     = false
    shaderStorageImageArrayNonUniformIndexingNative      = false
    shaderInputAttachmentArrayNonUniformIndexingNative   = false
    robustBufferAccessUpdateAfterBind                    = true
    quadDivergentImplicitLod                             = false
    maxPerStageDescriptorUpdateAfterBindSamplers         = 65536
    maxPerStageDescriptorUpdateAfterBindUniformBuffers   = 65536
    maxPerStageDescriptorUpdateAfterBindStorageBuffers   = 65536
    maxPerStageDescriptorUpdateAfterBindSampledImages    = 65536
    maxPerStageDescriptorUpdateAfterBindStorageImages    = 65536
    maxPerStageDescriptorUpdateAfterBindInputAttachments = 65536
    maxPerStageUpdateAfterBindResources                  = 65536
    maxDescriptorSetUpdateAfterBindSamplers              = 65536
    maxDescriptorSetUpdateAfterBindUniformBuffers        = 65536
    maxDescriptorSetUpdateAfterBindUniformBuffersDynamic = 16
    maxDescriptorSetUpdateAfterBindStorageBuffers        = 65536
    maxDescriptorSetUpdateAfterBindStorageBuffersDynamic = 16
    maxDescriptorSetUpdateAfterBindSampledImages         = 65536
    maxDescriptorSetUpdateAfterBindStorageImages         = 65536
    maxDescriptorSetUpdateAfterBindInputAttachments      = 65536
    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

Device Extensions: count = 67
-----------------------------
    VK_EXT_4444_formats                    : 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_enable               : extension revision 1
    VK_EXT_extended_dynamic_state          : extension revision 1
    VK_EXT_extended_dynamic_state2         : extension revision 1
    VK_EXT_external_memory_host            : extension revision 1
    VK_EXT_host_query_reset                : extension revision 1
    VK_EXT_index_type_uint8                : extension revision 1
    VK_EXT_line_rasterization              : extension revision 1
    VK_EXT_multi_draw                      : extension revision 1
    VK_EXT_post_depth_coverage             : extension revision 1
    VK_EXT_primitive_topology_list_restart : extension revision 1
    VK_EXT_private_data                    : extension revision 1
    VK_EXT_provoking_vertex                : 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_stencil_export           : extension revision 1
    VK_EXT_shader_viewport_index_layer     : 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_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_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_multiview                       : 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_separate_depth_stencil_layouts  : extension revision 1
    VK_KHR_shader_atomic_int64             : 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_subgroup_extended_types  : 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_timeline_semaphore              : extension revision 2
    VK_KHR_uniform_buffer_standard_layout  : extension revision 1
    VK_KHR_variable_pointers               : extension revision 1

VkQueueFamilyProperties:
========================
    queueProperties[0]:
    -------------------
        minImageTransferGranularity = (1,1,1)
        queueCount                  = 1
        queueFlags                  = QUEUE_GRAPHICS | QUEUE_COMPUTE | QUEUE_TRANSFER
        timestampValidBits          = 64
        present support             = false

VkPhysicalDeviceMemoryProperties:
=================================
memoryHeaps: count = 1
    memoryHeaps[0]:
        size   = 2147483648 (0x80000000) (2.00 GiB)
        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     = false
    shaderStorageImageWriteWithoutFormat    = true
    shaderUniformBufferArrayDynamicIndexing = true
    shaderSampledImageArrayDynamicIndexing  = false
    shaderStorageBufferArrayDynamicIndexing = true
    shaderStorageImageArrayDynamicIndexing  = false
    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

VkPhysicalDevice16BitStorageFeatures:
-------------------------------------
    storageBuffer16BitAccess           = true
    uniformAndStorageBuffer16BitAccess = true
    storagePushConstant16              = true
    storageInputOutput16               = false

VkPhysicalDevice4444FormatsFeaturesEXT:
---------------------------------------
    formatA4R4G4B4 = true
    formatA4B4G4R4 = true

VkPhysicalDevice8BitStorageFeatures:
------------------------------------
    storageBuffer8BitAccess           = true
    uniformAndStorageBuffer8BitAccess = true
    storagePushConstant8              = true

VkPhysicalDeviceBufferDeviceAddressFeatures:
--------------------------------------------
    bufferDeviceAddress              = true
    bufferDeviceAddressCaptureReplay = false
    bufferDeviceAddressMultiDevice   = false

VkPhysicalDeviceColorWriteEnableFeaturesEXT:
--------------------------------------------
    colorWriteEnable = true

VkPhysicalDeviceConditionalRenderingFeaturesEXT:
------------------------------------------------
    conditionalRendering          = true
    inheritedConditionalRendering = false

VkPhysicalDeviceCustomBorderColorFeaturesEXT:
---------------------------------------------
    customBorderColors             = true
    customBorderColorWithoutFormat = true

VkPhysicalDeviceDepthClipEnableFeaturesEXT:
-------------------------------------------
    depthClipEnable = true

VkPhysicalDeviceDescriptorIndexingFeatures:
-------------------------------------------
    shaderInputAttachmentArrayDynamicIndexing          = false
    shaderUniformTexelBufferArrayDynamicIndexing       = false
    shaderStorageTexelBufferArrayDynamicIndexing       = false
    shaderUniformBufferArrayNonUniformIndexing         = false
    shaderSampledImageArrayNonUniformIndexing          = false
    shaderStorageBufferArrayNonUniformIndexing         = false
    shaderStorageImageArrayNonUniformIndexing          = false
    shaderInputAttachmentArrayNonUniformIndexing       = false
    shaderUniformTexelBufferArrayNonUniformIndexing    = false
    shaderStorageTexelBufferArrayNonUniformIndexing    = false
    descriptorBindingUniformBufferUpdateAfterBind      = false
    descriptorBindingSampledImageUpdateAfterBind       = false
    descriptorBindingStorageImageUpdateAfterBind       = false
    descriptorBindingStorageBufferUpdateAfterBind      = false
    descriptorBindingUniformTexelBufferUpdateAfterBind = false
    descriptorBindingStorageTexelBufferUpdateAfterBind = false
    descriptorBindingUpdateUnusedWhilePending          = false
    descriptorBindingPartiallyBound                    = false
    descriptorBindingVariableDescriptorCount           = false
    runtimeDescriptorArray                             = false

VkPhysicalDeviceDynamicRenderingFeaturesKHR:
--------------------------------------------
    dynamicRendering = true

VkPhysicalDeviceExtendedDynamicState2FeaturesEXT:
-------------------------------------------------
    extendedDynamicState2                   = true
    extendedDynamicState2LogicOp            = true
    extendedDynamicState2PatchControlPoints = true

VkPhysicalDeviceExtendedDynamicStateFeaturesEXT:
------------------------------------------------
    extendedDynamicState = true

VkPhysicalDeviceHostQueryResetFeatures:
---------------------------------------
    hostQueryReset = true

VkPhysicalDeviceImagelessFramebufferFeatures:
---------------------------------------------
    imagelessFramebuffer = true

VkPhysicalDeviceIndexTypeUint8FeaturesEXT:
------------------------------------------
    indexTypeUint8 = true

VkPhysicalDeviceLineRasterizationFeaturesEXT:
---------------------------------------------
    rectangularLines         = true
    bresenhamLines           = true
    smoothLines              = true
    stippledRectangularLines = true
    stippledBresenhamLines   = true
    stippledSmoothLines      = true

VkPhysicalDeviceMultiDrawFeaturesEXT:
-------------------------------------
    multiDraw = true

VkPhysicalDeviceMultiviewFeatures:
----------------------------------
    multiview                   = true
    multiviewGeometryShader     = true
    multiviewTessellationShader = true

VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT:
--------------------------------------------------------
    primitiveTopologyListRestart      = true
    primitiveTopologyPatchListRestart = true

VkPhysicalDevicePrivateDataFeaturesEXT:
---------------------------------------
    privateData = true

VkPhysicalDeviceProtectedMemoryFeatures:
----------------------------------------
    protectedMemory = false

VkPhysicalDeviceProvokingVertexFeaturesEXT:
-------------------------------------------
    provokingVertexLast                       = true
    transformFeedbackPreservesProvokingVertex = true

VkPhysicalDeviceSamplerYcbcrConversionFeatures:
-----------------------------------------------
    samplerYcbcrConversion = false

VkPhysicalDeviceScalarBlockLayoutFeatures:
------------------------------------------
    scalarBlockLayout = true

VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures:
----------------------------------------------------
    separateDepthStencilLayouts = true

VkPhysicalDeviceShaderAtomicInt64Features:
------------------------------------------
    shaderBufferInt64Atomics = true
    shaderSharedInt64Atomics = true

VkPhysicalDeviceShaderDrawParametersFeatures:
---------------------------------------------
    shaderDrawParameters = true

VkPhysicalDeviceShaderFloat16Int8Features:
------------------------------------------
    shaderFloat16 = true
    shaderInt8    = true

VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures:
----------------------------------------------------
    shaderSubgroupExtendedTypes = true

VkPhysicalDeviceTimelineSemaphoreFeatures:
------------------------------------------
    timelineSemaphore = true

VkPhysicalDeviceTransformFeedbackFeaturesEXT:
---------------------------------------------
    transformFeedback = true
    geometryStreams   = true

VkPhysicalDeviceUniformBufferStandardLayoutFeatures:
----------------------------------------------------
    uniformBufferStandardLayout = true

VkPhysicalDeviceVariablePointersFeatures:
-----------------------------------------
    variablePointersStorageBuffer = true
    variablePointers              = false

VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT:
--------------------------------------------------
    vertexAttributeInstanceRateDivisor     = true
    vertexAttributeInstanceRateZeroDivisor = false

VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT:
---------------------------------------------------
    vertexInputDynamicState = true

VkPhysicalDeviceVulkan11Features:
---------------------------------
    storageBuffer16BitAccess           = true
    uniformAndStorageBuffer16BitAccess = true
    storagePushConstant16              = true
    storageInputOutput16               = false
    multiview                          = true
    multiviewGeometryShader            = true
    multiviewTessellationShader        = true
    variablePointersStorageBuffer      = true
    variablePointers                   = false
    protectedMemory                    = false
    samplerYcbcrConversion             = false
    shaderDrawParameters               = true

VkPhysicalDeviceVulkan12Features:
---------------------------------
    samplerMirrorClampToEdge                           = true
    drawIndirectCount                                  = true
    storageBuffer8BitAccess                            = true
    uniformAndStorageBuffer8BitAccess                  = true
    storagePushConstant8                               = true
    shaderBufferInt64Atomics                           = true
    shaderSharedInt64Atomics                           = true
    shaderFloat16                                      = true
    shaderInt8                                         = true
    descriptorIndexing                                 = false
    shaderInputAttachmentArrayDynamicIndexing          = false
    shaderUniformTexelBufferArrayDynamicIndexing       = false
    shaderStorageTexelBufferArrayDynamicIndexing       = false
    shaderUniformBufferArrayNonUniformIndexing         = false
    shaderSampledImageArrayNonUniformIndexing          = false
    shaderStorageBufferArrayNonUniformIndexing         = false
    shaderStorageImageArrayNonUniformIndexing          = false
    shaderInputAttachmentArrayNonUniformIndexing       = false
    shaderUniformTexelBufferArrayNonUniformIndexing    = false
    shaderStorageTexelBufferArrayNonUniformIndexing    = false
    descriptorBindingUniformBufferUpdateAfterBind      = false
    descriptorBindingSampledImageUpdateAfterBind       = false
    descriptorBindingStorageImageUpdateAfterBind       = false
    descriptorBindingStorageBufferUpdateAfterBind      = false
    descriptorBindingUniformTexelBufferUpdateAfterBind = false
    descriptorBindingStorageTexelBufferUpdateAfterBind = false
    descriptorBindingUpdateUnusedWhilePending          = false
    descriptorBindingPartiallyBound                    = false
    descriptorBindingVariableDescriptorCount           = false
    runtimeDescriptorArray                             = false
    samplerFilterMinmax                                = true
    scalarBlockLayout                                  = true
    imagelessFramebuffer                               = true
    uniformBufferStandardLayout                        = true
    shaderSubgroupExtendedTypes                        = true
    separateDepthStencilLayouts                        = true
    hostQueryReset                                     = true
    timelineSemaphore                                  = true
    bufferDeviceAddress                                = true
    bufferDeviceAddressCaptureReplay                   = false
    bufferDeviceAddressMultiDevice                     = false
    vulkanMemoryModel                                  = false
    vulkanMemoryModelDeviceScope                       = false
    vulkanMemoryModelAvailabilityVisibilityChains      = false
    shaderOutputViewportIndex                          = true
    shaderOutputLayer                                  = true
    subgroupBroadcastDynamicId                         = true

VkPhysicalDeviceVulkanMemoryModelFeatures:
------------------------------------------
    vulkanMemoryModel                             = false
    vulkanMemoryModelDeviceScope                  = false
    vulkanMemoryModelAvailabilityVisibilityChains = false

GPU2:
VkPhysicalDeviceProperties:
---------------------------
    apiVersion        = 4206796 (1.3.204)
    driverVersion     = 92274689 (0x5800001)
    vendorID          = 0x8086
    deviceID          = 0x9bc4
    deviceType        = PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU
    deviceName        = Intel(R) UHD Graphics (CML GT2)
    pipelineCacheUUID = 58d5c7a9-9f12-2ae3-3072-43177933f96c

VkPhysicalDeviceLimits:
-----------------------
    maxImageDimension1D                             = 16384
    maxImageDimension2D                             = 16384
    maxImageDimension3D                             = 2048
    maxImageDimensionCube                           = 16384
    maxImageArrayLayers                             = 2048
    maxTexelBufferElements                          = 134217728
    maxUniformBufferRange                           = 134217728
    maxStorageBufferRange                           = 1073741824
    maxPushConstantsSize                            = 128
    maxMemoryAllocationCount                        = 4294967295
    maxSamplerAllocationCount                       = 65536
    bufferImageGranularity                          = 0x00000040
    sparseAddressSpaceSize                          = 0x00000000
    maxBoundDescriptorSets                          = 8
    maxPerStageDescriptorSamplers                   = 65535
    maxPerStageDescriptorUniformBuffers             = 64
    maxPerStageDescriptorStorageBuffers             = 65535
    maxPerStageDescriptorSampledImages              = 65535
    maxPerStageDescriptorStorageImages              = 65535
    maxPerStageDescriptorInputAttachments           = 64
    maxPerStageResources                            = 4294967295
    maxDescriptorSetSamplers                        = 393210
    maxDescriptorSetUniformBuffers                  = 384
    maxDescriptorSetUniformBuffersDynamic           = 8
    maxDescriptorSetStorageBuffers                  = 393210
    maxDescriptorSetStorageBuffersDynamic           = 8
    maxDescriptorSetSampledImages                   = 393210
    maxDescriptorSetStorageImages                   = 393210
    maxDescriptorSetInputAttachments                = 256
    maxVertexInputAttributes                        = 28
    maxVertexInputBindings                          = 28
    maxVertexInputAttributeOffset                   = 2047
    maxVertexInputBindingStride                     = 2048
    maxVertexOutputComponents                       = 128
    maxTessellationGenerationLevel                  = 64
    maxTessellationPatchSize                        = 32
    maxTessellationControlPerVertexInputComponents  = 128
    maxTessellationControlPerVertexOutputComponents = 128
    maxTessellationControlPerPatchOutputComponents  = 128
    maxTessellationControlTotalOutputComponents     = 2048
    maxTessellationEvaluationInputComponents        = 128
    maxTessellationEvaluationOutputComponents       = 128
    maxGeometryShaderInvocations                    = 32
    maxGeometryInputComponents                      = 128
    maxGeometryOutputComponents                     = 128
    maxGeometryOutputVertices                       = 256
    maxGeometryTotalOutputComponents                = 1024
    maxFragmentInputComponents                      = 116
    maxFragmentOutputAttachments                    = 8
    maxFragmentDualSrcAttachments                   = 1
    maxFragmentCombinedOutputResources              = 131078
    maxComputeSharedMemorySize                      = 65536
    maxComputeWorkGroupCount: count = 3
        65535
        65535
        65535
    maxComputeWorkGroupInvocations                  = 1024
    maxComputeWorkGroupSize: count = 3
        1024
        1024
        1024
    subPixelPrecisionBits                           = 8
    subTexelPrecisionBits                           = 8
    mipmapPrecisionBits                             = 8
    maxDrawIndexedIndexValue                        = 4294967295
    maxDrawIndirectCount                            = 4294967295
    maxSamplerLodBias                               = 16
    maxSamplerAnisotropy                            = 16
    maxViewports                                    = 16
    maxViewportDimensions: count = 2
        16384
        16384
    viewportBoundsRange: count = 2
        -32768
        32767
    viewportSubPixelBits                            = 13
    minMemoryMapAlignment                           = 4096
    minTexelBufferOffsetAlignment                   = 0x00000010
    minUniformBufferOffsetAlignment                 = 0x00000040
    minStorageBufferOffsetAlignment                 = 0x00000004
    minTexelOffset                                  = -8
    maxTexelOffset                                  = 7
    minTexelGatherOffset                            = -32
    maxTexelGatherOffset                            = 31
    minInterpolationOffset                          = -0.5
    maxInterpolationOffset                          = 0.4375
    subPixelInterpolationOffsetBits                 = 4
    maxFramebufferWidth                             = 16384
    maxFramebufferHeight                            = 16384
    maxFramebufferLayers                            = 2048
    framebufferColorSampleCounts: count = 5
        SAMPLE_COUNT_1_BIT
        SAMPLE_COUNT_2_BIT
        SAMPLE_COUNT_4_BIT
        SAMPLE_COUNT_8_BIT
        SAMPLE_COUNT_16_BIT
    framebufferDepthSampleCounts: count = 5
        SAMPLE_COUNT_1_BIT
        SAMPLE_COUNT_2_BIT
        SAMPLE_COUNT_4_BIT
        SAMPLE_COUNT_8_BIT
        SAMPLE_COUNT_16_BIT
    framebufferStencilSampleCounts: count = 5
        SAMPLE_COUNT_1_BIT
        SAMPLE_COUNT_2_BIT
        SAMPLE_COUNT_4_BIT
        SAMPLE_COUNT_8_BIT
        SAMPLE_COUNT_16_BIT
    framebufferNoAttachmentsSampleCounts: count = 5
        SAMPLE_COUNT_1_BIT
        SAMPLE_COUNT_2_BIT
        SAMPLE_COUNT_4_BIT
        SAMPLE_COUNT_8_BIT
        SAMPLE_COUNT_16_BIT
    maxColorAttachments                             = 8
    sampledImageColorSampleCounts: count = 5
        SAMPLE_COUNT_1_BIT
        SAMPLE_COUNT_2_BIT
        SAMPLE_COUNT_4_BIT
        SAMPLE_COUNT_8_BIT
        SAMPLE_COUNT_16_BIT
    sampledImageIntegerSampleCounts: count = 5
        SAMPLE_COUNT_1_BIT
        SAMPLE_COUNT_2_BIT
        SAMPLE_COUNT_4_BIT
        SAMPLE_COUNT_8_BIT
        SAMPLE_COUNT_16_BIT
    sampledImageDepthSampleCounts: count = 5
        SAMPLE_COUNT_1_BIT
        SAMPLE_COUNT_2_BIT
        SAMPLE_COUNT_4_BIT
        SAMPLE_COUNT_8_BIT
        SAMPLE_COUNT_16_BIT
    sampledImageStencilSampleCounts: count = 5
        SAMPLE_COUNT_1_BIT
        SAMPLE_COUNT_2_BIT
        SAMPLE_COUNT_4_BIT
        SAMPLE_COUNT_8_BIT
        SAMPLE_COUNT_16_BIT
    storageImageSampleCounts: count = 1
        SAMPLE_COUNT_1_BIT
    maxSampleMaskWords                              = 1
    timestampComputeAndGraphics                     = true
    timestampPeriod                                 = 83.3333
    maxClipDistances                                = 8
    maxCullDistances                                = 8
    maxCombinedClipAndCullDistances                 = 8
    discreteQueuePriorities                         = 2
    pointSizeRange: count = 2
        0.125
        255.875
    lineWidthRange: count = 2
        0
        7.99219
    pointSizeGranularity                            = 0.125
    lineWidthGranularity                            = 0.0078125
    strictLines                                     = false
    standardSampleLocations                         = true
    optimalBufferCopyOffsetAlignment                = 0x00000080
    optimalBufferCopyRowPitchAlignment              = 0x00000080
    nonCoherentAtomSize                             = 0x00000040

VkPhysicalDeviceSparseProperties:
---------------------------------
    residencyStandard2DBlockShape            = false
    residencyStandard2DMultisampleBlockShape = false
    residencyStandard3DBlockShape            = false
    residencyAlignedMipSize                  = false
    residencyNonResidentStrict               = false

VkPhysicalDeviceConservativeRasterizationPropertiesEXT:
-------------------------------------------------------
    primitiveOverestimationSize                 = 0.00195312
    maxExtraPrimitiveOverestimationSize         = 0
    extraPrimitiveOverestimationSizeGranularity = 0
    primitiveUnderestimation                    = false
    conservativePointAndLineRasterization       = false
    degenerateTrianglesRasterized               = true
    degenerateLinesRasterized                   = false
    fullyCoveredFragmentShaderInputVariable     = false
    conservativeRasterizationPostDepthCoverage  = true

VkPhysicalDeviceCustomBorderColorPropertiesEXT:
-----------------------------------------------
    maxCustomBorderColorSamplers = 4096

VkPhysicalDeviceDepthStencilResolveProperties:
----------------------------------------------
    supportedDepthResolveModes: count = 4
        RESOLVE_MODE_SAMPLE_ZERO_BIT
        RESOLVE_MODE_AVERAGE_BIT
        RESOLVE_MODE_MIN_BIT
        RESOLVE_MODE_MAX_BIT
    supportedStencilResolveModes: count = 3
        RESOLVE_MODE_SAMPLE_ZERO_BIT
        RESOLVE_MODE_MIN_BIT
        RESOLVE_MODE_MAX_BIT
    independentResolveNone = true
    independentResolve     = true

VkPhysicalDeviceDescriptorIndexingProperties:
---------------------------------------------
    maxUpdateAfterBindDescriptorsInAllPools              = 1048576
    shaderUniformBufferArrayNonUniformIndexingNative     = false
    shaderSampledImageArrayNonUniformIndexingNative      = false
    shaderStorageBufferArrayNonUniformIndexingNative     = true
    shaderStorageImageArrayNonUniformIndexingNative      = false
    shaderInputAttachmentArrayNonUniformIndexingNative   = false
    robustBufferAccessUpdateAfterBind                    = true
    quadDivergentImplicitLod                             = false
    maxPerStageDescriptorUpdateAfterBindSamplers         = 1048576
    maxPerStageDescriptorUpdateAfterBindUniformBuffers   = 64
    maxPerStageDescriptorUpdateAfterBindStorageBuffers   = 4294967295
    maxPerStageDescriptorUpdateAfterBindSampledImages    = 1048576
    maxPerStageDescriptorUpdateAfterBindStorageImages    = 1048576
    maxPerStageDescriptorUpdateAfterBindInputAttachments = 64
    maxPerStageUpdateAfterBindResources                  = 4294967295
    maxDescriptorSetUpdateAfterBindSamplers              = 1048576
    maxDescriptorSetUpdateAfterBindUniformBuffers        = 384
    maxDescriptorSetUpdateAfterBindUniformBuffersDynamic = 8
    maxDescriptorSetUpdateAfterBindStorageBuffers        = 4294967295
    maxDescriptorSetUpdateAfterBindStorageBuffersDynamic = 8
    maxDescriptorSetUpdateAfterBindSampledImages         = 1048576
    maxDescriptorSetUpdateAfterBindStorageImages         = 1048576
    maxDescriptorSetUpdateAfterBindInputAttachments      = 256

VkPhysicalDeviceDriverProperties:
---------------------------------
    driverID           = DRIVER_ID_INTEL_OPEN_SOURCE_MESA
    driverName         = Intel open-source Mesa driver
    driverInfo         = Mesa 22.0.1
    conformanceVersion = 1.3.0.0

VkPhysicalDeviceDrmPropertiesEXT:
---------------------------------
    hasPrimary   = true
    hasRender    = true
    primaryMajor = 226
    primaryMinor = 0
    renderMajor  = 226
    renderMinor  = 128

VkPhysicalDeviceExternalMemoryHostPropertiesEXT:
------------------------------------------------
    minImportedHostPointerAlignment = 0x00001000

VkPhysicalDeviceFloatControlsProperties:
----------------------------------------
    denormBehaviorIndependence            = SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL
    roundingModeIndependence              = SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE
    shaderSignedZeroInfNanPreserveFloat16 = true
    shaderSignedZeroInfNanPreserveFloat32 = true
    shaderSignedZeroInfNanPreserveFloat64 = true
    shaderDenormPreserveFloat16           = true
    shaderDenormPreserveFloat32           = true
    shaderDenormPreserveFloat64           = true
    shaderDenormFlushToZeroFloat16        = false
    shaderDenormFlushToZeroFloat32        = true
    shaderDenormFlushToZeroFloat64        = true
    shaderRoundingModeRTEFloat16          = true
    shaderRoundingModeRTEFloat32          = true
    shaderRoundingModeRTEFloat64          = true
    shaderRoundingModeRTZFloat16          = true
    shaderRoundingModeRTZFloat32          = true
    shaderRoundingModeRTZFloat64          = true

VkPhysicalDeviceIDProperties:
-----------------------------
    deviceUUID      = c73f9fa3-4155-7017-bcf7-c1ea0a150037
    driverUUID      = bb70cc00-ba60-000c-0eac-7f82b0118515
    deviceNodeMask  = 0
    deviceLUIDValid = false

VkPhysicalDeviceInlineUniformBlockProperties:
---------------------------------------------
    maxInlineUniformBlockSize                               = 4096
    maxPerStageDescriptorInlineUniformBlocks                = 32
    maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks = 32
    maxDescriptorSetInlineUniformBlocks                     = 32
    maxDescriptorSetUpdateAfterBindInlineUniformBlocks      = 32

VkPhysicalDeviceLineRasterizationPropertiesEXT:
-----------------------------------------------
    lineSubPixelPrecisionBits = 4

VkPhysicalDeviceMaintenance3Properties:
---------------------------------------
    maxPerSetDescriptors    = 1024
    maxMemoryAllocationSize = 0x80000000

VkPhysicalDeviceMaintenance4Properties:
---------------------------------------
    maxBufferSize = 0x40000000

VkPhysicalDeviceMultiDrawPropertiesEXT:
---------------------------------------
    maxMultiDrawCount = 2048

VkPhysicalDeviceMultiviewProperties:
------------------------------------
    maxMultiviewViewCount     = 16
    maxMultiviewInstanceIndex = 268435455

VkPhysicalDevicePCIBusInfoPropertiesEXT:
----------------------------------------
    pciDomain   = 0
    pciBus      = 0
    pciDevice   = 2
    pciFunction = 0

VkPhysicalDevicePointClippingProperties:
----------------------------------------
    pointClippingBehavior = POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY

VkPhysicalDeviceProtectedMemoryProperties:
------------------------------------------
    protectedNoFault = false

VkPhysicalDeviceProvokingVertexPropertiesEXT:
---------------------------------------------
    provokingVertexModePerPipeline                       = true
    transformFeedbackPreservesTriangleFanProvokingVertex = false

VkPhysicalDevicePushDescriptorPropertiesKHR:
--------------------------------------------
    maxPushDescriptors = 32

VkPhysicalDeviceRobustness2PropertiesEXT:
-----------------------------------------
    robustStorageBufferAccessSizeAlignment = 0x00000004
    robustUniformBufferAccessSizeAlignment = 0x00000040

VkPhysicalDeviceSampleLocationsPropertiesEXT:
---------------------------------------------
    sampleLocationSampleCounts: count = 5
        SAMPLE_COUNT_1_BIT
        SAMPLE_COUNT_2_BIT
        SAMPLE_COUNT_4_BIT
        SAMPLE_COUNT_8_BIT
        SAMPLE_COUNT_16_BIT
    maxSampleLocationGridSize:
        width  = 1
        height = 1
    sampleLocationCoordinateRange: count = 2
        0
        0.9375
    sampleLocationSubPixelBits       = 4
    variableSampleLocations          = true

VkPhysicalDeviceSamplerFilterMinmaxProperties:
----------------------------------------------
    filterMinmaxSingleComponentFormats = true
    filterMinmaxImageComponentMapping  = true

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

VkPhysicalDeviceSubgroupProperties:
-----------------------------------
    subgroupSize              = 32
    supportedStages: count = 8
        SHADER_STAGE_VERTEX_BIT
        SHADER_STAGE_TESSELLATION_CONTROL_BIT
        SHADER_STAGE_TESSELLATION_EVALUATION_BIT
        SHADER_STAGE_GEOMETRY_BIT
        SHADER_STAGE_FRAGMENT_BIT
        SHADER_STAGE_COMPUTE_BIT
        SHADER_STAGE_ALL_GRAPHICS
        SHADER_STAGE_ALL
    supportedOperations: count = 8
        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_CLUSTERED_BIT
        SUBGROUP_FEATURE_QUAD_BIT
    quadOperationsInAllStages = true

VkPhysicalDeviceSubgroupSizeControlProperties:
----------------------------------------------
    minSubgroupSize              = 8
    maxSubgroupSize              = 32
    maxComputeWorkgroupSubgroups = 56
    requiredSubgroupSizeStages: count = 2
        SHADER_STAGE_COMPUTE_BIT
        SHADER_STAGE_ALL

VkPhysicalDeviceTexelBufferAlignmentProperties:
-----------------------------------------------
    storageTexelBufferOffsetAlignmentBytes       = 0x00000010
    storageTexelBufferOffsetSingleTexelAlignment = true
    uniformTexelBufferOffsetAlignmentBytes       = 0x00000001
    uniformTexelBufferOffsetSingleTexelAlignment = false

VkPhysicalDeviceTimelineSemaphoreProperties:
--------------------------------------------
    maxTimelineSemaphoreValueDifference = 18446744073709551615

VkPhysicalDeviceTransformFeedbackPropertiesEXT:
-----------------------------------------------
    maxTransformFeedbackStreams                = 4
    maxTransformFeedbackBuffers                = 4
    maxTransformFeedbackBufferSize             = 0x100000000
    maxTransformFeedbackStreamDataSize         = 512
    maxTransformFeedbackBufferDataSize         = 512
    maxTransformFeedbackBufferDataStride       = 2048
    transformFeedbackQueries                   = true
    transformFeedbackStreamsLinesTriangles     = false
    transformFeedbackRasterizationStreamSelect = false
    transformFeedbackDraw                      = true

VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT:
----------------------------------------------------
    maxVertexAttribDivisor = 268435455

VkPhysicalDeviceVulkan11Properties:
-----------------------------------
    deviceUUID                        = c73f9fa3-4155-7017-bcf7-c1ea0a150037
    driverUUID                        = bb70cc00-ba60-000c-0eac-7f82b0118515
    deviceNodeMask                    = 0
    deviceLUIDValid                   = false
    subgroupSize                      = 32
    subgroupSupportedStages: count = 8
        SHADER_STAGE_VERTEX_BIT
        SHADER_STAGE_TESSELLATION_CONTROL_BIT
        SHADER_STAGE_TESSELLATION_EVALUATION_BIT
        SHADER_STAGE_GEOMETRY_BIT
        SHADER_STAGE_FRAGMENT_BIT
        SHADER_STAGE_COMPUTE_BIT
        SHADER_STAGE_ALL_GRAPHICS
        SHADER_STAGE_ALL
    subgroupSupportedOperations: count = 8
        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_CLUSTERED_BIT
        SUBGROUP_FEATURE_QUAD_BIT
    subgroupQuadOperationsInAllStages = true
    pointClippingBehavior             = POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY
    maxMultiviewViewCount             = 16
    maxMultiviewInstanceIndex         = 268435455
    protectedNoFault                  = false
    maxPerSetDescriptors              = 1024
    maxMemoryAllocationSize           = 0x80000000

VkPhysicalDeviceVulkan12Properties:
-----------------------------------
    driverID                                             = DRIVER_ID_INTEL_OPEN_SOURCE_MESA
    driverName                                           = Intel open-source Mesa driver
    driverInfo                                           = Mesa 22.0.1
    conformanceVersion                                   = 1.3.0.0
    denormBehaviorIndependence                           = SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL
    roundingModeIndependence                             = SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE
    shaderSignedZeroInfNanPreserveFloat16                = true
    shaderSignedZeroInfNanPreserveFloat32                = true
    shaderSignedZeroInfNanPreserveFloat64                = true
    shaderDenormPreserveFloat16                          = true
    shaderDenormPreserveFloat32                          = true
    shaderDenormPreserveFloat64                          = true
    shaderDenormFlushToZeroFloat16                       = false
    shaderDenormFlushToZeroFloat32                       = true
    shaderDenormFlushToZeroFloat64                       = true
    shaderRoundingModeRTEFloat16                         = true
    shaderRoundingModeRTEFloat32                         = true
    shaderRoundingModeRTEFloat64                         = true
    shaderRoundingModeRTZFloat16                         = true
    shaderRoundingModeRTZFloat32                         = true
    shaderRoundingModeRTZFloat64                         = true
    maxUpdateAfterBindDescriptorsInAllPools              = 1048576
    shaderUniformBufferArrayNonUniformIndexingNative     = false
    shaderSampledImageArrayNonUniformIndexingNative      = false
    shaderStorageBufferArrayNonUniformIndexingNative     = true
    shaderStorageImageArrayNonUniformIndexingNative      = false
    shaderInputAttachmentArrayNonUniformIndexingNative   = false
    robustBufferAccessUpdateAfterBind                    = true
    quadDivergentImplicitLod                             = false
    maxPerStageDescriptorUpdateAfterBindSamplers         = 1048576
    maxPerStageDescriptorUpdateAfterBindUniformBuffers   = 64
    maxPerStageDescriptorUpdateAfterBindStorageBuffers   = 4294967295
    maxPerStageDescriptorUpdateAfterBindSampledImages    = 1048576
    maxPerStageDescriptorUpdateAfterBindStorageImages    = 1048576
    maxPerStageDescriptorUpdateAfterBindInputAttachments = 64
    maxPerStageUpdateAfterBindResources                  = 4294967295
    maxDescriptorSetUpdateAfterBindSamplers              = 1048576
    maxDescriptorSetUpdateAfterBindUniformBuffers        = 384
    maxDescriptorSetUpdateAfterBindUniformBuffersDynamic = 8
    maxDescriptorSetUpdateAfterBindStorageBuffers        = 4294967295
    maxDescriptorSetUpdateAfterBindStorageBuffersDynamic = 8
    maxDescriptorSetUpdateAfterBindSampledImages         = 1048576
    maxDescriptorSetUpdateAfterBindStorageImages         = 1048576
    maxDescriptorSetUpdateAfterBindInputAttachments      = 256
    supportedDepthResolveModes: count = 4
        RESOLVE_MODE_SAMPLE_ZERO_BIT
        RESOLVE_MODE_AVERAGE_BIT
        RESOLVE_MODE_MIN_BIT
        RESOLVE_MODE_MAX_BIT
    supportedStencilResolveModes: count = 3
        RESOLVE_MODE_SAMPLE_ZERO_BIT
        RESOLVE_MODE_MIN_BIT
        RESOLVE_MODE_MAX_BIT
    independentResolveNone                               = true
    independentResolve                                   = true
    filterMinmaxSingleComponentFormats                   = true
    filterMinmaxImageComponentMapping                    = true
    maxTimelineSemaphoreValueDifference                  = 18446744073709551615
    framebufferIntegerColorSampleCounts: count = 5
        SAMPLE_COUNT_1_BIT
        SAMPLE_COUNT_2_BIT
        SAMPLE_COUNT_4_BIT
        SAMPLE_COUNT_8_BIT
        SAMPLE_COUNT_16_BIT

VkPhysicalDeviceVulkan13Properties:
-----------------------------------
    minSubgroupSize                                                               = 8
    maxSubgroupSize                                                               = 32
    maxComputeWorkgroupSubgroups                                                  = 56
    requiredSubgroupSizeStages: count = 2
        SHADER_STAGE_COMPUTE_BIT
        SHADER_STAGE_ALL
    maxInlineUniformBlockSize                                                     = 4096
    maxPerStageDescriptorInlineUniformBlocks                                      = 32
    maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks                       = 32
    maxDescriptorSetInlineUniformBlocks                                           = 32
    maxDescriptorSetUpdateAfterBindInlineUniformBlocks                            = 32
    maxInlineUniformTotalSize                                                     = 65535
    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                                        = 0x00000001
    uniformTexelBufferOffsetSingleTexelAlignment                                  = false
    maxBufferSize                                                                 = 0x40000000

Device Extensions: count = 114
    VK_EXT_4444_formats                         : extension revision 1
    VK_EXT_buffer_device_address                : extension revision 2
    VK_EXT_calibrated_timestamps                : extension revision 2
    VK_EXT_color_write_enable                   : extension revision 1
    VK_EXT_conditional_rendering                : extension revision 2
    VK_EXT_conservative_rasterization           : extension revision 1
    VK_EXT_custom_border_color                  : extension revision 12
    VK_EXT_depth_clip_enable                    : extension revision 1
    VK_EXT_descriptor_indexing                  : extension revision 2
    VK_EXT_display_control                      : extension revision 1
    VK_EXT_extended_dynamic_state               : extension revision 1
    VK_EXT_extended_dynamic_state2              : extension revision 1
    VK_EXT_external_memory_dma_buf              : extension revision 1
    VK_EXT_external_memory_host                 : extension revision 1
    VK_EXT_fragment_shader_interlock            : extension revision 1
    VK_EXT_global_priority                      : extension revision 2
    VK_EXT_global_priority_query                : extension revision 1
    VK_EXT_host_query_reset                     : extension revision 1
    VK_EXT_image_drm_format_modifier            : extension revision 2
    VK_EXT_image_robustness                     : 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_memory_budget                        : extension revision 1
    VK_EXT_multi_draw                           : extension revision 1
    VK_EXT_pci_bus_info                         : extension revision 2
    VK_EXT_physical_device_drm                  : 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_private_data                         : extension revision 1
    VK_EXT_provoking_vertex                     : extension revision 1
    VK_EXT_queue_family_foreign                 : extension revision 1
    VK_EXT_robustness2                          : extension revision 1
    VK_EXT_sample_locations                     : 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_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_ycbcr_image_arrays                   : extension revision 1
    VK_GOOGLE_decorate_string                   : extension revision 1
    VK_GOOGLE_hlsl_functionality1               : extension revision 1
    VK_GOOGLE_user_type                         : extension revision 1
    VK_INTEL_shader_integer_functions2          : 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_deferred_host_operations             : extension revision 4
    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_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 1
    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_multiview                            : extension revision 1
    VK_KHR_pipeline_executable_properties       : 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_subgroup_uniform_control_flow : 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_workgroup_memory_explicit_layout     : extension revision 1
    VK_KHR_zero_initialize_workgroup_memory     : extension revision 1
    VK_NV_compute_shader_derivatives            : extension revision 1
    VK_VALVE_mutable_descriptor_type            : extension revision 1

VkQueueFamilyProperties:
========================
    queueProperties[0]:
    -------------------
        minImageTransferGranularity = (1,1,1)
        queueCount                  = 1
        queueFlags                  = QUEUE_GRAPHICS | QUEUE_COMPUTE | QUEUE_TRANSFER
        timestampValidBits          = 36
        present support             = false
        VkQueueFamilyGlobalPriorityPropertiesKHR:
        -----------------------------------------
            priorityCount  = 2
            priorities: count = 16
                128
                256
                0
                0
                0
                0
                0
                0
                0
                0
                0
                0
                0
                0
                0
                0

VkPhysicalDeviceMemoryProperties:
=================================
memoryHeaps: count = 1
    memoryHeaps[0]:
        size   = 50288179200 (0xbb568b800) (46.83 GiB)
        budget = 45258637312 (0xa89a00000) (42.15 GiB)
        usage  = 0 (0x00000000) (0.00 B)
        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                  = true
    textureCompressionASTC_LDR              = true
    textureCompressionBC                    = true
    occlusionQueryPrecise                   = true
    pipelineStatisticsQuery                 = true
    vertexPipelineStoresAndAtomics          = true
    fragmentStoresAndAtomics                = true
    shaderTessellationAndGeometryPointSize  = true
    shaderImageGatherExtended               = true
    shaderStorageImageExtendedFormats       = true
    shaderStorageImageMultisample           = false
    shaderStorageImageReadWithoutFormat     = false
    shaderStorageImageWriteWithoutFormat    = true
    shaderUniformBufferArrayDynamicIndexing = true
    shaderSampledImageArrayDynamicIndexing  = true
    shaderStorageBufferArrayDynamicIndexing = true
    shaderStorageImageArrayDynamicIndexing  = true
    shaderClipDistance                      = true
    shaderCullDistance                      = true
    shaderFloat64                           = true
    shaderInt64                             = true
    shaderInt16                             = true
    shaderResourceResidency                 = false
    shaderResourceMinLod                    = true
    sparseBinding                           = false
    sparseResidencyBuffer                   = false
    sparseResidencyImage2D                  = false
    sparseResidencyImage3D                  = false
    sparseResidency2Samples                 = false
    sparseResidency4Samples                 = false
    sparseResidency8Samples                 = false
    sparseResidency16Samples                = false
    sparseResidencyAliased                  = false
    variableMultisampleRate                 = true
    inheritedQueries                        = true

VkPhysicalDevice16BitStorageFeatures:
-------------------------------------
    storageBuffer16BitAccess           = true
    uniformAndStorageBuffer16BitAccess = true
    storagePushConstant16              = true
    storageInputOutput16               = false

VkPhysicalDevice4444FormatsFeaturesEXT:
---------------------------------------
    formatA4R4G4B4 = true
    formatA4B4G4R4 = false

VkPhysicalDevice8BitStorageFeatures:
------------------------------------
    storageBuffer8BitAccess           = true
    uniformAndStorageBuffer8BitAccess = true
    storagePushConstant8              = true

VkPhysicalDeviceBufferDeviceAddressFeatures:
--------------------------------------------
    bufferDeviceAddress              = true
    bufferDeviceAddressCaptureReplay = true
    bufferDeviceAddressMultiDevice   = false

VkPhysicalDeviceBufferDeviceAddressFeaturesEXT:
-----------------------------------------------
    bufferDeviceAddress              = true
    bufferDeviceAddressCaptureReplay = false
    bufferDeviceAddressMultiDevice   = false

VkPhysicalDeviceColorWriteEnableFeaturesEXT:
--------------------------------------------
    colorWriteEnable = true

VkPhysicalDeviceConditionalRenderingFeaturesEXT:
------------------------------------------------
    conditionalRendering          = true
    inheritedConditionalRendering = true

VkPhysicalDeviceCustomBorderColorFeaturesEXT:
---------------------------------------------
    customBorderColors             = true
    customBorderColorWithoutFormat = true

VkPhysicalDeviceDepthClipEnableFeaturesEXT:
-------------------------------------------
    depthClipEnable = true

VkPhysicalDeviceDescriptorIndexingFeatures:
-------------------------------------------
    shaderInputAttachmentArrayDynamicIndexing          = false
    shaderUniformTexelBufferArrayDynamicIndexing       = true
    shaderStorageTexelBufferArrayDynamicIndexing       = true
    shaderUniformBufferArrayNonUniformIndexing         = true
    shaderSampledImageArrayNonUniformIndexing          = true
    shaderStorageBufferArrayNonUniformIndexing         = true
    shaderStorageImageArrayNonUniformIndexing          = true
    shaderInputAttachmentArrayNonUniformIndexing       = false
    shaderUniformTexelBufferArrayNonUniformIndexing    = true
    shaderStorageTexelBufferArrayNonUniformIndexing    = true
    descriptorBindingUniformBufferUpdateAfterBind      = true
    descriptorBindingSampledImageUpdateAfterBind       = true
    descriptorBindingStorageImageUpdateAfterBind       = true
    descriptorBindingStorageBufferUpdateAfterBind      = true
    descriptorBindingUniformTexelBufferUpdateAfterBind = true
    descriptorBindingStorageTexelBufferUpdateAfterBind = true
    descriptorBindingUpdateUnusedWhilePending          = true
    descriptorBindingPartiallyBound                    = true
    descriptorBindingVariableDescriptorCount           = true
    runtimeDescriptorArray                             = true

VkPhysicalDeviceDynamicRenderingFeatures:
-----------------------------------------
    dynamicRendering = true

VkPhysicalDeviceExtendedDynamicState2FeaturesEXT:
-------------------------------------------------
    extendedDynamicState2                   = true
    extendedDynamicState2LogicOp            = true
    extendedDynamicState2PatchControlPoints = false

VkPhysicalDeviceExtendedDynamicStateFeaturesEXT:
------------------------------------------------
    extendedDynamicState = true

VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT:
---------------------------------------------------
    fragmentShaderSampleInterlock      = true
    fragmentShaderPixelInterlock       = true
    fragmentShaderShadingRateInterlock = false

VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR:
-----------------------------------------------
    globalPriorityQuery = true

VkPhysicalDeviceHostQueryResetFeatures:
---------------------------------------
    hostQueryReset = true

VkPhysicalDeviceImageRobustnessFeatures:
----------------------------------------
    robustImageAccess = true

VkPhysicalDeviceImagelessFramebufferFeatures:
---------------------------------------------
    imagelessFramebuffer = true

VkPhysicalDeviceIndexTypeUint8FeaturesEXT:
------------------------------------------
    indexTypeUint8 = true

VkPhysicalDeviceInlineUniformBlockFeatures:
-------------------------------------------
    inlineUniformBlock                                 = true
    descriptorBindingInlineUniformBlockUpdateAfterBind = true

VkPhysicalDeviceLineRasterizationFeaturesEXT:
---------------------------------------------
    rectangularLines         = true
    bresenhamLines           = true
    smoothLines              = true
    stippledRectangularLines = false
    stippledBresenhamLines   = true
    stippledSmoothLines      = false

VkPhysicalDeviceMaintenance4Features:
-------------------------------------
    maintenance4 = true

VkPhysicalDeviceMultiDrawFeaturesEXT:
-------------------------------------
    multiDraw = true

VkPhysicalDeviceMultiviewFeatures:
----------------------------------
    multiview                   = true
    multiviewGeometryShader     = true
    multiviewTessellationShader = true

VkPhysicalDevicePipelineCreationCacheControlFeatures:
-----------------------------------------------------
    pipelineCreationCacheControl = true

VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR:
--------------------------------------------------------
    pipelineExecutableInfo = true

VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT:
--------------------------------------------------------
    primitiveTopologyListRestart      = true
    primitiveTopologyPatchListRestart = true

VkPhysicalDevicePrivateDataFeatures:
------------------------------------
    privateData = true

VkPhysicalDeviceProtectedMemoryFeatures:
----------------------------------------
    protectedMemory = false

VkPhysicalDeviceProvokingVertexFeaturesEXT:
-------------------------------------------
    provokingVertexLast                       = true
    transformFeedbackPreservesProvokingVertex = true

VkPhysicalDeviceRobustness2FeaturesEXT:
---------------------------------------
    robustBufferAccess2 = true
    robustImageAccess2  = true
    nullDescriptor      = true

VkPhysicalDeviceSamplerYcbcrConversionFeatures:
-----------------------------------------------
    samplerYcbcrConversion = true

VkPhysicalDeviceScalarBlockLayoutFeatures:
------------------------------------------
    scalarBlockLayout = true

VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures:
----------------------------------------------------
    separateDepthStencilLayouts = true

VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT:
----------------------------------------------
    shaderBufferFloat16Atomics      = false
    shaderBufferFloat16AtomicAdd    = false
    shaderBufferFloat16AtomicMinMax = false
    shaderBufferFloat32AtomicMinMax = true
    shaderBufferFloat64AtomicMinMax = false
    shaderSharedFloat16Atomics      = false
    shaderSharedFloat16AtomicAdd    = false
    shaderSharedFloat16AtomicMinMax = false
    shaderSharedFloat32AtomicMinMax = true
    shaderSharedFloat64AtomicMinMax = false
    shaderImageFloat32AtomicMinMax  = false
    sparseImageFloat32AtomicMinMax  = false

VkPhysicalDeviceShaderAtomicFloatFeaturesEXT:
---------------------------------------------
    shaderBufferFloat32Atomics   = true
    shaderBufferFloat32AtomicAdd = false
    shaderBufferFloat64Atomics   = false
    shaderBufferFloat64AtomicAdd = false
    shaderSharedFloat32Atomics   = true
    shaderSharedFloat32AtomicAdd = false
    shaderSharedFloat64Atomics   = false
    shaderSharedFloat64AtomicAdd = false
    shaderImageFloat32Atomics    = true
    shaderImageFloat32AtomicAdd  = false
    sparseImageFloat32Atomics    = false
    sparseImageFloat32AtomicAdd  = false

VkPhysicalDeviceShaderAtomicInt64Features:
------------------------------------------
    shaderBufferInt64Atomics = true
    shaderSharedInt64Atomics = false

VkPhysicalDeviceShaderClockFeaturesKHR:
---------------------------------------
    shaderSubgroupClock = true
    shaderDeviceClock   = false

VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures:
-------------------------------------------------------
    shaderDemoteToHelperInvocation = true

VkPhysicalDeviceShaderDrawParametersFeatures:
---------------------------------------------
    shaderDrawParameters = true

VkPhysicalDeviceShaderFloat16Int8Features:
------------------------------------------
    shaderFloat16 = true
    shaderInt8    = true

VkPhysicalDeviceShaderIntegerDotProductFeatures:
------------------------------------------------
    shaderIntegerDotProduct = true

VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures:
----------------------------------------------------
    shaderSubgroupExtendedTypes = true

VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR:
------------------------------------------------------------
    shaderSubgroupUniformControlFlow = true

VkPhysicalDeviceShaderTerminateInvocationFeatures:
--------------------------------------------------
    shaderTerminateInvocation = true

VkPhysicalDeviceSubgroupSizeControlFeatures:
--------------------------------------------
    subgroupSizeControl  = true
    computeFullSubgroups = true

VkPhysicalDeviceSynchronization2Features:
-----------------------------------------
    synchronization2 = true

VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT:
------------------------------------------------
    texelBufferAlignment = true

VkPhysicalDeviceTextureCompressionASTCHDRFeatures:
--------------------------------------------------
    textureCompressionASTC_HDR = false

VkPhysicalDeviceTimelineSemaphoreFeatures:
------------------------------------------
    timelineSemaphore = true

VkPhysicalDeviceTransformFeedbackFeaturesEXT:
---------------------------------------------
    transformFeedback = true
    geometryStreams   = true

VkPhysicalDeviceUniformBufferStandardLayoutFeatures:
----------------------------------------------------
    uniformBufferStandardLayout = true

VkPhysicalDeviceVariablePointersFeatures:
-----------------------------------------
    variablePointersStorageBuffer = true
    variablePointers              = true

VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT:
--------------------------------------------------
    vertexAttributeInstanceRateDivisor     = true
    vertexAttributeInstanceRateZeroDivisor = 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                           = false
    shaderFloat16                                      = true
    shaderInt8                                         = true
    descriptorIndexing                                 = true
    shaderInputAttachmentArrayDynamicIndexing          = false
    shaderUniformTexelBufferArrayDynamicIndexing       = true
    shaderStorageTexelBufferArrayDynamicIndexing       = true
    shaderUniformBufferArrayNonUniformIndexing         = true
    shaderSampledImageArrayNonUniformIndexing          = true
    shaderStorageBufferArrayNonUniformIndexing         = true
    shaderStorageImageArrayNonUniformIndexing          = true
    shaderInputAttachmentArrayNonUniformIndexing       = false
    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                   = true
    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

VkPhysicalDeviceVulkanMemoryModelFeatures:
------------------------------------------
    vulkanMemoryModel                             = true
    vulkanMemoryModelDeviceScope                  = true
    vulkanMemoryModelAvailabilityVisibilityChains = true

VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR:
---------------------------------------------------------
    workgroupMemoryExplicitLayout                  = true
    workgroupMemoryExplicitLayoutScalarBlockLayout = true
    workgroupMemoryExplicitLayout8BitAccess        = true
    workgroupMemoryExplicitLayout16BitAccess       = true

VkPhysicalDeviceYcbcrImageArraysFeaturesEXT:
--------------------------------------------
    ycbcrImageArrays = true

VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures:
------------------------------------------------------
    shaderZeroInitializeWorkgroupMemory = true

Sorry for the long screen output...; however, in the end what I get after executing singularity run --nv gfaestus_v0.1.0.sif /opt/gfaestus/target/release/gfaestus ../pangenome/pangenome_ref_guided_pggb.gfa ../pangenome/pangenome_ref_guided_pggb.og.lay.tsv is always this:

WARN [gfaestus::vulkan::init] enumerating instance extension properties WARN [gfaestus::vulkan::init] "VK_EXT_debug_report" WARN [gfaestus::vulkan::init] "VK_EXT_debug_utils" WARN [gfaestus::vulkan::init] "VK_KHR_portability_enumeration" INFO [winit::platform_impl::platform::x11::window] Guessed window scale factor: 2 ERROR [gfaestus] Error initializing Gfaestus ERROR [gfaestus] VkError(ERROR_INCOMPATIBLE_DRIVER)

I don't really know what is preventing gfaestus to work properly... waiting on some feedback! Thanks again.

chfi commented 2 years ago

Try forcing the use of other graphics by running gfaestus with the --force-graphics-device "DEVICENAME" option, where DEVICENAME is "Quadro RTX 4000", and then try with "Intel(R) UHD Graphics (CML GT2)". Also use the --debug flag.

If none of the devices work, it's probably a gfaestus bug.

Overcraft90 commented 2 years ago

Hi @chfi,

And thanks a lot for the prompt reply! Unfortunately, despite using the --force-graphics-device flag for both GPU, it didn't work... However, I believe the --debug flag returned a more detailed output. Details as follow:

Quadro RTX 4000

DEBUG [gfaestus] using ../pangenome/pangenome_ref_guided_pggb.gfa and ../pangenome/pangenome_ref_guided_pggb.og.lay.tsv
DEBUG [gfaestus::vulkan] Initializing GfaestusVk context
WARN [gfaestus::vulkan::init] enumerating instance extension properties
WARN [gfaestus::vulkan::init] "VK_EXT_debug_report"
WARN [gfaestus::vulkan::init] "VK_EXT_debug_utils"
WARN [gfaestus::vulkan::init] "VK_KHR_portability_enumeration"
DEBUG [gfaestus::vulkan] Using X11 event loop
DEBUG [gfaestus::vulkan] Creating window
INFO [winit::platform_impl::platform::x11::window] Guessed window scale factor: 2
DEBUG [winit::platform_impl::platform::x11::window] Calculated physical dimensions: 800x600
DEBUG [gfaestus::vulkan] Created Vulkan entry
DEBUG [gfaestus::vulkan::init] Creating instance
DEBUG [gfaestus::vulkan::init] Enumerated required instance extensions
DEBUG [gfaestus::vulkan::init] getting layer names and pointers
DEBUG [gfaestus::vulkan::init] Loading instance extension "VK_KHR_surface"
DEBUG [gfaestus::vulkan::init] Loading instance extension "VK_KHR_xlib_surface"
DEBUG [gfaestus::vulkan::init] Loading instance extension "VK_KHR_get_physical_device_properties2"
ERROR [gfaestus] Error initializing Gfaestus
ERROR [gfaestus] VkError(ERROR_INCOMPATIBLE_DRIVER)

Intel(R) UHD Graphics (CML GT2)

DEBUG [gfaestus] using ../pangenome/pangenome_ref_guided_pggb.gfa and ../pangenome/pangenome_ref_guided_pggb.og.lay.tsv
DEBUG [gfaestus::vulkan] Initializing GfaestusVk context
WARN [gfaestus::vulkan::init] enumerating instance extension properties
WARN [gfaestus::vulkan::init] "VK_EXT_debug_report"
WARN [gfaestus::vulkan::init] "VK_EXT_debug_utils"
WARN [gfaestus::vulkan::init] "VK_KHR_portability_enumeration"
DEBUG [gfaestus::vulkan] Using X11 event loop
DEBUG [gfaestus::vulkan] Creating window
INFO [winit::platform_impl::platform::x11::window] Guessed window scale factor: 2
DEBUG [winit::platform_impl::platform::x11::window] Calculated physical dimensions: 800x600
DEBUG [gfaestus::vulkan] Created Vulkan entry
DEBUG [gfaestus::vulkan::init] Creating instance
DEBUG [gfaestus::vulkan::init] Enumerated required instance extensions
DEBUG [gfaestus::vulkan::init] getting layer names and pointers
DEBUG [gfaestus::vulkan::init] Loading instance extension "VK_KHR_surface"
DEBUG [gfaestus::vulkan::init] Loading instance extension "VK_KHR_xlib_surface"
DEBUG [gfaestus::vulkan::init] Loading instance extension "VK_KHR_get_physical_device_properties2"
ERROR [gfaestus] Error initializing Gfaestus
ERROR [gfaestus] VkError(ERROR_INCOMPATIBLE_DRIVER)

I just realised the outputs are identical... anyway, it would be great to have the tool to work the demo on YouTube looks amazing!

chfi commented 2 years ago

Actually, it looks like gfaestus doesn't even know about the vulkan drivers, despite vulkaninfo working... This is the best I can find: https://askubuntu.com/questions/774131/installing-nvidia-vulkan-drivers-for-16-04/803110#803110

Overcraft90 commented 2 years ago

Thanks @chfi,

I had the gut feeling it might have been something related to that based on the first output for the tool... I went through a lot of issues to set up the environment for using a scaffolding application taking advantage of GPU acceleration and this is my nvidia-smi config:

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 510.73.05    Driver Version: 510.73.05    CUDA Version: 11.6     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  Quadro RTX 4000     Off  | 00000000:01:00.0  On |                  N/A |
| N/A   59C    P0    41W /  N/A |    949MiB /  8192MiB |      3%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|    0   N/A  N/A     13705      G   /usr/lib/xorg/Xorg                508MiB |
|    0   N/A  N/A     17475      G   /usr/bin/gnome-shell              170MiB |
|    0   N/A  N/A     18982      G   ...RendererForSitePerProcess       43MiB |
|    0   N/A  N/A     19082      G   ...veSuggestionsOnlyOnDemand      126MiB |
|    0   N/A  N/A     26390      G   ...507633976715190391,131072       97MiB |
+-----------------------------------------------------------------------------+

I'm running a 510.73.05 which seems to be not easily recognised by Vulkan; in fact, at the following link https://developer.nvidia.com/vulkan-driver it is not even listed. The first thing I can think about is to update to the latest supported driver by Vulkan e.g. 515.48.07, the problem is that I really don't want to mess up too much with GPU drivers as I crashed my previous system doing so. I might resort to the NVIDIA User Forum and ask to help on how to do it so that I don't screw up the machine, but any help is welcome.

What makes things difficult is that it is not possible to update the NVIDIA drivers from the Software & Updates in Ubuntu, the latest one shown is the 510, which I'm using.

If someone has some ideas, please let me know. Thanks in advance.

Overcraft90 commented 2 years ago

Hi again,

I double-checked with the guys of the NVIDIA User Forum and I think even with my driver Vulkan should start no problem. In addition, I just realised my driver was actually listed in the compatible ones with the tool.

So, I might think there is something weird going on for Vulkan not being able to recognise the driver. If anything comes up, please let me know I would be happy to test and use this tool. For now, I think we can close the issue.

chfi commented 2 years ago

Yes, according to vulkaninfo both the Nvidia and Intel chips should be compatible with gfaestus, so I think the problem is that the Vulkan loader can't find the drivers, which is an environment issue. The docs for the loader may help: https://github.com/KhronosGroup/Vulkan-Loader

Does vkcube work? I also have another project, waragraph, which uses some more up-to-date libraries and makes more correct use of the Vulkan API, and should be more widely compatible.

Overcraft90 commented 2 years ago

Thanks @chfi, I will have a look at the doc. In te meantime, I updated the NVIDIA drivers and I will test it again.

About vcube it works perfectly, which makes things even stranger..., I will also have a look into waragraph.

Let me know whether there is something else I can do. Thanks in advance!

ekg commented 2 years ago

It will be very helpful to know if waragraph works! Please let us know.

On Tue, Jul 12, 2022, 18:03 Matteo @.***> wrote:

Thanks @chfi https://github.com/chfi, I will have a look at the doc. In te meantime, I updated the NVIDIA drivers and I will test it again.

About vcube it works perfectly, which makes things even stranger..., I will also have a look into waragraph.

Let me know whether there is something else I can do. Thanks in advance!

— Reply to this email directly, view it on GitHub https://github.com/chfi/gfaestus/issues/10#issuecomment-1181952739, or unsubscribe https://github.com/notifications/unsubscribe-auth/AABDQEOEMIQTPZ53B5ZPWTDVTWJOTANCNFSM5ZIW4FBQ . You are receiving this because you commented.Message ID: @.***>

Overcraft90 commented 2 years ago

@ekg Sure thing, I will! BTW, I run again the same command

singularity run --nv gfaestus_v0.1.0.sif /opt/gfaestus/target/release/gfaestus ../pangenome/pangenome_ref_guided_pggb.gfa ../pangenome/pangenome_ref_guided_pggb.og.lay.tsv

and I got exactly the same output..., I event tried the trick @AndreaGuarracino suggested me export VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/nvidia_icd.json but the result is still the same.

Thanks again to all of you!

Overcraft90 commented 2 years ago

Hi again,

I'm happy to see there is a new version with cargo. This time I've been able to install it, since I'm visualizing the entire graph the output takes several minutes, and on a greater scale it looks a bit "coarse" (not easy to see specific/interesting regions); however, the tool works just fine.

I'm planning on trying also waragraph, what is the main difference between the two? In other words why should I prefer/use one over the other or in what particular scenarios? Thanks again to both @chfi & @ekg for this new cool implementation!

Overcraft90 commented 1 year ago

Hi @ekg, @chfi and @AndreaGuarracino,

I will be attending the MemPanG23 one of the requirement was to install gfaestus. I must say now that finally Vulkan decided to support Ubuntu 22.04 things are much easier on that side; however, when installing the tool at first it prompts an error related to

note: /usr/bin/ld: cannot find -lxcb-shape: No such file or directory /usr/bin/ld: cannot find -lxcb-xfixes: No such file or directory collect2: error: ld returned 1 exit status

warning: gfaestus (bin "gfaestus") generated 13 warnings error: could not compile gfaestus due to previous error; 13 warnings emitted

which can be fixed with the following. Now, as I believe this could be the issue for other users, but could also help form the development side, I post here and close this old topic. After following the steps at the link above everything worked just fine.

ekg commented 1 year ago

Did you apt install libxcb-shape0-dev?

Overcraft90 commented 1 year ago

Yes, I did but I believed it was something that should have been done during the build; in fact, there is not specific mention to it in the GitHub page...