GithubHelp home page GithubHelp logo

nadrin / quartz Goto Github PK

View Code? Open in Web Editor NEW
429.0 32.0 24.0 1.75 MB

Vulkan RTX path tracer with a declarative ES7-like scene description language.

License: GNU Lesser General Public License v3.0

CMake 2.74% C++ 90.58% C 0.27% GLSL 5.98% Python 0.44%
raytracing path-tracing rtx qt qt3d physically-based-rendering vulkan graphics pbr qml

quartz's Introduction

Quartz

© 2018 - 2019 Michał Siejak (@Nadrin)

A physically based GPU path tracing renderer with a declarative scene description language based on ES7.

Powered by Qt 3D, NVIDIA RTX & Vulkan.

Images rendered by Quartz

Current release

Overview

Quartz consists of several components:

  • At its core is a raytracing aspect for Qt 3D implemented by the Qt3DRaytrace module. It provides both C++ and QML APIs for use in Qt 3D based applications and is a drop-in replacement for Qt3DRender (rasterization-based rendering aspect). While not (yet) on par with Qt3DRender feature set, many Qt3DRaytrace types are named the same and provide similar functionality, thus making the two aspects somewhat analogous.
  • A standalone renderer application that can load and render arbitrary scenes in Qt 3D QML format. It provides live, progressive preview and can save to many LDR and HDR image formats.
  • An "extras" module (Qt3DRaytraceExtras) providing a set of prebuilt elements and various auxiliary utilities.
  • A command-line tool for assisting in conversion of complex 3D scenes to QML-defined hierarchies (scene2qml).

Features

This project is still a work in progress. Items without a check mark are planned but not yet implemented at this time.

  • Unidirectional path tracing
  • Multiple importance sampling (MIS)
  • Next event estimation
  • Russian Roulette path termination
  • Physically based BRDF with metalness workflow (based on Unreal Engine 4 material model)
  • Triangle mesh geometry
  • Texture mapping (albedo, roughness & metalness maps)
  • Instancing
  • Distant (directional) lights
  • Area lights (emissive triangle meshes)
  • IBL environment probes
  • Thin lens model with depth of field
  • Reinhard tone-mapping operator
  • Interactive camera controller
  • Wavefront based rendering architecture
  • Normal mapping
  • Texture LOD selection via ray differentials
  • Transmission (non-opaque BSDF)
  • Stratified and low-discrepancy sampling
  • Denoising
  • Importance sampling of IBL probes
  • Gaussian reconstruction filter
  • Bloom

System requirements

Quartz requires a NVIDIA GPU with support for the following Vulkan extensions:

  • VK_KHR_swapchain
  • VK_NV_ray_tracing
  • VK_EXT_descriptor_indexing

Usage

To use the standalone renderer run Quartz.exe (or ./quartz, on Linux) and select a QML scene file in the open file dialog. Alternatively you can use the command line:

Quartz.exe [-x <viewport_width>] [-y <viewport_height>] [path_to_qml_file]

If the opened QML file contains an instance of FirstPersonCameraController the camera can be controlled interactively. Press and hold either left or right mouse button and drag the mouse around to rotate the view. Use the usual W, S, A, and D for movement. Q and E move up and down respectively.

Press F2 to save an output image file. Saving to HDR (Radiance) format writes a raw floating-point image in linear space. Saving to any other format writes a tone-mapped, gamma corrected image.

QML scene description language

QML is a declarative language based on ES7, used by Qt 3D (and thus Quartz) to describe scene hierarchy and all required resources like textures and triangle meshes.

Each QML file consists of a root Entity and any number of child nodes, which themselves can also contain child nodes (thus forming a DAG). In most cases a Node is either an Entity or a Component. Entities can contain a number of components (but no more than one component of each type). Examples of components include: Transform, Material, and Mesh.

Every node type exposes some number of properties. A property can be bound to a simple value like 42, a node instance, or to an arbitrary JavaScript expression. The id property is special and uniquely identifies an instance of a node.

Qt 3D & QML documentation:

"Hello, World" in Quartz QML

Proper documentation of Quartz QML types is still in the oven. In the meantime here's a simple QML scene to serve as an example:

import QtQuick 2.0
import Qt3D.Core 2.0
import Qt3D.Raytrace 1.0

Entity {
    id: root
    components: [
        RenderSettings {
            camera: camera
            skyColor: "#00C5FF"
            skyIntensity: 1
        }
    ]
    Camera {
        id: camera
        position: Qt.vector3d(0, 0, 2.6)
        exposure: 1.0
        fieldOfView: 60
    }
    Entity {
        Transform {
            id: sunTransform
            rotationX: 60
            rotationY: -15
            rotationZ: 35
        }
        DistantLight {
            id: sunLight
            color: Qt3DRaytrace.lrgba(1.0, 0.9, 0.8)
            intensity: 5
        }
        components: [ sunTransform, sunLight ]
    }
    Entity {
        Transform {
            id: monkeyTransform
            translation: Qt.vector3d(-0.1, 0, 0)
            rotationY: -30
        }
        Material {
            id: monkeyMaterial
            albedo: "crimson"
            roughness: 0.5
        }
        Mesh {
            id: monkeyMesh
            source: "monkey.obj"
        }
        components: [ monkeyTransform, monkeyMaterial, monkeyMesh ]
    }
}

Image rendered with the above QML code

Note on colors

Since Qt has no notion of color spaces, all color values are assumed to be in sRGB by default. To specify linear color use the Qt3DRaytrace.lrgba() function.

For symmetry there's also Qt3DRaytrace.srgba() which is equivalent to Qt.rgba().

Loading 3D models

Quartz uses Assimp for importing 3D models and thus supports many common file formats, including: Wavefront (OBJ), Autodesk FBX, Collada (DAE), glTF, and others.

Note that Mesh component treats its source file as if containing a single 3D object. Multiple objects are pre-transformed and joined into one during import.

To work with complex 3D scenes use the scene2qml tool. It converts an input scene file into QML-defined Entity hierarchy and extracts individual meshes, and textures into separate files. The resulting QML file can then be imported by using the EntityLoader node.

Conversion quality depends on the input file format and complexity of a particular scene. The resulting QML file can be further edited by hand to supplement certain information, like some Material attributes.

Building

Prerequisites

Environment setup

Variable Description Example value
QTDIR Path to Qt 5.12 headers & libraries C:\Qt\5.12.0\msvc2017_64
VULKAN_SDK Path to Khronos Vulkan SDK (Windows only) C:\VulkanSDK\1.1.97.0
ASSIMP_ROOT_DIR Path to Assimp SDK (Windows only) C:\Program Files\Assimp

Steps to build

  1. Compile GLSL shaders to SPIR-V by running: src\raytrace\renderers\vulkan\shaders\compile.py.
  2. Configure & build the project using the top level CMakeLists.txt file.

Note for Linux: Make sure that the version of Qt being used ships with Vulkan support enabled at compile time. Official Qt binaries for Linux support Vulkan since version 5.13.

Running development builds

Before you run anything make sure that QML2_IMPORT_PATH is configured to look for Quartz QML plugin binaries.

On Windows, also make sure that respective directories containing Qt53DRaytrace.dll and Qt53DRaytraceExtras.dll are both in PATH.

Project structure

Path Description
/3rdparty Third party libraries
/apps/quartz Standalone renderer application
/apps/scene2qml 3D scene to QML conversion tool
/cmake Local CMake modules
/doc Documentation (WIP)
/examples/assets Assets used by example projects
/examples/raytrace-cpp C++ API usage example
/examples/raytrace-qml QML API usage example
/include Public C++ API include files
/src/extras Extras library (Qt3DRaytraceExtras)
/src/qml QML plugins
/src/raytrace Raytracing aspect library (Qt3DRaytrace)
/src/raytrace/renderers/vulkan Raytracing aspect Vulkan renderer

Third party libraries

This project makes use of the following open source libraries:

quartz's People

Contributors

nadrin avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

quartz's Issues

Vulkan SDK minimum version not specified

While trying to build, I failed on the shader compilation step because my version of glslangValidator didn't know what to do with *.rchit.glsl shader files. This was SDK version 1.1.82. Updating to 1.1.101 fixed it, but you might wish to specify a version of the SDK in your readme that understands raytracing shaders.

Black screen when load the examples

when launch any example in quartz_scenes.zip, i get black screen in the quartz window

Screenshot_20190811_170850

environment:

Archlinux
Qt 5.13.0
Nvidia RTX2060
Nvidia vulkan drivers 418.52.16

Vulkaninfo:
└───╼  vulkaninfo
==========
VULKANINFO
==========

Vulkan Instance Version: 1.1.114





Instance Extensions:
====================
Instance Extensions     count = 17
        VK_EXT_acquire_xlib_display         : extension revision  1
        VK_EXT_debug_report                 : extension revision  9
        VK_EXT_debug_utils                  : extension revision  1
        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 21
        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  1
        VK_KHR_get_surface_capabilities2    : extension revision  1
        VK_KHR_surface                      : extension revision 25
        VK_KHR_surface_protected_capabilities: extension revision  1
        VK_KHR_xcb_surface                  : extension revision  6
        VK_KHR_xlib_surface                 : extension revision  6
Layers: count = 28
=======
VK_LAYER_GOOGLE_threading (Google Validation Layer) Vulkan version 1.1.114, layer version 1
        Layer Extensions        count = 1
                VK_EXT_debug_report                 : extension revision  6
        Devices         count = 2
                GPU id       : 0 (GeForce RTX 2060)
                Layer-Device Extensions count = 0
                GPU id       : 1 (GeForce RTX 2060)
                Layer-Device Extensions count = 0

VK_LAYER_GOOGLE_threading (Google Validation Layer) Vulkan version 1.1.114, layer version 1
        Layer Extensions        count = 1
                VK_EXT_debug_report                 : extension revision  6
        Devices         count = 2
                GPU id       : 0 (GeForce RTX 2060)
                Layer-Device Extensions count = 0
                GPU id       : 1 (GeForce RTX 2060)
                Layer-Device Extensions count = 0

VK_LAYER_GOOGLE_unique_objects (Google Validation Layer) Vulkan version 1.1.114, layer version 1
        Layer Extensions        count = 0
        Devices         count = 2
                GPU id       : 0 (GeForce RTX 2060)
                Layer-Device Extensions count = 0
                GPU id       : 1 (GeForce RTX 2060)
                Layer-Device Extensions count = 0

VK_LAYER_GOOGLE_unique_objects (Google Validation Layer) Vulkan version 1.1.114, layer version 1
        Layer Extensions        count = 0
        Devices         count = 2
                GPU id       : 0 (GeForce RTX 2060)
                Layer-Device Extensions count = 0
                GPU id       : 1 (GeForce RTX 2060)
                Layer-Device Extensions count = 0

VK_LAYER_KHRONOS_validation (LunarG Validation Layer) Vulkan version 1.1.114, layer version 1
        Layer Extensions        count = 1
                VK_EXT_debug_report                 : extension revision  6
        Devices         count = 2
                GPU id       : 0 (GeForce RTX 2060)
                Layer-Device Extensions count = 2
                        VK_EXT_debug_marker                 : extension revision  4
                        VK_EXT_validation_cache             : extension revision  1
                GPU id       : 1 (GeForce RTX 2060)
                Layer-Device Extensions count = 2
                        VK_EXT_debug_marker                 : extension revision  4
                        VK_EXT_validation_cache             : extension revision  1

VK_LAYER_KHRONOS_validation (LunarG Validation Layer) Vulkan version 1.1.114, layer version 1
        Layer Extensions        count = 1
                VK_EXT_debug_report                 : extension revision  6
        Devices         count = 2
                GPU id       : 0 (GeForce RTX 2060)
                Layer-Device Extensions count = 2
                        VK_EXT_debug_marker                 : extension revision  4
                        VK_EXT_validation_cache             : extension revision  1
                GPU id       : 1 (GeForce RTX 2060)
                Layer-Device Extensions count = 2
                        VK_EXT_debug_marker                 : extension revision  4
                        VK_EXT_validation_cache             : extension revision  1

VK_LAYER_LUNARG_api_dump (LunarG API dump layer) Vulkan version 1.1.114, layer version 2
        Layer Extensions        count = 0
        Devices         count = 2
                GPU id       : 0 (GeForce RTX 2060)
                Layer-Device Extensions count = 0
                GPU id       : 1 (GeForce RTX 2060)
                Layer-Device Extensions count = 0

VK_LAYER_LUNARG_api_dump (LunarG API dump layer) Vulkan version 1.1.114, layer version 2
        Layer Extensions        count = 0
        Devices         count = 2
                GPU id       : 0 (GeForce RTX 2060)
                Layer-Device Extensions count = 0
                GPU id       : 1 (GeForce RTX 2060)
                Layer-Device Extensions count = 0

VK_LAYER_LUNARG_core_validation (LunarG Validation Layer) Vulkan version 1.1.114, layer version 1
        Layer Extensions        count = 1
                VK_EXT_debug_report                 : extension revision  6
        Devices         count = 2
                GPU id       : 0 (GeForce RTX 2060)
                Layer-Device Extensions count = 2
                        VK_EXT_debug_marker                 : extension revision  4
                        VK_EXT_validation_cache             : extension revision  1
                GPU id       : 1 (GeForce RTX 2060)
                Layer-Device Extensions count = 2
                        VK_EXT_debug_marker                 : extension revision  4
                        VK_EXT_validation_cache             : extension revision  1

VK_LAYER_LUNARG_core_validation (LunarG Validation Layer) Vulkan version 1.1.114, layer version 1
        Layer Extensions        count = 1
                VK_EXT_debug_report                 : extension revision  6
        Devices         count = 2
                GPU id       : 0 (GeForce RTX 2060)
                Layer-Device Extensions count = 2
                        VK_EXT_debug_marker                 : extension revision  4
                        VK_EXT_validation_cache             : extension revision  1
                GPU id       : 1 (GeForce RTX 2060)
                Layer-Device Extensions count = 2
                        VK_EXT_debug_marker                 : extension revision  4
                        VK_EXT_validation_cache             : extension revision  1

VK_LAYER_LUNARG_device_simulation (LunarG device simulation layer) Vulkan version 1.1.114, layer version 1
        Layer Extensions        count = 0
        Devices         count = 2
                GPU id       : 0 (GeForce RTX 2060)
                Layer-Device Extensions count = 0
                GPU id       : 1 (GeForce RTX 2060)
                Layer-Device Extensions count = 0

VK_LAYER_LUNARG_device_simulation (LunarG device simulation layer) Vulkan version 1.1.114, layer version 1
        Layer Extensions        count = 0
        Devices         count = 2
                GPU id       : 0 (GeForce RTX 2060)
                Layer-Device Extensions count = 0
                GPU id       : 1 (GeForce RTX 2060)
                Layer-Device Extensions count = 0

VK_LAYER_LUNARG_monitor (Execution Monitoring Layer) Vulkan version 1.1.114, layer version 1
        Layer Extensions        count = 0
        Devices         count = 2
                GPU id       : 0 (GeForce RTX 2060)
                Layer-Device Extensions count = 0
                GPU id       : 1 (GeForce RTX 2060)
                Layer-Device Extensions count = 0

VK_LAYER_LUNARG_monitor (Execution Monitoring Layer) Vulkan version 1.1.114, layer version 1
        Layer Extensions        count = 0
        Devices         count = 2
                GPU id       : 0 (GeForce RTX 2060)
                Layer-Device Extensions count = 0
                GPU id       : 1 (GeForce RTX 2060)
                Layer-Device Extensions count = 0

VK_LAYER_LUNARG_object_tracker (LunarG Validation Layer) Vulkan version 1.1.114, layer version 1
        Layer Extensions        count = 1
                VK_EXT_debug_report                 : extension revision  6
        Devices         count = 2
                GPU id       : 0 (GeForce RTX 2060)
                Layer-Device Extensions count = 1
                        VK_EXT_debug_marker                 : extension revision  4
                GPU id       : 1 (GeForce RTX 2060)
                Layer-Device Extensions count = 1
                        VK_EXT_debug_marker                 : extension revision  4

VK_LAYER_LUNARG_object_tracker (LunarG Validation Layer) Vulkan version 1.1.114, layer version 1
        Layer Extensions        count = 1
                VK_EXT_debug_report                 : extension revision  6
        Devices         count = 2
                GPU id       : 0 (GeForce RTX 2060)
                Layer-Device Extensions count = 1
                        VK_EXT_debug_marker                 : extension revision  4
                GPU id       : 1 (GeForce RTX 2060)
                Layer-Device Extensions count = 1
                        VK_EXT_debug_marker                 : extension revision  4

VK_LAYER_LUNARG_parameter_validation (LunarG Validation Layer) Vulkan version 1.1.114, layer version 1
        Layer Extensions        count = 1
                VK_EXT_debug_report                 : extension revision  6
        Devices         count = 2
                GPU id       : 0 (GeForce RTX 2060)
                Layer-Device Extensions count = 1
                        VK_EXT_debug_marker                 : extension revision  4
                GPU id       : 1 (GeForce RTX 2060)
                Layer-Device Extensions count = 1
                        VK_EXT_debug_marker                 : extension revision  4

VK_LAYER_LUNARG_parameter_validation (LunarG Validation Layer) Vulkan version 1.1.114, layer version 1
        Layer Extensions        count = 1
                VK_EXT_debug_report                 : extension revision  6
        Devices         count = 2
                GPU id       : 0 (GeForce RTX 2060)
                Layer-Device Extensions count = 1
                        VK_EXT_debug_marker                 : extension revision  4
                GPU id       : 1 (GeForce RTX 2060)
                Layer-Device Extensions count = 1
                        VK_EXT_debug_marker                 : extension revision  4

VK_LAYER_LUNARG_screenshot (LunarG image capture layer) Vulkan version 1.1.114, layer version 1
        Layer Extensions        count = 0
        Devices         count = 2
                GPU id       : 0 (GeForce RTX 2060)
                Layer-Device Extensions count = 0
                GPU id       : 1 (GeForce RTX 2060)
                Layer-Device Extensions count = 0

VK_LAYER_LUNARG_screenshot (LunarG image capture layer) Vulkan version 1.1.114, layer version 1
        Layer Extensions        count = 0
        Devices         count = 2
                GPU id       : 0 (GeForce RTX 2060)
                Layer-Device Extensions count = 0
                GPU id       : 1 (GeForce RTX 2060)
                Layer-Device Extensions count = 0

VK_LAYER_LUNARG_standard_validation (LunarG Standard Validation) Vulkan version 1.1.114, layer version 1
        Layer Extensions        count = 1
                VK_EXT_debug_report                 : extension revision  6
        Devices         count = 2
                GPU id       : 0 (GeForce RTX 2060)
                Layer-Device Extensions count = 2
                        VK_EXT_debug_marker                 : extension revision  4
                        VK_EXT_validation_cache             : extension revision  1
                GPU id       : 1 (GeForce RTX 2060)
                Layer-Device Extensions count = 2
                        VK_EXT_debug_marker                 : extension revision  4
                        VK_EXT_validation_cache             : extension revision  1

VK_LAYER_LUNARG_standard_validation (LunarG Standard Validation) Vulkan version 1.1.114, layer version 1
        Layer Extensions        count = 1
                VK_EXT_debug_report                 : extension revision  6
        Devices         count = 2
                GPU id       : 0 (GeForce RTX 2060)
                Layer-Device Extensions count = 2
                        VK_EXT_debug_marker                 : extension revision  4
                        VK_EXT_validation_cache             : extension revision  1
                GPU id       : 1 (GeForce RTX 2060)
                Layer-Device Extensions count = 2
                        VK_EXT_debug_marker                 : extension revision  4
                        VK_EXT_validation_cache             : extension revision  1

VK_LAYER_LUNARG_vktrace (Vktrace tracing library) Vulkan version 1.1.114, layer version 1
        Layer Extensions        count = 0
        Devices         count = 2
                GPU id       : 0 (GeForce RTX 2060)
                Layer-Device Extensions count = 0
                GPU id       : 1 (GeForce RTX 2060)
                Layer-Device Extensions count = 0

VK_LAYER_LUNARG_vktrace (Vktrace tracing library) Vulkan version 1.1.114, layer version 1
        Layer Extensions        count = 0
        Devices         count = 2
                GPU id       : 0 (GeForce RTX 2060)
                Layer-Device Extensions count = 0
                GPU id       : 1 (GeForce RTX 2060)
                Layer-Device Extensions count = 0

VK_LAYER_VALVE_steam_fossilize_32 (Steam Pipeline Caching Layer) Vulkan version 1.1.73, layer version 1
        Layer Extensions        count = 0
        Devices         count = 2
                GPU id       : 0 (GeForce RTX 2060)
                Layer-Device Extensions count = 0
                GPU id       : 1 (GeForce RTX 2060)
                Layer-Device Extensions count = 0

VK_LAYER_VALVE_steam_fossilize_64 (Steam Pipeline Caching Layer) Vulkan version 1.1.73, layer version 1
        Layer Extensions        count = 0
        Devices         count = 2
                GPU id       : 0 (GeForce RTX 2060)
                Layer-Device Extensions count = 0
                GPU id       : 1 (GeForce RTX 2060)
                Layer-Device Extensions count = 0

VK_LAYER_VALVE_steam_overlay_32 (Steam Overlay Layer) Vulkan version 1.1.73, layer version 1
        Layer Extensions        count = 0
        Devices         count = 2
                GPU id       : 0 (GeForce RTX 2060)
                Layer-Device Extensions count = 0
                GPU id       : 1 (GeForce RTX 2060)
                Layer-Device Extensions count = 0

VK_LAYER_VALVE_steam_overlay_64 (Steam Overlay Layer) Vulkan version 1.1.73, layer version 1
        Layer Extensions        count = 0
        Devices         count = 2
                GPU id       : 0 (GeForce RTX 2060)
                Layer-Device Extensions count = 0
                GPU id       : 1 (GeForce RTX 2060)
                Layer-Device Extensions count = 0

Presentable Surfaces:
=====================
GPU id       : 0 (GeForce RTX 2060)
Surface type : VK_KHR_xlib_surface
Formats:                count = 2
        B8G8R8A8_UNORM
        B8G8R8A8_SRGB
Present Modes:          count = 3
        FIFO_KHR
        FIFO_RELAXED_KHR
        IMMEDIATE_KHR
VkSurfaceCapabilitiesKHR:
        minImageCount       = 2
        maxImageCount       = 8
        currentExtent:
                width       = 256
                height      = 256
        minImageExtent:
                width       = 256
                height      = 256
        maxImageExtent:
                width       = 256
                height      = 256
        maxImageArrayLayers = 1
        supportedTransform:
                VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR
        currentTransform:
                VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR
        supportedCompositeAlpha:
                VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR
        supportedUsageFlags:
                VK_IMAGE_USAGE_TRANSFER_SRC_BIT
                VK_IMAGE_USAGE_TRANSFER_DST_BIT
                VK_IMAGE_USAGE_SAMPLED_BIT
                VK_IMAGE_USAGE_STORAGE_BIT
                VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT
                VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT
VkSurfaceCapabilities2EXT:
        supportedSurfaceCounters:
                None

GPU id       : 1 (GeForce RTX 2060)
Surface type : VK_KHR_xlib_surface
Formats:                count = 2
        B8G8R8A8_UNORM
        B8G8R8A8_SRGB
Present Modes:          count = 3
        FIFO_KHR
        FIFO_RELAXED_KHR
        IMMEDIATE_KHR
VkSurfaceCapabilitiesKHR:
        minImageCount       = 2
        maxImageCount       = 8
        currentExtent:
                width       = 256
                height      = 256
        minImageExtent:
                width       = 256
                height      = 256
        maxImageExtent:
                width       = 256
                height      = 256
        maxImageArrayLayers = 1
        supportedTransform:
                VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR
        currentTransform:
                VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR
        supportedCompositeAlpha:
                VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR
        supportedUsageFlags:
                VK_IMAGE_USAGE_TRANSFER_SRC_BIT
                VK_IMAGE_USAGE_TRANSFER_DST_BIT
                VK_IMAGE_USAGE_SAMPLED_BIT
                VK_IMAGE_USAGE_STORAGE_BIT
                VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT
                VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT
VkSurfaceCapabilities2EXT:
        supportedSurfaceCounters:
                None

GPU id       : 0 (GeForce RTX 2060)
Surface type : VK_KHR_xcb_surface
Formats:                count = 2
        B8G8R8A8_UNORM
        B8G8R8A8_SRGB
Present Modes:          count = 3
        FIFO_KHR
        FIFO_RELAXED_KHR
        IMMEDIATE_KHR
VkSurfaceCapabilitiesKHR:
        minImageCount       = 2
        maxImageCount       = 8
        currentExtent:
                width       = 256
                height      = 256
        minImageExtent:
                width       = 256
                height      = 256
        maxImageExtent:
                width       = 256
                height      = 256
        maxImageArrayLayers = 1
        supportedTransform:
                VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR
        currentTransform:
                VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR
        supportedCompositeAlpha:
                VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR
        supportedUsageFlags:
                VK_IMAGE_USAGE_TRANSFER_SRC_BIT
                VK_IMAGE_USAGE_TRANSFER_DST_BIT
                VK_IMAGE_USAGE_SAMPLED_BIT
                VK_IMAGE_USAGE_STORAGE_BIT
                VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT
                VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT
VkSurfaceCapabilities2EXT:
        supportedSurfaceCounters:
                None

GPU id       : 1 (GeForce RTX 2060)
Surface type : VK_KHR_xcb_surface
Formats:                count = 2
        B8G8R8A8_UNORM
        B8G8R8A8_SRGB
Present Modes:          count = 3
        FIFO_KHR
        FIFO_RELAXED_KHR
        IMMEDIATE_KHR
VkSurfaceCapabilitiesKHR:
        minImageCount       = 2
        maxImageCount       = 8
        currentExtent:
                width       = 256
                height      = 256
        minImageExtent:
                width       = 256
                height      = 256
        maxImageExtent:
                width       = 256
                height      = 256
        maxImageArrayLayers = 1
        supportedTransform:
                VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR
        currentTransform:
                VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR
        supportedCompositeAlpha:
                VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR
        supportedUsageFlags:
                VK_IMAGE_USAGE_TRANSFER_SRC_BIT
                VK_IMAGE_USAGE_TRANSFER_DST_BIT
                VK_IMAGE_USAGE_SAMPLED_BIT
                VK_IMAGE_USAGE_STORAGE_BIT
                VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT
                VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT
VkSurfaceCapabilities2EXT:
        supportedSurfaceCounters:
                None


Groups :
========
        Device Group Properties (Group 0) :
                physicalDeviceCount = 1

                        GeForce RTX 2060 (ID: 0)

                subsetAllocation = 0

        Device Group Present Capabilities (Group 0) :

                GeForce RTX 2060 (ID: 0)
                Can present images from the following devices:
                        GeForce RTX 2060 (ID: 0)

                Present modes:
                        VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR


        Device Group Properties (Group 1) :
                physicalDeviceCount = 1

                        GeForce RTX 2060 (ID: 0)

                subsetAllocation = 0

        Device Group Present Capabilities (Group 1) :

                GeForce RTX 2060 (ID: 0)
                Can present images from the following devices:
                        GeForce RTX 2060 (ID: 0)

                Present modes:
                        VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR



Device Properties and Extensions :
==================================
GPU0
VkPhysicalDeviceProperties:
===========================
        apiVersion     = 0x401071  (1.1.113)
        driverVersion  = 1754072064 (0x688d0400)
        vendorID       = 0x10de
        deviceID       = 0x1f08
        deviceType     = DISCRETE_GPU
        deviceName     = GeForce RTX 2060
        VkPhysicalDeviceLimits:
        -----------------------
                maxImageDimension1D                     = 32768
                maxImageDimension2D                     = 32768
                maxImageDimension3D                     = 16384
                maxImageDimensionCube                   = 32768
                maxImageArrayLayers                     = 2048
                maxTexelBufferElements                  = 0x8000000
                maxUniformBufferRange                   = 0x10000
                maxStorageBufferRange                   = 0xffffffff
                maxPushConstantsSize                    = 256
                maxMemoryAllocationCount                = 4294967295
                maxSamplerAllocationCount               = 4000
                bufferImageGranularity                  = 0x400
                sparseAddressSpaceSize                  = 0xffffffffffffffff
                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           = 0x7ff
                maxVertexInputBindingStride             = 0x800
                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      = 16
                maxComputeSharedMemorySize              = 49152
                maxComputeWorkGroupCount[0]             = 2147483647
                maxComputeWorkGroupCount[1]             = 65535
                maxComputeWorkGroupCount[2]             = 65535
                maxComputeWorkGroupInvocations          = 1024
                maxComputeWorkGroupSize[0]              = 1024
                maxComputeWorkGroupSize[1]              = 1024
                maxComputeWorkGroupSize[2]              = 64
                subPixelPrecisionBits                   = 8
                subTexelPrecisionBits                   = 8
                mipmapPrecisionBits                     = 8
                maxDrawIndexedIndexValue                = 4294967295
                maxDrawIndirectCount                    = 4294967295
                maxSamplerLodBias                       = 15.000000
                maxSamplerAnisotropy                    = 16.000000
                maxViewports                            = 16
                maxViewportDimensions[0]                = 32768
                maxViewportDimensions[1]                = 32768
                viewportBoundsRange[0]                  = -65536.000000
                viewportBoundsRange[1]                  =  65536.000000
                viewportSubPixelBits                    = 8
                minMemoryMapAlignment                   = 64
                minTexelBufferOffsetAlignment           = 0x10
                minUniformBufferOffsetAlignment         = 0x40
                minStorageBufferOffsetAlignment         = 0x10
                minTexelOffset                          =  -8
                maxTexelOffset                          =   7
                minTexelGatherOffset                    = -32
                maxTexelGatherOffset                    =  31
                minInterpolationOffset                  = -0.500000
                maxInterpolationOffset                  =  0.437500
                subPixelInterpolationOffsetBits         = 4
                maxFramebufferWidth                     = 32768
                maxFramebufferHeight                    = 32768
                maxFramebufferLayers                    = 2048
                framebufferColorSampleCounts            = 15
                framebufferDepthSampleCounts            = 15
                framebufferStencilSampleCounts          = 31
                framebufferNoAttachmentsSampleCounts    = 31
                maxColorAttachments                     = 8
                sampledImageColorSampleCounts           = 15
                sampledImageDepthSampleCounts           = 15
                sampledImageStencilSampleCounts         = 31
                sampledImageIntegerSampleCounts         = 15
                storageImageSampleCounts                = 15
                maxSampleMaskWords                      = 1
                timestampComputeAndGraphics             = 1
                timestampPeriod                         = 1.000000
                maxClipDistances                        = 8
                maxCullDistances                        = 8
                maxCombinedClipAndCullDistances         = 8
                discreteQueuePriorities                 = 2
                pointSizeRange[0]                       = 1.000000
                pointSizeRange[1]                       = 2047.937500
                lineWidthRange[0]                       = 1.000000
                lineWidthRange[1]                       = 64.000000
                pointSizeGranularity                    = 0.062500
                lineWidthGranularity                    = 1.000000
                strictLines                             = 1
                standardSampleLocations                 = 1
                optimalBufferCopyOffsetAlignment        = 0x1
                optimalBufferCopyRowPitchAlignment      = 0x1
                nonCoherentAtomSize                     = 0x40
        VkPhysicalDeviceSparseProperties:
        ---------------------------------
                residencyStandard2DBlockShape            = 1
                residencyStandard2DMultisampleBlockShape = 1
                residencyStandard3DBlockShape            = 1
                residencyAlignedMipSize                  = 0
                residencyNonResidentStrict               = 1

VkPhysicalDeviceBlendOperationAdvancedProperties:
=================================================
        advancedBlendMaxColorAttachments               = 8
        advancedBlendIndependentBlend                  = 0
        advancedBlendNonPremultipliedSrcColor          = 1
        advancedBlendNonPremultipliedDstColor          = 1
        advancedBlendCorrelatedOverlap                 = 1
        advancedBlendAllOperations                     = 1

VkPhysicalDevicePointClippingProperties:
========================================
        pointClippingBehavior               = 1

VkPhysicalDevicePushDescriptorProperties:
=========================================
        maxPushDescriptors               = 32

VkPhysicalDeviceDiscardRectangleProperties:
===========================================
        maxDiscardRectangles               = 8

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

VkPhysicalDeviceMaintenance3Properties:
=======================================
        maxPerSetDescriptors    = 4294967295
        maxMemoryAllocationSize = 4292870144

VkPhysicalDeviceIDProperties:
=========================================
        deviceUUID      = 7e20b5c2-85c1-05bf-f66a-15005ab0a4b0
        driverUUID      = f554020a-203f-85f2-f329-21b1d69b410d
        deviceLUIDValid = false

VkPhysicalDeviceDriverProperties:
=================================
        driverID   = 4
        driverName = NVIDIA
        driverInfo = 418.52.16
        conformanceVersion:
                major    = 1
                minor    = 1
                subminor = 4
                patch    = 2

VkPhysicalDeviceFloatControlsProperties:
========================================
        separateDenormSettings       = 1
        separateRoundingModeSettings = 1
        shaderSignedZeroInfNanPreserveFloat16 = 1
        shaderSignedZeroInfNanPreserveFloat32 = 1
        shaderSignedZeroInfNanPreserveFloat64 = 1
        shaderDenormPreserveFloat16          = 1
        shaderDenormPreserveFloat32           = 0
        shaderDenormPreserveFloat64           = 0
        shaderDenormFlushToZeroFloat16        = 0
        shaderDenormFlushToZeroFloat32        = 0
        shaderDenormFlushToZeroFloat64        = 0
        shaderRoundingModeRTEFloat16          = 1
        shaderRoundingModeRTEFloat32          = 1
        shaderRoundingModeRTEFloat64         = 1
        shaderRoundingModeRTZFloat16          = 0
        shaderRoundingModeRTZFloat32          = 1
        shaderRoundingModeRTZFloat64          = 1

VkPhysicalDevicePCIBusInfoProperties
====================================
        pciDomain   = 0
        pciBus      = 3
        pciDevice   = 0
        pciFunction = 0

VkPhysicalDeviceTransformFeedbackProperties
===========================================
        maxTransformFeedbackStreams                = 4
        maxTransformFeedbackBuffers                = 4
        maxTransformFeedbackBufferSize             = 18446744073709551615
        maxTransformFeedbackStreamDataSize         = 2048
        maxTransformFeedbackBufferDataSize         = 512
        maxTransformFeedbackBufferDataStride       = 2048
        transformFeedbackQueries                   = 1
        transformFeedbackStreamsLinesTriangles     = 0
        transformFeedbackRasterizationStreamSelect = 1
        transformFeedbackDraw                      = 1

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

VkPhysicalDeviceDepthStencilResolveProperties
============================================
                supportedDepthResolveModes:
                        VK_RESOLVE_MODE_SAMPLE_ZERO_BIT_KHR
                        VK_RESOLVE_MODE_AVERAGE_BIT_KHR
                        VK_RESOLVE_MODE_MIN_BIT_KHR
                        VK_RESOLVE_MODE_MAX_BIT_KHR
                supportedStencilResolveModes:
                        VK_RESOLVE_MODE_SAMPLE_ZERO_BIT_KHR
                        VK_RESOLVE_MODE_MIN_BIT_KHR
                        VK_RESOLVE_MODE_MAX_BIT_KHR
                independentResolveNone = 1
                independentResolve     = 1

Device Extensions       count = 95
        VK_EXT_blend_operation_advanced     : extension revision  2
        VK_EXT_buffer_device_address        : extension revision  2
        VK_EXT_calibrated_timestamps        : extension revision  1
        VK_EXT_conditional_rendering        : extension revision  1
        VK_EXT_conservative_rasterization   : 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_fragment_shader_interlock    : extension revision  1
        VK_EXT_global_priority              : extension revision  2
        VK_EXT_host_query_reset             : extension revision  1
        VK_EXT_inline_uniform_block         : extension revision  1
        VK_EXT_memory_budget                : extension revision  1
        VK_EXT_pci_bus_info                 : extension revision  2
        VK_EXT_pipeline_creation_feedback   : extension revision  1
        VK_EXT_post_depth_coverage          : extension revision  1
        VK_EXT_sample_locations             : extension revision  1
        VK_EXT_sampler_filter_minmax        : extension revision  1
        VK_EXT_scalar_block_layout          : extension revision  1
        VK_EXT_separate_stencil_usage       : extension revision  1
        VK_EXT_shader_demote_to_helper_invocation: 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_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_KHR_16bit_storage                : extension revision  1
        VK_KHR_8bit_storage                 : extension revision  1
        VK_KHR_bind_memory2                 : 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  3
        VK_KHR_draw_indirect_count          : extension revision  1
        VK_KHR_driver_properties            : 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_get_memory_requirements2     : 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_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  1
        VK_KHR_sampler_ycbcr_conversion     : 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_storage_buffer_storage_class : extension revision  1
        VK_KHR_swapchain                    : extension revision 70
        VK_KHR_swapchain_mutable_format     : extension revision  1
        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_NVX_binary_import                : extension revision  1
        VK_NVX_device_generated_commands    : extension revision  3
        VK_NVX_image_view_handle            : extension revision  1
        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_dedicated_allocation          : extension revision  1
        VK_NV_dedicated_allocation_image_aliasing: extension revision  1
        VK_NV_device_diagnostic_checkpoints : extension revision  2
        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_framebuffer_mixed_samples     : extension revision  1
        VK_NV_geometry_shader_passthrough   : extension revision  1
        VK_NV_mesh_shader                   : extension revision  1
        VK_NV_ray_tracing                   : extension revision  3
        VK_NV_representative_fragment_test  : extension revision  1
        VK_NV_sample_mask_override_coverage : extension revision  1
        VK_NV_scissor_exclusive             : extension revision  1
        VK_NV_shader_image_footprint        : extension revision  1
        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[0]:
===========================
        queueFlags         = GRAPHICS | COMPUTE | TRANSFER | SPARSE
        queueCount         = 16
        timestampValidBits = 64
        minImageTransferGranularity = (1, 1, 1)
        present support    = true

VkQueueFamilyProperties[1]:
===========================
        queueFlags         = TRANSFER
        queueCount         = 2
        timestampValidBits = 64
        minImageTransferGranularity = (1, 1, 1)
        present support    = false

VkQueueFamilyProperties[2]:
===========================
        queueFlags         = COMPUTE
        queueCount         = 8
        timestampValidBits = 64
        minImageTransferGranularity = (1, 1, 1)
        present support:
                VK_KHR_xlib_surface = true
                VK_KHR_xcb_surface = false

VkPhysicalDeviceMemoryProperties:
=================================
        memoryHeapCount       = 2
        memoryHeaps[0] :
                size          = 6442450944 (0x180000000) (6.00 GiB)
                budget        = 3212247040
                usage         = 0
                flags:
                        VK_MEMORY_HEAP_DEVICE_LOCAL_BIT
        memoryHeaps[1] :
                size          = 50616726528 (0xbc8fdf400) (47.14 GiB)
                budget        = 50616726528
                usage         = 0
                flags:
                        None
        memoryTypeCount       = 11
        memoryTypes[0] :
                heapIndex     = 1
                propertyFlags = 0x0:
                usable for:
                        OPTIMAL: None
                        LINEAR: None
        memoryTypes[1] :
                heapIndex     = 1
                propertyFlags = 0x0:
                usable for:
                        OPTIMAL: color images
                        LINEAR: None
        memoryTypes[2] :
                heapIndex     = 1
                propertyFlags = 0x0:
                usable for:
                        OPTIMAL: D16_UNORM
                        LINEAR: None
        memoryTypes[3] :
                heapIndex     = 1
                propertyFlags = 0x0:
                usable for:
                        OPTIMAL: X8_D24_UNORM_PACK32, D24_UNORM_S8_UINT
                        LINEAR: None
        memoryTypes[4] :
                heapIndex     = 1
                propertyFlags = 0x0:
                usable for:
                        OPTIMAL: D32_SFLOAT
                        LINEAR: None
        memoryTypes[5] :
                heapIndex     = 1
                propertyFlags = 0x0:
                usable for:
                        OPTIMAL: D32_SFLOAT_S8_UINT
                        LINEAR: None
        memoryTypes[6] :
                heapIndex     = 1
                propertyFlags = 0x0:
                usable for:
                        OPTIMAL: S8_UINT
                        LINEAR: None
        memoryTypes[7] :
                heapIndex     = 0
                propertyFlags = 0x1:
                        VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT
                usable for:
                        OPTIMAL: color images, D16_UNORM, X8_D24_UNORM_PACK32, D32_SFLOAT, S8_UINT, D24_UNORM_S8_UINT, D32_SFLOAT_S8_UINT
                        LINEAR: None
        memoryTypes[8] :
                heapIndex     = 0
                propertyFlags = 0x1:
                        VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT
                usable for:
                        OPTIMAL: None
                        LINEAR: None
        memoryTypes[9] :
                heapIndex     = 1
                propertyFlags = 0x6:
                        VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT
                        VK_MEMORY_PROPERTY_HOST_COHERENT_BIT
                usable for:
                        OPTIMAL: None
                        LINEAR: None
        memoryTypes[10] :
                heapIndex     = 1
                propertyFlags = 0xe:
                        VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT
                        VK_MEMORY_PROPERTY_HOST_COHERENT_BIT
                        VK_MEMORY_PROPERTY_HOST_CACHED_BIT
                usable for:
                        OPTIMAL: None
                        LINEAR: None

VkPhysicalDeviceFeatures:
=========================
        robustBufferAccess                      = 1
        fullDrawIndexUint32                     = 1
        imageCubeArray                          = 1
        independentBlend                        = 1
        geometryShader                          = 1
        tessellationShader                      = 1
        sampleRateShading                       = 1
        dualSrcBlend                            = 1
        logicOp                                 = 1
        multiDrawIndirect                       = 1
        drawIndirectFirstInstance               = 1
        depthClamp                              = 1
        depthBiasClamp                          = 1
        fillModeNonSolid                        = 1
        depthBounds                             = 1
        wideLines                               = 1
        largePoints                             = 1
        alphaToOne                              = 1
        multiViewport                           = 1
        samplerAnisotropy                       = 1
        textureCompressionETC2                  = 0
        textureCompressionASTC_LDR              = 0
        textureCompressionBC                    = 1
        occlusionQueryPrecise                   = 1
        pipelineStatisticsQuery                 = 1
        vertexPipelineStoresAndAtomics          = 1
        fragmentStoresAndAtomics                = 1
        shaderTessellationAndGeometryPointSize  = 1
        shaderImageGatherExtended               = 1
        shaderStorageImageExtendedFormats       = 1
        shaderStorageImageMultisample           = 1
        shaderStorageImageReadWithoutFormat     = 1
        shaderStorageImageWriteWithoutFormat    = 1
        shaderUniformBufferArrayDynamicIndexing = 1
        shaderSampledImageArrayDynamicIndexing  = 1
        shaderStorageBufferArrayDynamicIndexing = 1
        shaderStorageImageArrayDynamicIndexing  = 1
        shaderClipDistance                      = 1
        shaderCullDistance                      = 1
        shaderFloat64                           = 1
        shaderInt64                             = 1
        shaderInt16                             = 1
        shaderResourceResidency                 = 1
        shaderResourceMinLod                    = 1
        sparseBinding                           = 1
        sparseResidencyBuffer                   = 1
        sparseResidencyImage2D                  = 1
        sparseResidencyImage3D                  = 1
        sparseResidency2Samples                 = 1
        sparseResidency4Samples                 = 1
        sparseResidency8Samples                 = 1
        sparseResidency16Samples                = 1
        sparseResidencyAliased                  = 1
        variableMultisampleRate                 = 1
        inheritedQueries                        = 1

VkPhysicalDevice8BitStorageFeatures:
=====================================
        storageBuffer8BitAccess           = 1
        uniformAndStorageBuffer8BitAccess = 1
        storagePushConstant8              = 1

VkPhysicalDevice16BitStorageFeatures:
=====================================
        storageBuffer16BitAccess           = 1
        uniformAndStorageBuffer16BitAccess = 1
        storagePushConstant16              = 1
        storageInputOutput16               = 0

VkPhysicalDeviceSamplerYcbcrConversionFeatures:
===============================================
        samplerYcbcrConversion = 1

VkPhysicalDeviceVariablePointerFeatures:
========================================
        variablePointersStorageBuffer = 1
        variablePointers              = 1

VkPhysicalDeviceBlendOperationAdvancedFeatures:
===============================================
        advancedBlendCoherentOperations = 1

VkPhysicalDeviceMultiviewFeatures:
==================================
        multiview                   = 1
        multiviewGeometryShader     = 1
        multiviewTessellationShader = 1

VkPhysicalDeviceFloat16Int8Features:
====================================
        shaderFloat16 = 1
        shaderInt8    = 1

VkPhysicalDeviceShaderAtomicInt64Features:
==========================================
        shaderBufferInt64Atomics = 1
        shaderSharedInt64Atomics = 1

VkPhysicalDeviceTransformFeedbackFeatures:
==========================================
        transformFeedback = 1
        geometryStreams   = 1

VkPhysicalDeviceScalarBlockLayoutFeatures:
==========================================
        scalarBlockLayout = 1

VkPhysicalDeviceBufferAddressFeatures:
======================================
        bufferDeviceAddress = 1
        bufferDeviceAddressCaptureReplay = 0
        bufferDeviceAddressMultiDevice = 1

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

VkPhysicalDeviceYcbcrImageArraysFeatures:
=========================================
        ycbcrImageArrays = 1

VkPhysicalDeviceHostQueryResetFeatures:
=======================================
        hostQueryReset = 1

Format Properties:
==================

FORMAT_R4G4_UNORM_PACK8,
FORMAT_R4G4B4A4_UNORM_PACK16,
FORMAT_B4G4R4A4_UNORM_PACK16,
FORMAT_B5G6R5_UNORM_PACK16,
FORMAT_R5G5B5A1_UNORM_PACK16,
FORMAT_B5G5R5A1_UNORM_PACK16,
FORMAT_E5B9G9R9_UFLOAT_PACK32:
        linearTiling   FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_BLIT_SRC_BIT
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        optimalTiling  FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_BLIT_SRC_BIT
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        bufferFeatures FormatFeatureFlags:
                VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT

FORMAT_R5G6B5_UNORM_PACK16,
FORMAT_A1R5G5B5_UNORM_PACK16:
        linearTiling   FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_BLIT_SRC_BIT
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        optimalTiling  FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
                VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
                VK_FORMAT_FEATURE_BLIT_SRC_BIT
                VK_FORMAT_FEATURE_BLIT_DST_BIT
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        bufferFeatures FormatFeatureFlags:
                VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT

FORMAT_R8_UNORM,
FORMAT_R8_SNORM,
FORMAT_R8G8_UNORM,
FORMAT_R8G8_SNORM,
FORMAT_R8G8B8A8_UNORM,
FORMAT_R8G8B8A8_SNORM,
FORMAT_B8G8R8A8_UNORM,
FORMAT_A8B8G8R8_UNORM_PACK32,
FORMAT_A8B8G8R8_SNORM_PACK32,
FORMAT_A2B10G10R10_UNORM_PACK32,
FORMAT_R16_UNORM,
FORMAT_R16_SNORM,
FORMAT_R16_SFLOAT,
FORMAT_R16G16_UNORM,
FORMAT_R16G16_SNORM,
FORMAT_R16G16_SFLOAT,
FORMAT_R16G16B16A16_UNORM,
FORMAT_R16G16B16A16_SNORM,
FORMAT_R16G16B16A16_SFLOAT,
FORMAT_R32G32_SFLOAT,
FORMAT_R32G32B32A32_SFLOAT,
FORMAT_B10G11R11_UFLOAT_PACK32:
        linearTiling   FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_BLIT_SRC_BIT
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        optimalTiling  FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
                VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
                VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
                VK_FORMAT_FEATURE_BLIT_SRC_BIT
                VK_FORMAT_FEATURE_BLIT_DST_BIT
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        bufferFeatures FormatFeatureFlags:
                VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT
                VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT
                VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R8_USCALED,
FORMAT_R8_SSCALED,
FORMAT_R8G8_USCALED,
FORMAT_R8G8_SSCALED,
FORMAT_R8G8B8_UNORM,
FORMAT_R8G8B8_SNORM,
FORMAT_R8G8B8_USCALED,
FORMAT_R8G8B8_SSCALED,
FORMAT_R8G8B8_UINT,
FORMAT_R8G8B8_SINT,
FORMAT_B8G8R8_UNORM,
FORMAT_B8G8R8_SNORM,
FORMAT_B8G8R8_USCALED,
FORMAT_B8G8R8_SSCALED,
FORMAT_B8G8R8_UINT,
FORMAT_B8G8R8_SINT,
FORMAT_R8G8B8A8_USCALED,
FORMAT_R8G8B8A8_SSCALED,
FORMAT_B8G8R8A8_USCALED,
FORMAT_B8G8R8A8_SSCALED,
FORMAT_A8B8G8R8_USCALED_PACK32,
FORMAT_A8B8G8R8_SSCALED_PACK32,
FORMAT_A2R10G10B10_SNORM_PACK32,
FORMAT_A2R10G10B10_USCALED_PACK32,
FORMAT_A2R10G10B10_SSCALED_PACK32,
FORMAT_A2R10G10B10_SINT_PACK32,
FORMAT_A2B10G10R10_SNORM_PACK32,
FORMAT_A2B10G10R10_USCALED_PACK32,
FORMAT_A2B10G10R10_SSCALED_PACK32,
FORMAT_A2B10G10R10_SINT_PACK32,
FORMAT_R16_USCALED,
FORMAT_R16_SSCALED,
FORMAT_R16G16_USCALED,
FORMAT_R16G16_SSCALED,
FORMAT_R16G16B16_UNORM,
FORMAT_R16G16B16_SNORM,
FORMAT_R16G16B16_USCALED,
FORMAT_R16G16B16_SSCALED,
FORMAT_R16G16B16_UINT,
FORMAT_R16G16B16_SINT,
FORMAT_R16G16B16_SFLOAT,
FORMAT_R16G16B16A16_USCALED,
FORMAT_R16G16B16A16_SSCALED,
FORMAT_R64_UINT,
FORMAT_R64_SINT,
FORMAT_R64_SFLOAT,
FORMAT_R64G64_UINT,
FORMAT_R64G64_SINT,
FORMAT_R64G64_SFLOAT,
FORMAT_R64G64B64_UINT,
FORMAT_R64G64B64_SINT,
FORMAT_R64G64B64_SFLOAT,
FORMAT_R64G64B64A64_UINT,
FORMAT_R64G64B64A64_SINT,
FORMAT_R64G64B64A64_SFLOAT:
        linearTiling   FormatFeatureFlags:
                None

        optimalTiling  FormatFeatureFlags:
                None

        bufferFeatures FormatFeatureFlags:
                VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R8_UINT,
FORMAT_R8_SINT,
FORMAT_R8G8_UINT,
FORMAT_R8G8_SINT,
FORMAT_R8G8B8A8_UINT,
FORMAT_R8G8B8A8_SINT,
FORMAT_A8B8G8R8_UINT_PACK32,
FORMAT_A8B8G8R8_SINT_PACK32,
FORMAT_A2B10G10R10_UINT_PACK32,
FORMAT_R16_UINT,
FORMAT_R16_SINT,
FORMAT_R16G16_UINT,
FORMAT_R16G16_SINT,
FORMAT_R16G16B16A16_UINT,
FORMAT_R16G16B16A16_SINT,
FORMAT_R32G32_UINT,
FORMAT_R32G32_SINT,
FORMAT_R32G32B32A32_UINT,
FORMAT_R32G32B32A32_SINT:
        linearTiling   FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_BLIT_SRC_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        optimalTiling  FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
                VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
                VK_FORMAT_FEATURE_BLIT_SRC_BIT
                VK_FORMAT_FEATURE_BLIT_DST_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        bufferFeatures FormatFeatureFlags:
                VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT
                VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT
                VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R8_SRGB,
FORMAT_BC1_RGB_UNORM_BLOCK,
FORMAT_BC1_RGB_SRGB_BLOCK,
FORMAT_BC1_RGBA_UNORM_BLOCK,
FORMAT_BC1_RGBA_SRGB_BLOCK,
FORMAT_BC2_UNORM_BLOCK,
FORMAT_BC2_SRGB_BLOCK,
FORMAT_BC3_UNORM_BLOCK,
FORMAT_BC3_SRGB_BLOCK,
FORMAT_BC4_UNORM_BLOCK,
FORMAT_BC4_SNORM_BLOCK,
FORMAT_BC5_UNORM_BLOCK,
FORMAT_BC5_SNORM_BLOCK,
FORMAT_BC6H_UFLOAT_BLOCK,
FORMAT_BC6H_SFLOAT_BLOCK,
FORMAT_BC7_UNORM_BLOCK,
FORMAT_BC7_SRGB_BLOCK:
        linearTiling   FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_BLIT_SRC_BIT
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        optimalTiling  FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_BLIT_SRC_BIT
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        bufferFeatures FormatFeatureFlags:
                None

FORMAT_R8G8B8A8_SRGB,
FORMAT_B8G8R8A8_SRGB,
FORMAT_A8B8G8R8_SRGB_PACK32:
        linearTiling   FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_BLIT_SRC_BIT
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        optimalTiling  FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
                VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
                VK_FORMAT_FEATURE_BLIT_SRC_BIT
                VK_FORMAT_FEATURE_BLIT_DST_BIT
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        bufferFeatures FormatFeatureFlags:
                None

FORMAT_B8G8R8A8_SNORM:
        linearTiling   FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_BLIT_SRC_BIT
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        optimalTiling  FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_BLIT_SRC_BIT
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        bufferFeatures FormatFeatureFlags:
                VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT
                VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_B8G8R8A8_UINT,
FORMAT_B8G8R8A8_SINT,
FORMAT_A2R10G10B10_UINT_PACK32:
        linearTiling   FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_BLIT_SRC_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        optimalTiling  FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_BLIT_SRC_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        bufferFeatures FormatFeatureFlags:
                VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT
                VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_A2R10G10B10_UNORM_PACK32:
        linearTiling   FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_BLIT_SRC_BIT
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        optimalTiling  FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
                VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
                VK_FORMAT_FEATURE_BLIT_SRC_BIT
                VK_FORMAT_FEATURE_BLIT_DST_BIT
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        bufferFeatures FormatFeatureFlags:
                VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT
                VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R32_UINT,
FORMAT_R32_SINT:
        linearTiling   FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_BLIT_SRC_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        optimalTiling  FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
                VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT
                VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
                VK_FORMAT_FEATURE_BLIT_SRC_BIT
                VK_FORMAT_FEATURE_BLIT_DST_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        bufferFeatures FormatFeatureFlags:
                VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT
                VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT
                VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT
                VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R32_SFLOAT:
        linearTiling   FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_BLIT_SRC_BIT
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        optimalTiling  FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
                VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT
                VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
                VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
                VK_FORMAT_FEATURE_BLIT_SRC_BIT
                VK_FORMAT_FEATURE_BLIT_DST_BIT
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        bufferFeatures FormatFeatureFlags:
                VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT
                VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT
                VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT
                VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R32G32B32_UINT,
FORMAT_R32G32B32_SINT:
        linearTiling   FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_BLIT_SRC_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        optimalTiling  FormatFeatureFlags:
                None

        bufferFeatures FormatFeatureFlags:
                VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT
                VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R32G32B32_SFLOAT:
        linearTiling   FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_BLIT_SRC_BIT
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        optimalTiling  FormatFeatureFlags:
                None

        bufferFeatures FormatFeatureFlags:
                VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT
                VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_D16_UNORM,
FORMAT_X8_D24_UNORM_PACK32,
FORMAT_D32_SFLOAT,
FORMAT_D24_UNORM_S8_UINT,
FORMAT_D32_SFLOAT_S8_UINT:
        linearTiling   FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_BLIT_SRC_BIT
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        optimalTiling  FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT
                VK_FORMAT_FEATURE_BLIT_SRC_BIT
                VK_FORMAT_FEATURE_BLIT_DST_BIT
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        bufferFeatures FormatFeatureFlags:
                None

FORMAT_S8_UINT:
        linearTiling   FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_BLIT_SRC_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        optimalTiling  FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT
                VK_FORMAT_FEATURE_BLIT_SRC_BIT
                VK_FORMAT_FEATURE_BLIT_DST_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        bufferFeatures FormatFeatureFlags:
                None

FORMAT_G8B8G8R8_422_UNORM,
FORMAT_B8G8R8G8_422_UNORM,
FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16,
FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16,
FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16,
FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16,
FORMAT_G16B16G16R16_422_UNORM,
FORMAT_B16G16R16G16_422_UNORM:
        linearTiling   FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        optimalTiling  FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        bufferFeatures FormatFeatureFlags:
                None

FORMAT_G8_B8_R8_3PLANE_420_UNORM,
FORMAT_G8_B8R8_2PLANE_420_UNORM,
FORMAT_G8_B8_R8_3PLANE_422_UNORM,
FORMAT_G8_B8R8_2PLANE_422_UNORM,
FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16,
FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16,
FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16,
FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16,
FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16,
FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16,
FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16,
FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16,
FORMAT_G16_B16_R16_3PLANE_420_UNORM,
FORMAT_G16_B16R16_2PLANE_420_UNORM,
FORMAT_G16_B16_R16_3PLANE_422_UNORM,
FORMAT_G16_B16R16_2PLANE_422_UNORM:
        linearTiling   FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        optimalTiling  FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        bufferFeatures FormatFeatureFlags:
                None

FORMAT_G8_B8_R8_3PLANE_444_UNORM,
FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16,
FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16,
FORMAT_G16_B16_R16_3PLANE_444_UNORM:
        linearTiling   FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        optimalTiling  FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        bufferFeatures FormatFeatureFlags:
                None

FORMAT_R10X6_UNORM_PACK16,
FORMAT_R10X6G10X6_UNORM_2PACK16,
FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16,
FORMAT_R12X4_UNORM_PACK16,
FORMAT_R12X4G12X4_UNORM_2PACK16,
FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16:
        linearTiling   FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        optimalTiling  FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        bufferFeatures FormatFeatureFlags:
                None

Unsupported formats:
FORMAT_UNDEFINED
FORMAT_R8G8_SRGB
FORMAT_R8G8B8_SRGB
FORMAT_B8G8R8_SRGB
FORMAT_D16_UNORM_S8_UINT
FORMAT_ETC2_R8G8B8_UNORM_BLOCK
FORMAT_ETC2_R8G8B8_SRGB_BLOCK
FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK
FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK
FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK
FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK
FORMAT_EAC_R11_UNORM_BLOCK
FORMAT_EAC_R11_SNORM_BLOCK
FORMAT_EAC_R11G11_UNORM_BLOCK
FORMAT_EAC_R11G11_SNORM_BLOCK
FORMAT_ASTC_4x4_UNORM_BLOCK
FORMAT_ASTC_4x4_SRGB_BLOCK
FORMAT_ASTC_5x4_UNORM_BLOCK
FORMAT_ASTC_5x4_SRGB_BLOCK
FORMAT_ASTC_5x5_UNORM_BLOCK
FORMAT_ASTC_5x5_SRGB_BLOCK
FORMAT_ASTC_6x5_UNORM_BLOCK
FORMAT_ASTC_6x5_SRGB_BLOCK
FORMAT_ASTC_6x6_UNORM_BLOCK
FORMAT_ASTC_6x6_SRGB_BLOCK
FORMAT_ASTC_8x5_UNORM_BLOCK
FORMAT_ASTC_8x5_SRGB_BLOCK
FORMAT_ASTC_8x6_UNORM_BLOCK
FORMAT_ASTC_8x6_SRGB_BLOCK
FORMAT_ASTC_8x8_UNORM_BLOCK
FORMAT_ASTC_8x8_SRGB_BLOCK
FORMAT_ASTC_10x5_UNORM_BLOCK
FORMAT_ASTC_10x5_SRGB_BLOCK
FORMAT_ASTC_10x6_UNORM_BLOCK
FORMAT_ASTC_10x6_SRGB_BLOCK
FORMAT_ASTC_10x8_UNORM_BLOCK
FORMAT_ASTC_10x8_SRGB_BLOCK
FORMAT_ASTC_10x10_UNORM_BLOCK
FORMAT_ASTC_10x10_SRGB_BLOCK
FORMAT_ASTC_12x10_UNORM_BLOCK
FORMAT_ASTC_12x10_SRGB_BLOCK
FORMAT_ASTC_12x12_UNORM_BLOCK
FORMAT_ASTC_12x12_SRGB_BLOCK


Device Properties and Extensions :
==================================
GPU1
VkPhysicalDeviceProperties:
===========================
        apiVersion     = 0x401071  (1.1.113)
        driverVersion  = 1754072064 (0x688d0400)
        vendorID       = 0x10de
        deviceID       = 0x1f08
        deviceType     = DISCRETE_GPU
        deviceName     = GeForce RTX 2060
        VkPhysicalDeviceLimits:
        -----------------------
                maxImageDimension1D                     = 32768
                maxImageDimension2D                     = 32768
                maxImageDimension3D                     = 16384
                maxImageDimensionCube                   = 32768
                maxImageArrayLayers                     = 2048
                maxTexelBufferElements                  = 0x8000000
                maxUniformBufferRange                   = 0x10000
                maxStorageBufferRange                   = 0xffffffff
                maxPushConstantsSize                    = 256
                maxMemoryAllocationCount                = 4294967295
                maxSamplerAllocationCount               = 4000
                bufferImageGranularity                  = 0x400
                sparseAddressSpaceSize                  = 0xffffffffffffffff
                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           = 0x7ff
                maxVertexInputBindingStride             = 0x800
                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      = 16
                maxComputeSharedMemorySize              = 49152
                maxComputeWorkGroupCount[0]             = 2147483647
                maxComputeWorkGroupCount[1]             = 65535
                maxComputeWorkGroupCount[2]             = 65535
                maxComputeWorkGroupInvocations          = 1024
                maxComputeWorkGroupSize[0]              = 1024
                maxComputeWorkGroupSize[1]              = 1024
                maxComputeWorkGroupSize[2]              = 64
                subPixelPrecisionBits                   = 8
                subTexelPrecisionBits                   = 8
                mipmapPrecisionBits                     = 8
                maxDrawIndexedIndexValue                = 4294967295
                maxDrawIndirectCount                    = 4294967295
                maxSamplerLodBias                       = 15.000000
                maxSamplerAnisotropy                    = 16.000000
                maxViewports                            = 16
                maxViewportDimensions[0]                = 32768
                maxViewportDimensions[1]                = 32768
                viewportBoundsRange[0]                  = -65536.000000
                viewportBoundsRange[1]                  =  65536.000000
                viewportSubPixelBits                    = 8
                minMemoryMapAlignment                   = 64
                minTexelBufferOffsetAlignment           = 0x10
                minUniformBufferOffsetAlignment         = 0x40
                minStorageBufferOffsetAlignment         = 0x10
                minTexelOffset                          =  -8
                maxTexelOffset                          =   7
                minTexelGatherOffset                    = -32
                maxTexelGatherOffset                    =  31
                minInterpolationOffset                  = -0.500000
                maxInterpolationOffset                  =  0.437500
                subPixelInterpolationOffsetBits         = 4
                maxFramebufferWidth                     = 32768
                maxFramebufferHeight                    = 32768
                maxFramebufferLayers                    = 2048
                framebufferColorSampleCounts            = 15
                framebufferDepthSampleCounts            = 15
                framebufferStencilSampleCounts          = 31
                framebufferNoAttachmentsSampleCounts    = 31
                maxColorAttachments                     = 8
                sampledImageColorSampleCounts           = 15
                sampledImageDepthSampleCounts           = 15
                sampledImageStencilSampleCounts         = 31
                sampledImageIntegerSampleCounts         = 15
                storageImageSampleCounts                = 15
                maxSampleMaskWords                      = 1
                timestampComputeAndGraphics             = 1
                timestampPeriod                         = 1.000000
                maxClipDistances                        = 8
                maxCullDistances                        = 8
                maxCombinedClipAndCullDistances         = 8
                discreteQueuePriorities                 = 2
                pointSizeRange[0]                       = 1.000000
                pointSizeRange[1]                       = 2047.937500
                lineWidthRange[0]                       = 1.000000
                lineWidthRange[1]                       = 64.000000
                pointSizeGranularity                    = 0.062500
                lineWidthGranularity                    = 1.000000
                strictLines                             = 1
                standardSampleLocations                 = 1
                optimalBufferCopyOffsetAlignment        = 0x1
                optimalBufferCopyRowPitchAlignment      = 0x1
                nonCoherentAtomSize                     = 0x40
        VkPhysicalDeviceSparseProperties:
        ---------------------------------
                residencyStandard2DBlockShape            = 1
                residencyStandard2DMultisampleBlockShape = 1
                residencyStandard3DBlockShape            = 1
                residencyAlignedMipSize                  = 0
                residencyNonResidentStrict               = 1

VkPhysicalDeviceBlendOperationAdvancedProperties:
=================================================
        advancedBlendMaxColorAttachments               = 8
        advancedBlendIndependentBlend                  = 0
        advancedBlendNonPremultipliedSrcColor          = 1
        advancedBlendNonPremultipliedDstColor          = 1
        advancedBlendCorrelatedOverlap                 = 1
        advancedBlendAllOperations                     = 1

VkPhysicalDevicePointClippingProperties:
========================================
        pointClippingBehavior               = 1

VkPhysicalDevicePushDescriptorProperties:
=========================================
        maxPushDescriptors               = 32

VkPhysicalDeviceDiscardRectangleProperties:
===========================================
        maxDiscardRectangles               = 8

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

VkPhysicalDeviceMaintenance3Properties:
=======================================
        maxPerSetDescriptors    = 4294967295
        maxMemoryAllocationSize = 4292870144

VkPhysicalDeviceIDProperties:
=========================================
        deviceUUID      = 7e20b5c2-85c1-05bf-f66a-15005ab0a4b0
        driverUUID      = f554020a-203f-85f2-f329-21b1d69b410d
        deviceLUIDValid = false

VkPhysicalDeviceDriverProperties:
=================================
        driverID   = 4
        driverName = NVIDIA
        driverInfo = 418.52.16
        conformanceVersion:
                major    = 1
                minor    = 1
                subminor = 4
                patch    = 2

VkPhysicalDeviceFloatControlsProperties:
========================================
        separateDenormSettings       = 1
        separateRoundingModeSettings = 1
        shaderSignedZeroInfNanPreserveFloat16 = 1
        shaderSignedZeroInfNanPreserveFloat32 = 1
        shaderSignedZeroInfNanPreserveFloat64 = 1
        shaderDenormPreserveFloat16          = 1
        shaderDenormPreserveFloat32           = 0
        shaderDenormPreserveFloat64           = 0
        shaderDenormFlushToZeroFloat16        = 0
        shaderDenormFlushToZeroFloat32        = 0
        shaderDenormFlushToZeroFloat64        = 0
        shaderRoundingModeRTEFloat16          = 1
        shaderRoundingModeRTEFloat32          = 1
        shaderRoundingModeRTEFloat64         = 1
        shaderRoundingModeRTZFloat16          = 0
        shaderRoundingModeRTZFloat32          = 1
        shaderRoundingModeRTZFloat64          = 1

VkPhysicalDevicePCIBusInfoProperties
====================================
        pciDomain   = 0
        pciBus      = 3
        pciDevice   = 0
        pciFunction = 0

VkPhysicalDeviceTransformFeedbackProperties
===========================================
        maxTransformFeedbackStreams                = 4
        maxTransformFeedbackBuffers                = 4
        maxTransformFeedbackBufferSize             = 18446744073709551615
        maxTransformFeedbackStreamDataSize         = 2048
        maxTransformFeedbackBufferDataSize         = 512
        maxTransformFeedbackBufferDataStride       = 2048
        transformFeedbackQueries                   = 1
        transformFeedbackStreamsLinesTriangles     = 0
        transformFeedbackRasterizationStreamSelect = 1
        transformFeedbackDraw                      = 1

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

VkPhysicalDeviceDepthStencilResolveProperties
============================================
                supportedDepthResolveModes:
                        VK_RESOLVE_MODE_SAMPLE_ZERO_BIT_KHR
                        VK_RESOLVE_MODE_AVERAGE_BIT_KHR
                        VK_RESOLVE_MODE_MIN_BIT_KHR
                        VK_RESOLVE_MODE_MAX_BIT_KHR
                supportedStencilResolveModes:
                        VK_RESOLVE_MODE_SAMPLE_ZERO_BIT_KHR
                        VK_RESOLVE_MODE_MIN_BIT_KHR
                        VK_RESOLVE_MODE_MAX_BIT_KHR
                independentResolveNone = 1
                independentResolve     = 1

Device Extensions       count = 95
        VK_EXT_blend_operation_advanced     : extension revision  2
        VK_EXT_buffer_device_address        : extension revision  2
        VK_EXT_calibrated_timestamps        : extension revision  1
        VK_EXT_conditional_rendering        : extension revision  1
        VK_EXT_conservative_rasterization   : 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_fragment_shader_interlock    : extension revision  1
        VK_EXT_global_priority              : extension revision  2
        VK_EXT_host_query_reset             : extension revision  1
        VK_EXT_inline_uniform_block         : extension revision  1
        VK_EXT_memory_budget                : extension revision  1
        VK_EXT_pci_bus_info                 : extension revision  2
        VK_EXT_pipeline_creation_feedback   : extension revision  1
        VK_EXT_post_depth_coverage          : extension revision  1
        VK_EXT_sample_locations             : extension revision  1
        VK_EXT_sampler_filter_minmax        : extension revision  1
        VK_EXT_scalar_block_layout          : extension revision  1
        VK_EXT_separate_stencil_usage       : extension revision  1
        VK_EXT_shader_demote_to_helper_invocation: 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_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_KHR_16bit_storage                : extension revision  1
        VK_KHR_8bit_storage                 : extension revision  1
        VK_KHR_bind_memory2                 : 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  3
        VK_KHR_draw_indirect_count          : extension revision  1
        VK_KHR_driver_properties            : 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_get_memory_requirements2     : 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_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  1
        VK_KHR_sampler_ycbcr_conversion     : 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_storage_buffer_storage_class : extension revision  1
        VK_KHR_swapchain                    : extension revision 70
        VK_KHR_swapchain_mutable_format     : extension revision  1
        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_NVX_binary_import                : extension revision  1
        VK_NVX_device_generated_commands    : extension revision  3
        VK_NVX_image_view_handle            : extension revision  1
        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_dedicated_allocation          : extension revision  1
        VK_NV_dedicated_allocation_image_aliasing: extension revision  1
        VK_NV_device_diagnostic_checkpoints : extension revision  2
        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_framebuffer_mixed_samples     : extension revision  1
        VK_NV_geometry_shader_passthrough   : extension revision  1
        VK_NV_mesh_shader                   : extension revision  1
        VK_NV_ray_tracing                   : extension revision  3
        VK_NV_representative_fragment_test  : extension revision  1
        VK_NV_sample_mask_override_coverage : extension revision  1
        VK_NV_scissor_exclusive             : extension revision  1
        VK_NV_shader_image_footprint        : extension revision  1
        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[0]:
===========================
        queueFlags         = GRAPHICS | COMPUTE | TRANSFER | SPARSE
        queueCount         = 16
        timestampValidBits = 64
        minImageTransferGranularity = (1, 1, 1)
        present support    = true

VkQueueFamilyProperties[1]:
===========================
        queueFlags         = TRANSFER
        queueCount         = 2
        timestampValidBits = 64
        minImageTransferGranularity = (1, 1, 1)
        present support    = false

VkQueueFamilyProperties[2]:
===========================
        queueFlags         = COMPUTE
        queueCount         = 8
        timestampValidBits = 64
        minImageTransferGranularity = (1, 1, 1)
        present support:
                VK_KHR_xlib_surface = true
                VK_KHR_xcb_surface = false

VkPhysicalDeviceMemoryProperties:
=================================
        memoryHeapCount       = 2
        memoryHeaps[0] :
                size          = 6442450944 (0x180000000) (6.00 GiB)
                budget        = 3206938624
                usage         = 0
                flags:
                        VK_MEMORY_HEAP_DEVICE_LOCAL_BIT
        memoryHeaps[1] :
                size          = 50616726528 (0xbc8fdf400) (47.14 GiB)
                budget        = 50616726528
                usage         = 2621440
                flags:
                        None
        memoryTypeCount       = 11
        memoryTypes[0] :
                heapIndex     = 1
                propertyFlags = 0x0:
                usable for:
                        OPTIMAL: None
                        LINEAR: None
        memoryTypes[1] :
                heapIndex     = 1
                propertyFlags = 0x0:
                usable for:
                        OPTIMAL: color images
                        LINEAR: None
        memoryTypes[2] :
                heapIndex     = 1
                propertyFlags = 0x0:
                usable for:
                        OPTIMAL: D16_UNORM
                        LINEAR: None
        memoryTypes[3] :
                heapIndex     = 1
                propertyFlags = 0x0:
                usable for:
                        OPTIMAL: X8_D24_UNORM_PACK32, D24_UNORM_S8_UINT
                        LINEAR: None
        memoryTypes[4] :
                heapIndex     = 1
                propertyFlags = 0x0:
                usable for:
                        OPTIMAL: D32_SFLOAT
                        LINEAR: None
        memoryTypes[5] :
                heapIndex     = 1
                propertyFlags = 0x0:
                usable for:
                        OPTIMAL: D32_SFLOAT_S8_UINT
                        LINEAR: None
        memoryTypes[6] :
                heapIndex     = 1
                propertyFlags = 0x0:
                usable for:
                        OPTIMAL: S8_UINT
                        LINEAR: None
        memoryTypes[7] :
                heapIndex     = 0
                propertyFlags = 0x1:
                        VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT
                usable for:
                        OPTIMAL: color images, D16_UNORM, X8_D24_UNORM_PACK32, D32_SFLOAT, S8_UINT, D24_UNORM_S8_UINT, D32_SFLOAT_S8_UINT
                        LINEAR: None
        memoryTypes[8] :
                heapIndex     = 0
                propertyFlags = 0x1:
                        VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT
                usable for:
                        OPTIMAL: None
                        LINEAR: None
        memoryTypes[9] :
                heapIndex     = 1
                propertyFlags = 0x6:
                        VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT
                        VK_MEMORY_PROPERTY_HOST_COHERENT_BIT
                usable for:
                        OPTIMAL: None
                        LINEAR: None
        memoryTypes[10] :
                heapIndex     = 1
                propertyFlags = 0xe:
                        VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT
                        VK_MEMORY_PROPERTY_HOST_COHERENT_BIT
                        VK_MEMORY_PROPERTY_HOST_CACHED_BIT
                usable for:
                        OPTIMAL: None
                        LINEAR: None

VkPhysicalDeviceFeatures:
=========================
        robustBufferAccess                      = 1
        fullDrawIndexUint32                     = 1
        imageCubeArray                          = 1
        independentBlend                        = 1
        geometryShader                          = 1
        tessellationShader                      = 1
        sampleRateShading                       = 1
        dualSrcBlend                            = 1
        logicOp                                 = 1
        multiDrawIndirect                       = 1
        drawIndirectFirstInstance               = 1
        depthClamp                              = 1
        depthBiasClamp                          = 1
        fillModeNonSolid                        = 1
        depthBounds                             = 1
        wideLines                               = 1
        largePoints                             = 1
        alphaToOne                              = 1
        multiViewport                           = 1
        samplerAnisotropy                       = 1
        textureCompressionETC2                  = 0
        textureCompressionASTC_LDR              = 0
        textureCompressionBC                    = 1
        occlusionQueryPrecise                   = 1
        pipelineStatisticsQuery                 = 1
        vertexPipelineStoresAndAtomics          = 1
        fragmentStoresAndAtomics                = 1
        shaderTessellationAndGeometryPointSize  = 1
        shaderImageGatherExtended               = 1
        shaderStorageImageExtendedFormats       = 1
        shaderStorageImageMultisample           = 1
        shaderStorageImageReadWithoutFormat     = 1
        shaderStorageImageWriteWithoutFormat    = 1
        shaderUniformBufferArrayDynamicIndexing = 1
        shaderSampledImageArrayDynamicIndexing  = 1
        shaderStorageBufferArrayDynamicIndexing = 1
        shaderStorageImageArrayDynamicIndexing  = 1
        shaderClipDistance                      = 1
        shaderCullDistance                      = 1
        shaderFloat64                           = 1
        shaderInt64                             = 1
        shaderInt16                             = 1
        shaderResourceResidency                 = 1
        shaderResourceMinLod                    = 1
        sparseBinding                           = 1
        sparseResidencyBuffer                   = 1
        sparseResidencyImage2D                  = 1
        sparseResidencyImage3D                  = 1
        sparseResidency2Samples                 = 1
        sparseResidency4Samples                 = 1
        sparseResidency8Samples                 = 1
        sparseResidency16Samples                = 1
        sparseResidencyAliased                  = 1
        variableMultisampleRate                 = 1
        inheritedQueries                        = 1

VkPhysicalDevice8BitStorageFeatures:
=====================================
        storageBuffer8BitAccess           = 1
        uniformAndStorageBuffer8BitAccess = 1
        storagePushConstant8              = 1

VkPhysicalDevice16BitStorageFeatures:
=====================================
        storageBuffer16BitAccess           = 1
        uniformAndStorageBuffer16BitAccess = 1
        storagePushConstant16              = 1
        storageInputOutput16               = 0

VkPhysicalDeviceSamplerYcbcrConversionFeatures:
===============================================
        samplerYcbcrConversion = 1

VkPhysicalDeviceVariablePointerFeatures:
========================================
        variablePointersStorageBuffer = 1
        variablePointers              = 1

VkPhysicalDeviceBlendOperationAdvancedFeatures:
===============================================
        advancedBlendCoherentOperations = 1

VkPhysicalDeviceMultiviewFeatures:
==================================
        multiview                   = 1
        multiviewGeometryShader     = 1
        multiviewTessellationShader = 1

VkPhysicalDeviceFloat16Int8Features:
====================================
        shaderFloat16 = 1
        shaderInt8    = 1

VkPhysicalDeviceShaderAtomicInt64Features:
==========================================
        shaderBufferInt64Atomics = 1
        shaderSharedInt64Atomics = 1

VkPhysicalDeviceTransformFeedbackFeatures:
==========================================
        transformFeedback = 1
        geometryStreams   = 1

VkPhysicalDeviceScalarBlockLayoutFeatures:
==========================================
        scalarBlockLayout = 1

VkPhysicalDeviceBufferAddressFeatures:
======================================
        bufferDeviceAddress = 1
        bufferDeviceAddressCaptureReplay = 0
        bufferDeviceAddressMultiDevice = 1

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

VkPhysicalDeviceYcbcrImageArraysFeatures:
=========================================
        ycbcrImageArrays = 1

VkPhysicalDeviceHostQueryResetFeatures:
=======================================
        hostQueryReset = 1

Format Properties:
==================

FORMAT_R4G4_UNORM_PACK8,
FORMAT_R4G4B4A4_UNORM_PACK16,
FORMAT_B4G4R4A4_UNORM_PACK16,
FORMAT_B5G6R5_UNORM_PACK16,
FORMAT_R5G5B5A1_UNORM_PACK16,
FORMAT_B5G5R5A1_UNORM_PACK16,
FORMAT_E5B9G9R9_UFLOAT_PACK32:
        linearTiling   FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_BLIT_SRC_BIT
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        optimalTiling  FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_BLIT_SRC_BIT
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        bufferFeatures FormatFeatureFlags:
                VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT

FORMAT_R5G6B5_UNORM_PACK16,
FORMAT_A1R5G5B5_UNORM_PACK16:
        linearTiling   FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_BLIT_SRC_BIT
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        optimalTiling  FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
                VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
                VK_FORMAT_FEATURE_BLIT_SRC_BIT
                VK_FORMAT_FEATURE_BLIT_DST_BIT
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        bufferFeatures FormatFeatureFlags:
                VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT

FORMAT_R8_UNORM,
FORMAT_R8_SNORM,
FORMAT_R8G8_UNORM,
FORMAT_R8G8_SNORM,
FORMAT_R8G8B8A8_UNORM,
FORMAT_R8G8B8A8_SNORM,
FORMAT_B8G8R8A8_UNORM,
FORMAT_A8B8G8R8_UNORM_PACK32,
FORMAT_A8B8G8R8_SNORM_PACK32,
FORMAT_A2B10G10R10_UNORM_PACK32,
FORMAT_R16_UNORM,
FORMAT_R16_SNORM,
FORMAT_R16_SFLOAT,
FORMAT_R16G16_UNORM,
FORMAT_R16G16_SNORM,
FORMAT_R16G16_SFLOAT,
FORMAT_R16G16B16A16_UNORM,
FORMAT_R16G16B16A16_SNORM,
FORMAT_R16G16B16A16_SFLOAT,
FORMAT_R32G32_SFLOAT,
FORMAT_R32G32B32A32_SFLOAT,
FORMAT_B10G11R11_UFLOAT_PACK32:
        linearTiling   FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_BLIT_SRC_BIT
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        optimalTiling  FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
                VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
                VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
                VK_FORMAT_FEATURE_BLIT_SRC_BIT
                VK_FORMAT_FEATURE_BLIT_DST_BIT
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        bufferFeatures FormatFeatureFlags:
                VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT
                VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT
                VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R8_USCALED,
FORMAT_R8_SSCALED,
FORMAT_R8G8_USCALED,
FORMAT_R8G8_SSCALED,
FORMAT_R8G8B8_UNORM,
FORMAT_R8G8B8_SNORM,
FORMAT_R8G8B8_USCALED,
FORMAT_R8G8B8_SSCALED,
FORMAT_R8G8B8_UINT,
FORMAT_R8G8B8_SINT,
FORMAT_B8G8R8_UNORM,
FORMAT_B8G8R8_SNORM,
FORMAT_B8G8R8_USCALED,
FORMAT_B8G8R8_SSCALED,
FORMAT_B8G8R8_UINT,
FORMAT_B8G8R8_SINT,
FORMAT_R8G8B8A8_USCALED,
FORMAT_R8G8B8A8_SSCALED,
FORMAT_B8G8R8A8_USCALED,
FORMAT_B8G8R8A8_SSCALED,
FORMAT_A8B8G8R8_USCALED_PACK32,
FORMAT_A8B8G8R8_SSCALED_PACK32,
FORMAT_A2R10G10B10_SNORM_PACK32,
FORMAT_A2R10G10B10_USCALED_PACK32,
FORMAT_A2R10G10B10_SSCALED_PACK32,
FORMAT_A2R10G10B10_SINT_PACK32,
FORMAT_A2B10G10R10_SNORM_PACK32,
FORMAT_A2B10G10R10_USCALED_PACK32,
FORMAT_A2B10G10R10_SSCALED_PACK32,
FORMAT_A2B10G10R10_SINT_PACK32,
FORMAT_R16_USCALED,
FORMAT_R16_SSCALED,
FORMAT_R16G16_USCALED,
FORMAT_R16G16_SSCALED,
FORMAT_R16G16B16_UNORM,
FORMAT_R16G16B16_SNORM,
FORMAT_R16G16B16_USCALED,
FORMAT_R16G16B16_SSCALED,
FORMAT_R16G16B16_UINT,
FORMAT_R16G16B16_SINT,
FORMAT_R16G16B16_SFLOAT,
FORMAT_R16G16B16A16_USCALED,
FORMAT_R16G16B16A16_SSCALED,
FORMAT_R64_UINT,
FORMAT_R64_SINT,
FORMAT_R64_SFLOAT,
FORMAT_R64G64_UINT,
FORMAT_R64G64_SINT,
FORMAT_R64G64_SFLOAT,
FORMAT_R64G64B64_UINT,
FORMAT_R64G64B64_SINT,
FORMAT_R64G64B64_SFLOAT,
FORMAT_R64G64B64A64_UINT,
FORMAT_R64G64B64A64_SINT,
FORMAT_R64G64B64A64_SFLOAT:
        linearTiling   FormatFeatureFlags:
                None

        optimalTiling  FormatFeatureFlags:
                None

        bufferFeatures FormatFeatureFlags:
                VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R8_UINT,
FORMAT_R8_SINT,
FORMAT_R8G8_UINT,
FORMAT_R8G8_SINT,
FORMAT_R8G8B8A8_UINT,
FORMAT_R8G8B8A8_SINT,
FORMAT_A8B8G8R8_UINT_PACK32,
FORMAT_A8B8G8R8_SINT_PACK32,
FORMAT_A2B10G10R10_UINT_PACK32,
FORMAT_R16_UINT,
FORMAT_R16_SINT,
FORMAT_R16G16_UINT,
FORMAT_R16G16_SINT,
FORMAT_R16G16B16A16_UINT,
FORMAT_R16G16B16A16_SINT,
FORMAT_R32G32_UINT,
FORMAT_R32G32_SINT,
FORMAT_R32G32B32A32_UINT,
FORMAT_R32G32B32A32_SINT:
        linearTiling   FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_BLIT_SRC_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        optimalTiling  FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
                VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
                VK_FORMAT_FEATURE_BLIT_SRC_BIT
                VK_FORMAT_FEATURE_BLIT_DST_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        bufferFeatures FormatFeatureFlags:
                VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT
                VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT
                VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R8_SRGB,
FORMAT_BC1_RGB_UNORM_BLOCK,
FORMAT_BC1_RGB_SRGB_BLOCK,
FORMAT_BC1_RGBA_UNORM_BLOCK,
FORMAT_BC1_RGBA_SRGB_BLOCK,
FORMAT_BC2_UNORM_BLOCK,
FORMAT_BC2_SRGB_BLOCK,
FORMAT_BC3_UNORM_BLOCK,
FORMAT_BC3_SRGB_BLOCK,
FORMAT_BC4_UNORM_BLOCK,
FORMAT_BC4_SNORM_BLOCK,
FORMAT_BC5_UNORM_BLOCK,
FORMAT_BC5_SNORM_BLOCK,
FORMAT_BC6H_UFLOAT_BLOCK,
FORMAT_BC6H_SFLOAT_BLOCK,
FORMAT_BC7_UNORM_BLOCK,
FORMAT_BC7_SRGB_BLOCK:
        linearTiling   FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_BLIT_SRC_BIT
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        optimalTiling  FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_BLIT_SRC_BIT
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        bufferFeatures FormatFeatureFlags:
                None

FORMAT_R8G8B8A8_SRGB,
FORMAT_B8G8R8A8_SRGB,
FORMAT_A8B8G8R8_SRGB_PACK32:
        linearTiling   FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_BLIT_SRC_BIT
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        optimalTiling  FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
                VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
                VK_FORMAT_FEATURE_BLIT_SRC_BIT
                VK_FORMAT_FEATURE_BLIT_DST_BIT
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        bufferFeatures FormatFeatureFlags:
                None

FORMAT_B8G8R8A8_SNORM:
        linearTiling   FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_BLIT_SRC_BIT
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        optimalTiling  FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_BLIT_SRC_BIT
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        bufferFeatures FormatFeatureFlags:
                VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT
                VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_B8G8R8A8_UINT,
FORMAT_B8G8R8A8_SINT,
FORMAT_A2R10G10B10_UINT_PACK32:
        linearTiling   FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_BLIT_SRC_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        optimalTiling  FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_BLIT_SRC_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        bufferFeatures FormatFeatureFlags:
                VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT
                VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_A2R10G10B10_UNORM_PACK32:
        linearTiling   FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_BLIT_SRC_BIT
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        optimalTiling  FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
                VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
                VK_FORMAT_FEATURE_BLIT_SRC_BIT
                VK_FORMAT_FEATURE_BLIT_DST_BIT
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        bufferFeatures FormatFeatureFlags:
                VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT
                VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R32_UINT,
FORMAT_R32_SINT:
        linearTiling   FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_BLIT_SRC_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        optimalTiling  FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
                VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT
                VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
                VK_FORMAT_FEATURE_BLIT_SRC_BIT
                VK_FORMAT_FEATURE_BLIT_DST_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        bufferFeatures FormatFeatureFlags:
                VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT
                VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT
                VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT
                VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R32_SFLOAT:
        linearTiling   FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_BLIT_SRC_BIT
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        optimalTiling  FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
                VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT
                VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
                VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
                VK_FORMAT_FEATURE_BLIT_SRC_BIT
                VK_FORMAT_FEATURE_BLIT_DST_BIT
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        bufferFeatures FormatFeatureFlags:
                VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT
                VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT
                VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT
                VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R32G32B32_UINT,
FORMAT_R32G32B32_SINT:
        linearTiling   FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_BLIT_SRC_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        optimalTiling  FormatFeatureFlags:
                None

        bufferFeatures FormatFeatureFlags:
                VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT
                VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R32G32B32_SFLOAT:
        linearTiling   FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_BLIT_SRC_BIT
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        optimalTiling  FormatFeatureFlags:
                None

        bufferFeatures FormatFeatureFlags:
                VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT
                VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_D16_UNORM,
FORMAT_X8_D24_UNORM_PACK32,
FORMAT_D32_SFLOAT,
FORMAT_D24_UNORM_S8_UINT,
FORMAT_D32_SFLOAT_S8_UINT:
        linearTiling   FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_BLIT_SRC_BIT
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        optimalTiling  FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT
                VK_FORMAT_FEATURE_BLIT_SRC_BIT
                VK_FORMAT_FEATURE_BLIT_DST_BIT
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        bufferFeatures FormatFeatureFlags:
                None

FORMAT_S8_UINT:
        linearTiling   FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_BLIT_SRC_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        optimalTiling  FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT
                VK_FORMAT_FEATURE_BLIT_SRC_BIT
                VK_FORMAT_FEATURE_BLIT_DST_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        bufferFeatures FormatFeatureFlags:
                None

FORMAT_G8B8G8R8_422_UNORM,
FORMAT_B8G8R8G8_422_UNORM,
FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16,
FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16,
FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16,
FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16,
FORMAT_G16B16G16R16_422_UNORM,
FORMAT_B16G16R16G16_422_UNORM:
        linearTiling   FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        optimalTiling  FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        bufferFeatures FormatFeatureFlags:
                None

FORMAT_G8_B8_R8_3PLANE_420_UNORM,
FORMAT_G8_B8R8_2PLANE_420_UNORM,
FORMAT_G8_B8_R8_3PLANE_422_UNORM,
FORMAT_G8_B8R8_2PLANE_422_UNORM,
FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16,
FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16,
FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16,
FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16,
FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16,
FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16,
FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16,
FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16,
FORMAT_G16_B16_R16_3PLANE_420_UNORM,
FORMAT_G16_B16R16_2PLANE_420_UNORM,
FORMAT_G16_B16_R16_3PLANE_422_UNORM,
FORMAT_G16_B16R16_2PLANE_422_UNORM:
        linearTiling   FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        optimalTiling  FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        bufferFeatures FormatFeatureFlags:
                None

FORMAT_G8_B8_R8_3PLANE_444_UNORM,
FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16,
FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16,
FORMAT_G16_B16_R16_3PLANE_444_UNORM:
        linearTiling   FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        optimalTiling  FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        bufferFeatures FormatFeatureFlags:
                None

FORMAT_R10X6_UNORM_PACK16,
FORMAT_R10X6G10X6_UNORM_2PACK16,
FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16,
FORMAT_R12X4_UNORM_PACK16,
FORMAT_R12X4G12X4_UNORM_2PACK16,
FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16:
        linearTiling   FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        optimalTiling  FormatFeatureFlags:
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
                VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
                VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
                VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR

        bufferFeatures FormatFeatureFlags:
                None

Unsupported formats:
FORMAT_UNDEFINED
FORMAT_R8G8_SRGB
FORMAT_R8G8B8_SRGB
FORMAT_B8G8R8_SRGB
FORMAT_D16_UNORM_S8_UINT
FORMAT_ETC2_R8G8B8_UNORM_BLOCK
FORMAT_ETC2_R8G8B8_SRGB_BLOCK
FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK
FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK
FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK
FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK
FORMAT_EAC_R11_UNORM_BLOCK
FORMAT_EAC_R11_SNORM_BLOCK
FORMAT_EAC_R11G11_UNORM_BLOCK
FORMAT_EAC_R11G11_SNORM_BLOCK
FORMAT_ASTC_4x4_UNORM_BLOCK
FORMAT_ASTC_4x4_SRGB_BLOCK
FORMAT_ASTC_5x4_UNORM_BLOCK
FORMAT_ASTC_5x4_SRGB_BLOCK
FORMAT_ASTC_5x5_UNORM_BLOCK
FORMAT_ASTC_5x5_SRGB_BLOCK
FORMAT_ASTC_6x5_UNORM_BLOCK
FORMAT_ASTC_6x5_SRGB_BLOCK
FORMAT_ASTC_6x6_UNORM_BLOCK
FORMAT_ASTC_6x6_SRGB_BLOCK
FORMAT_ASTC_8x5_UNORM_BLOCK
FORMAT_ASTC_8x5_SRGB_BLOCK
FORMAT_ASTC_8x6_UNORM_BLOCK
FORMAT_ASTC_8x6_SRGB_BLOCK
FORMAT_ASTC_8x8_UNORM_BLOCK
FORMAT_ASTC_8x8_SRGB_BLOCK
FORMAT_ASTC_10x5_UNORM_BLOCK
FORMAT_ASTC_10x5_SRGB_BLOCK
FORMAT_ASTC_10x6_UNORM_BLOCK
FORMAT_ASTC_10x6_SRGB_BLOCK
FORMAT_ASTC_10x8_UNORM_BLOCK
FORMAT_ASTC_10x8_SRGB_BLOCK
FORMAT_ASTC_10x10_UNORM_BLOCK
FORMAT_ASTC_10x10_SRGB_BLOCK
FORMAT_ASTC_12x10_UNORM_BLOCK
FORMAT_ASTC_12x10_SRGB_BLOCK
FORMAT_ASTC_12x12_UNORM_BLOCK
FORMAT_ASTC_12x12_SRGB_BLOCK

fail build in linux

Hi

i try to build this project in my linux, and i found some problesms: (using CMake 3.14.0 and GCC 8.2.1)

seems assimp cmake configuration files is named with caps. because of this, cmake failed to find it because cmake is case sensitive

CMake Error at cmake/Findassimp.cmake:74 (message):
  Could not find asset importer library
Call Stack (most recent call first):
  src/raytrace/CMakeLists.txt:9 (find_package)


-- Configuring incomplete, errors occurred!

after fix the assim problem with rename assim to ASSIM in all cmake files, failed in some cmakefiles about missing Qt options

-- Configuring done
CMake Warning (dev) in 3rdparty/spirv_reflect/CMakeLists.txt:
  AUTOGEN: No valid Qt version found for target spirv_reflect.  AUTOMOC and
  AUTORCC disabled.  Consider adding:

    find_package(Qt<QTVERSION> COMPONENTS Core)

  to your CMakeLists.txt file.
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) in 3rdparty/stb/CMakeLists.txt:
  AUTOGEN: No valid Qt version found for target stb.  AUTOMOC and AUTORCC
  disabled.  Consider adding:

    find_package(Qt<QTVERSION> COMPONENTS Core)

  to your CMakeLists.txt file.
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) in 3rdparty/volk/CMakeLists.txt:
  AUTOGEN: No valid Qt version found for target volk.  AUTOMOC and AUTORCC
  disabled.  Consider adding:

    find_package(Qt<QTVERSION> COMPONENTS Core)

  to your CMakeLists.txt file.
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) in 3rdparty/vma/CMakeLists.txt:
  AUTOGEN: No valid Qt version found for target vma.  AUTOMOC and AUTORCC
  disabled.  Consider adding:

    find_package(Qt<QTVERSION> COMPONENTS Core)

  to your CMakeLists.txt file.
This warning is for project developers.  Use -Wno-dev to suppress it.

after adding the options find_package(Qt5 COMPONENTS Core) in the conflictive files, now start build, but:

[ 16%] Building CXX object src/raytrace/CMakeFiles/Qt3DRaytrace.dir/Qt3DRaytrace_autogen/mocs_compilation.cpp.o
In file included from /home/sl1pkn07/aplicaciones/quartz/Quartz/src/raytrace/renderers/vulkan/managers/scenemanager.h:12,
                 from /home/sl1pkn07/aplicaciones/quartz/Quartz/build/src/raytrace/Qt3DRaytrace_autogen/53G42B54XP/../../../../../src/raytrace/renderers/vulkan/renderer.h:18,
                 from /home/sl1pkn07/aplicaciones/quartz/Quartz/build/src/raytrace/Qt3DRaytrace_autogen/53G42B54XP/moc_renderer.cpp:9,
                 from /home/sl1pkn07/aplicaciones/quartz/Quartz/build/src/raytrace/Qt3DRaytrace_autogen/mocs_compilation.cpp:2:
/home/sl1pkn07/aplicaciones/quartz/Quartz/src/raytrace/renderers/vulkan/glsl.h: En el constructor ‘Qt3DRaytrace::Vulkan::mat4x4::mat4x4(const QMatrix4x4&)’:
/home/sl1pkn07/aplicaciones/quartz/Quartz/src/raytrace/renderers/vulkan/glsl.h:94:14: error: ‘memcpy’ no es un miembro de ‘std’
         std::memcpy(data, m.constData(), sizeof(*this));
              ^~~~~~
/home/sl1pkn07/aplicaciones/quartz/Quartz/src/raytrace/renderers/vulkan/glsl.h:94:14: nota: suggested alternative: ‘mem_fn’
         std::memcpy(data, m.constData(), sizeof(*this));
              ^~~~~~
              mem_fn
/home/sl1pkn07/aplicaciones/quartz/Quartz/src/raytrace/renderers/vulkan/glsl.h: En el constructor ‘Qt3DRaytrace::Vulkan::mat3x4::mat3x4(const QMatrix3x4&)’:
/home/sl1pkn07/aplicaciones/quartz/Quartz/src/raytrace/renderers/vulkan/glsl.h:104:14: error: ‘memcpy’ no es un miembro de ‘std’
         std::memcpy(data, m.constData(), sizeof(*this));
              ^~~~~~
/home/sl1pkn07/aplicaciones/quartz/Quartz/src/raytrace/renderers/vulkan/glsl.h:104:14: nota: suggested alternative: ‘mem_fn’
         std::memcpy(data, m.constData(), sizeof(*this));
              ^~~~~~
              mem_fn
make[2]: *** [src/raytrace/CMakeFiles/Qt3DRaytrace.dir/build.make:78: src/raytrace/CMakeFiles/Qt3DRaytrace.dir/Qt3DRaytrace_autogen/mocs_compilation.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:501: src/raytrace/CMakeFiles/Qt3DRaytrace.dir/all] Error 2

adding #include <cstrings> in the src/raytrace/renderers/vulkan/glsl.h file solved the error, but now:

[ 22%] Building CXX object src/raytrace/CMakeFiles/Qt3DRaytrace.dir/frontend/qmaterial.cpp.o
In file included from /home/sl1pkn07/aplicaciones/quartz/Quartz/src/raytrace/frontend/qmaterial.cpp:8:
/home/sl1pkn07/aplicaciones/quartz/Quartz/src/raytrace/frontend/qabstracttexture_p.h:32:72: error: ‘unique_ptr’ no es un miembro de ‘std’
 using QTextureImageChange = Qt3DCore::QTypedPropertyUpdatedChange<std::unique_ptr<QTextureImage>>;
                                                                        ^~~~~~~~~~
/home/sl1pkn07/aplicaciones/quartz/Quartz/src/raytrace/frontend/qabstracttexture_p.h:32:72: nota: ‘std::unique_ptr’ is defined in header ‘<memory>’; did you forget to ‘#include <memory>’?
/home/sl1pkn07/aplicaciones/quartz/Quartz/src/raytrace/frontend/qabstracttexture_p.h:10:1:
+#include <memory>
 #include <Qt3DCore/private/qnode_p.h>
/home/sl1pkn07/aplicaciones/quartz/Quartz/src/raytrace/frontend/qabstracttexture_p.h:32:72:
 using QTextureImageChange = Qt3DCore::QTypedPropertyUpdatedChange<std::unique_ptr<QTextureImage>>;
                                                                        ^~~~~~~~~~
/home/sl1pkn07/aplicaciones/quartz/Quartz/src/raytrace/frontend/qabstracttexture_p.h:32:72: error: ‘unique_ptr’ no es un miembro de ‘std’
/home/sl1pkn07/aplicaciones/quartz/Quartz/src/raytrace/frontend/qabstracttexture_p.h:32:72: nota: ‘std::unique_ptr’ is defined in header ‘<memory>’; did you forget to ‘#include <memory>’?
/home/sl1pkn07/aplicaciones/quartz/Quartz/src/raytrace/frontend/qabstracttexture_p.h:32:83: error: el argumento de plantilla 1 es no válido
 using QTextureImageChange = Qt3DCore::QTypedPropertyUpdatedChange<std::unique_ptr<QTextureImage>>;
                                                                                   ^~~~~~~~~~~~~
/home/sl1pkn07/aplicaciones/quartz/Quartz/src/raytrace/frontend/qabstracttexture_p.h:33:78: error: ‘unique_ptr’ no es un miembro de ‘std’
 using QTextureImageChangePtr = Qt3DCore::QTypedPropertyUpdatedChangePtr<std::unique_ptr<QTextureImage>>;
                                                                              ^~~~~~~~~~
/home/sl1pkn07/aplicaciones/quartz/Quartz/src/raytrace/frontend/qabstracttexture_p.h:33:78: nota: ‘std::unique_ptr’ is defined in header ‘<memory>’; did you forget to ‘#include <memory>’?
/home/sl1pkn07/aplicaciones/quartz/Quartz/src/raytrace/frontend/qabstracttexture_p.h:33:78: error: ‘unique_ptr’ no es un miembro de ‘std’
/home/sl1pkn07/aplicaciones/quartz/Quartz/src/raytrace/frontend/qabstracttexture_p.h:33:78: nota: ‘std::unique_ptr’ is defined in header ‘<memory>’; did you forget to ‘#include <memory>’?
/home/sl1pkn07/aplicaciones/quartz/Quartz/src/raytrace/frontend/qabstracttexture_p.h:33:89: error: el argumento de plantilla 1 es no válido
 using QTextureImageChangePtr = Qt3DCore::QTypedPropertyUpdatedChangePtr<std::unique_ptr<QTextureImage>>;
                                                                                         ^~~~~~~~~~~~~
make[2]: *** [src/raytrace/CMakeFiles/Qt3DRaytrace.dir/build.make:156: src/raytrace/CMakeFiles/Qt3DRaytrace.dir/frontend/qmaterial.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:501: src/raytrace/CMakeFiles/Qt3DRaytrace.dir/all] Error 2

and finaly after fix the error adding #include <memory> to src/raytrace/frontend/qabstracttexture_p.h:

[ 20%] Building CXX object src/raytrace/CMakeFiles/Qt3DRaytrace.dir/backend/abstracttexture.cpp.o
/home/sl1pkn07/aplicaciones/quartz/Quartz/apps/scene2qml/importer.cpp: En la función miembro ‘Entity* Importer::processScene(const aiScene*)’:
/home/sl1pkn07/aplicaciones/quartz/Quartz/apps/scene2qml/importer.cpp:67:60: error: ‘const struct aiTexture’ has no member named ‘mFilename’
         textureComponent.name = QString::fromUtf8(texture->mFilename.C_Str());
                                                            ^~~~~~~~~
make[2]: *** [apps/scene2qml/CMakeFiles/scene2qml.dir/build.make:89: apps/scene2qml/CMakeFiles/scene2qml.dir/importer.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:1046: apps/scene2qml/CMakeFiles/scene2qml.dir/all] Error 2

i'm stuck here. how i can fix this? my coder skill is lower than poor :/. can you help me?

i can upload a PR with the finded fixes

greetings

Windows build error

Use the cmake tool with MSVC 2017 configure, reports this error. Maybe some file is missing.

CMake Error at src/raytrace/CMakeLists.txt:109 (add_library):
Cannot find source file:

renderers/vulkan/shaders/vulkan_shaders.qrc

unresolved external symbol "int __cdecl qInitResources_vulkan_shaders(void)

When I build the source code with VS2017 under windows 10, it report below error, anyone meet the same issue?

Severity Code Description Project File Line Suppression State
Error LNK2019 unresolved external symbol "int __cdecl qInitResources_vulkan_shaders(void)" (?qInitResources_vulkan_shaders@@yahxz) referenced in function "void __cdecl initializeResources(void)" (?initializeResources@@yaxxz) Qt3DRaytrace E:\ykli\workspace\Quartz\build\src\raytrace\renderer.obj 1

Image Texture is not shown

Hi @Nadrin,

So I've managed to run your raytrace-cpp example and also tried using QMaterial::setAlbedoTexture/setRoughnessTexture/setMetalnessTexture(QAbstractTexture *texture) as follows:

QAbstractTexture* QMaterial::createTexture(const QString& textureFilePath)
{
    auto* texture = new Qt3DRaytrace::QAbstractTexture(this);
    auto* textureImage = new Qt3DRaytrace::QTextureImage(texture);

    QImage image;
    image.load(textureFilePath);
    QByteArray arr;
    QDataStream ds(&arr, QIODevice::ReadWrite);
    ds.writeRawData((const char*)image.bits(), image.sizeInBytes());

    Qt3DRaytrace::QImageData imageData;
    imageData.format = Qt3DRaytrace::QImageData::Format::RGBA;
    imageData.width = 854;
    imageData.height = 854;
    imageData.channels = 4;
    imageData.type = Qt3DRaytrace::QImageData::ValueType::Float16;
    imageData.data = arr;
    textureImage->setData(imageData);

    return texture;
}

void QMaterial::setAlbedoTexture(const QString& textureFilePath)
{
    setAlbedoTexture(createTexture(textureFilePath));
}

However, I could not see them be reflected on the mesh.
Do you happen to have an example using those APIs?

By the way, I also printed out member values of imageData fetched in UploadTextureJob::run() and they are correct, which means the image has been loaded and ready to be uploaded to GPU.

Thank you.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.