DTolm / VkFFT

Vulkan/CUDA/HIP/OpenCL/Level Zero/Metal Fast Fourier Transform library
MIT License
1.55k stars 94 forks source link

Raspberry Pi 4 #19

Open kleinl opened 3 years ago

kleinl commented 3 years ago

The raspberry pi 4 got a vulkan driver some weeks ago and I wanted to try if I can get VkFFT running. The precision results of running ./Vulkan_FFT -vkfft 11` look as follows:

11 - VkFFT/FFTW C2C precision test in single precision
VkFFT System: 32x1x1 avg_difference: 4.210443 max_difference: 11.260108 avg_eps: 1.013775 max_eps: 1.678629
VkFFT System: 64x1x1 avg_difference: 6.011346 max_difference: 16.996910 avg_eps: 1.015163 max_eps: 1.728844
VkFFT System: 128x1x1 avg_difference: 7.739901 max_difference: 20.079729 avg_eps: 1.002452 max_eps: 1.615784
VkFFT System: 256x1x1 avg_difference: 11.449183 max_difference: 36.175850 avg_eps: 1.020900 max_eps: 2.139938
VkFFT System: 512x1x1 avg_difference: 16.608913 max_difference: 48.377995 avg_eps: 1.005776 max_eps: 2.111690
VkFFT System: 1024x1x1 avg_difference: 23.274626 max_difference: 67.035599 avg_eps: 1.001270 max_eps: 1.506914
VkFFT System: 2048x1x1 avg_difference: 32.783424 max_difference: 101.897461 avg_eps: 1.001845 max_eps: 2.103968
VkFFT System: 4096x1x1 avg_difference: 46.165894 max_difference: 154.442322 avg_eps: 1.000973 max_eps: 1.426838
VkFFT System: 8192x1x1 avg_difference: 65.744987 max_difference: 238.900620 avg_eps: 0.999933 max_eps: 1.604411
VkFFT System: 16384x1x1 avg_difference: 92.832741 max_difference: 335.043823 avg_eps: 1.000153 max_eps: 1.980254
VkFFT System: 32768x1x1 avg_difference: 130.892410 max_difference: 503.015656 avg_eps: 1.000137 max_eps: 1.570149
VkFFT System: 65536x1x1 avg_difference: 185.043289 max_difference: 726.917480 avg_eps: 1.000051 max_eps: 2.197726
VkFFT System: 131072x1x1 avg_difference: 262.086639 max_difference: 1031.330566 avg_eps: 1.000044 max_eps: 3.638197
VkFFT System: 262144x1x1 avg_difference: 370.687378 max_difference: 1480.791260 avg_eps: 1.000040 max_eps: 6.577468
VkFFT System: 524288x1x1 avg_difference: 523.781616 max_difference: 2129.027832 avg_eps: 0.999997 max_eps: 1.553625
VkFFT System: 1048576x1x1 avg_difference: 741.405579 max_difference: 3288.805908 avg_eps: 1.000000 max_eps: 1.452406
VkFFT System: 2097152x1x1 avg_difference: 1048.030029 max_difference: 4571.413574 avg_eps: 1.000000 max_eps: 1.693890
VkFFT System: 4194304x1x1 avg_difference: 1481.965088 max_difference: 6517.591797 avg_eps: 1.000000 max_eps: 1.335009
VkFFT System: 8388608x1x1 avg_difference: 2095.434570 max_difference: 9311.947266 avg_eps: 1.000000 max_eps: 1.520402

On my other machines it is running fine but there seems to be a problem here. This might has to do with the 32-Bit architecture? Maybe I should add here that I checked already the results for correctness and the ones from fftw are correct. Best regards

DTolm commented 3 years ago

I haven't tried VkFFT on portable devices and I don't know much about the GPU in raspberry pi 4 (if you can provide some information similar to gpuinfo report, that can be immensely useful).

As I see it has only Vulkan 1.0 support, have you changed to it in CMakeLists (VK_API_VERSION=10)?

If you uncomment the following line: printf("%f %f - %f %f \n", output_FFTW[i + j dims[0] + l dims[0] dims[1]][0] / N, output_FFTW[i + j dims[0] + l dims[0] dims[1]][1] / N, output_VkFFT[(loc_i + loc_j dims[0] + loc_l dims[0] dims[1])][0], output_VkFFT[(loc_i + loc_j dims[0] + loc_l dims[0] dims[1])][1]); The code will print what it outputs comparing to fftw. We should start with the smallest failing system (32x1x1 in this case)

Best regards, Dmitrii

kleinl commented 3 years ago

Thanks for your response, here is the output of vulkaninfo:

==========
VULKANINFO
==========

Vulkan Instance Version: 1.1.97

Instance Extensions:
====================
Instance Extensions count = 9
    VK_EXT_debug_report                 : extension revision  9
    VK_EXT_debug_utils                  : extension revision  1
    VK_KHR_display                      : extension revision 23
    VK_KHR_external_memory_capabilities : 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_xcb_surface                  : extension revision  6
    VK_KHR_xlib_surface                 : extension revision  6
Layers: count = 2
=======
VK_LAYER_LUNARG_standard_validation (LunarG Standard Validation Layer) Vulkan version 1.0.97, layer version 1
    Layer Extensions    count = 0
    Devices     count = 2
        GPU id       : 0 (V3D 4.2)
        Layer-Device Extensions count = 0
        GPU id       : 1 (V3D 4.2)
        Layer-Device Extensions count = 0

VK_LAYER_MESA_overlay (Mesa Overlay layer) Vulkan version 1.1.73, layer version 1
    Layer Extensions    count = 0
    Devices     count = 2
        GPU id       : 0 (V3D 4.2)
        Layer-Device Extensions count = 0
        GPU id       : 1 (V3D 4.2)
        Layer-Device Extensions count = 0

Presentable Surfaces:
=====================
None found

Device Properties and Extensions :
==================================
GPU0
VkPhysicalDeviceProperties:
===========================
    apiVersion     = 0x40009b  (1.0.155)
    driverVersion  = 88080483 (0x5400063)
    vendorID       = 0x14e4
    deviceID       = 0x002a
    deviceType     = INTEGRATED_GPU
    deviceName     = V3D 4.2
    VkPhysicalDeviceLimits:
    -----------------------
        maxImageDimension1D                     = 4096
        maxImageDimension2D                     = 4096
        maxImageDimension3D                     = 4096
        maxImageDimensionCube                   = 4096
        maxImageArrayLayers                     = 2048
        maxTexelBufferElements                  = 0x10000000
        maxUniformBufferRange                   = 0x8000000
        maxStorageBufferRange                   = 0x8000000
        maxPushConstantsSize                    = 128
        maxMemoryAllocationCount                = 86691
        maxSamplerAllocationCount               = 65536
        bufferImageGranularity                  = 0x100
        sparseAddressSpaceSize                  = 0x0
        maxBoundDescriptorSets                  = 16
        maxPerStageDescriptorSamplers           = 16
        maxPerStageDescriptorUniformBuffers     = 12
        maxPerStageDescriptorStorageBuffers     = 12
        maxPerStageDescriptorSampledImages      = 16
        maxPerStageDescriptorStorageImages      = 4
        maxPerStageDescriptorInputAttachments   = 4
        maxPerStageResources                    = 128
        maxDescriptorSetSamplers                = 96
        maxDescriptorSetUniformBuffers          = 72
        maxDescriptorSetUniformBuffersDynamic   = 8
        maxDescriptorSetStorageBuffers          = 72
        maxDescriptorSetStorageBuffersDynamic   = 36
        maxDescriptorSetSampledImages           = 96
        maxDescriptorSetStorageImages           = 24
        maxDescriptorSetInputAttachments        = 4
        maxVertexInputAttributes                = 16
        maxVertexInputBindings                  = 16
        maxVertexInputAttributeOffset           = 0xffffffff
        maxVertexInputBindingStride             = 0xffffffff
        maxVertexOutputComponents               = 64
        maxTessellationGenerationLevel          = 0
        maxTessellationPatchSize                        = 0
        maxTessellationControlPerVertexInputComponents  = 0
        maxTessellationControlPerVertexOutputComponents = 0
        maxTessellationControlPerPatchOutputComponents  = 0
        maxTessellationControlTotalOutputComponents     = 0
        maxTessellationEvaluationInputComponents        = 0
        maxTessellationEvaluationOutputComponents       = 0
        maxGeometryShaderInvocations            = 0
        maxGeometryInputComponents              = 0
        maxGeometryOutputComponents             = 0
        maxGeometryOutputVertices               = 0
        maxGeometryTotalOutputComponents        = 0
        maxFragmentInputComponents              = 64
        maxFragmentOutputAttachments            = 4
        maxFragmentDualSrcAttachments           = 0
        maxFragmentCombinedOutputResources      = 20
        maxComputeSharedMemorySize              = 0x4000
        maxComputeWorkGroupCount[0]             = 65535
        maxComputeWorkGroupCount[1]             = 65535
        maxComputeWorkGroupCount[2]             = 65535
        maxComputeWorkGroupInvocations          = 256
        maxComputeWorkGroupSize[0]              = 256
        maxComputeWorkGroupSize[1]              = 256
        maxComputeWorkGroupSize[2]              = 256
        subPixelPrecisionBits                   = 6
        subTexelPrecisionBits                   = 8
        mipmapPrecisionBits                     = 8
        maxDrawIndexedIndexValue                = 16777215
        maxDrawIndirectCount                    = 2147483647
        maxSamplerLodBias                       = 14.000000
        maxSamplerAnisotropy                    = 16.000000
        maxViewports                            = 1
        maxViewportDimensions[0]                = 4096
        maxViewportDimensions[1]                = 4096
        viewportBoundsRange[0]                  =  -8192.000000
        viewportBoundsRange[1]                  =   8191.000000
        viewportSubPixelBits                    = 0
        minMemoryMapAlignment                   = 4096
        minTexelBufferOffsetAlignment           = 0x100
        minUniformBufferOffsetAlignment         = 0x20
        minStorageBufferOffsetAlignment         = 0x20
        minTexelOffset                          =  -8
        maxTexelOffset                          =   7
        minTexelGatherOffset                    =  -8
        maxTexelGatherOffset                    =   7
        minInterpolationOffset                  = -0.500000
        maxInterpolationOffset                  =  0.500000
        subPixelInterpolationOffsetBits         = 6
        maxFramebufferWidth                     = 4096
        maxFramebufferHeight                    = 4096
        maxFramebufferLayers                    = 256
        framebufferColorSampleCounts            = 5
        framebufferDepthSampleCounts            = 5
        framebufferStencilSampleCounts          = 5
        framebufferNoAttachmentsSampleCounts    = 5
        maxColorAttachments                     = 4
        sampledImageColorSampleCounts           = 5
        sampledImageDepthSampleCounts           = 5
        sampledImageStencilSampleCounts         = 5
        sampledImageIntegerSampleCounts         = 5
        storageImageSampleCounts                = 1
        maxSampleMaskWords                      = 1
        timestampComputeAndGraphics             = 1
        timestampPeriod                         = 1.000000
        maxClipDistances                        = 8
        maxCullDistances                        = 0
        maxCombinedClipAndCullDistances         = 8
        discreteQueuePriorities                 = 2
        pointSizeRange[0]                       = 0.000000
        pointSizeRange[1]                       = 512.000000
        lineWidthRange[0]                       = 1.000000
        lineWidthRange[1]                       = 32.000000
        pointSizeGranularity                    = 0.000000
        lineWidthGranularity                    = 0.000000
        strictLines                             = 1
        standardSampleLocations                 = 0
        optimalBufferCopyOffsetAlignment        = 0x20
        optimalBufferCopyRowPitchAlignment      = 0x20
        nonCoherentAtomSize                     = 0x100
    VkPhysicalDeviceSparseProperties:
    ---------------------------------
        residencyStandard2DBlockShape            = 0
        residencyStandard2DMultisampleBlockShape = 0
        residencyStandard3DBlockShape            = 0
        residencyAlignedMipSize                  = 0
        residencyNonResidentStrict               = 0

VkPhysicalDeviceMaintenance3Properties:
=======================================
    maxPerSetDescriptors    = 0
    maxMemoryAllocationSize = 0

VkPhysicalDeviceIDProperties:
=========================================
    deviceUUID      = e8c1c12d-2325-2af0-b0e8-66d7e87e7189
    driverUUID      = 62181956-a95d-ff6a-7794-5e26f9014318
    deviceLUIDValid = false

Device Extensions   count = 6
    VK_EXT_external_memory_dma_buf      : extension revision  1
    VK_EXT_private_data                 : extension revision  1
    VK_KHR_external_memory              : extension revision  1
    VK_KHR_external_memory_fd           : extension revision  1
    VK_KHR_maintenance1                 : extension revision  2
    VK_KHR_swapchain                    : extension revision 68

VkQueueFamilyProperties[0]:
===========================
    queueFlags         = GRAPHICS | COMPUTE | TRANSFER
    queueCount         = 1
    timestampValidBits = 64
    minImageTransferGranularity = (1, 1, 1)

VkPhysicalDeviceMemoryProperties:
=================================
    memoryHeapCount       = 1
    memoryHeaps[0] :
        size          = 355088384 (0x152a3800) (338.64 MiB)
        flags:
            VK_MEMORY_HEAP_DEVICE_LOCAL_BIT
    memoryTypeCount       = 1
    memoryTypes[0] :
        heapIndex     = 0
        propertyFlags = 0x7:
            VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT
            VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT
            VK_MEMORY_PROPERTY_HOST_COHERENT_BIT

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

Format Properties:
==================
FORMAT_UNDEFINED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R4G4_UNORM_PACK8:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R4G4B4A4_UNORM_PACK16:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_B4G4R4A4_UNORM_PACK16:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_R5G6B5_UNORM_PACK16:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_B5G6R5_UNORM_PACK16:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R5G5B5A1_UNORM_PACK16:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_B5G5R5A1_UNORM_PACK16:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_A1R5G5B5_UNORM_PACK16:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_R8_UNORM:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_SNORM:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_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_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_STORAGE_TEXEL_BUFFER_BIT
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R8_USCALED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R8_SSCALED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R8_UINT:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_R8_SINT:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_R8_SRGB:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R8G8_UNORM:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_R8G8_SNORM:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_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_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_STORAGE_TEXEL_BUFFER_BIT
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R8G8_USCALED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R8G8_SSCALED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R8G8_UINT:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_R8G8_SINT:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_R8G8_SRGB:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R8G8B8_UNORM:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R8G8B8_SNORM:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R8G8B8_USCALED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R8G8B8_SSCALED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R8G8B8_UINT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R8G8B8_SINT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R8G8B8_SRGB:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_B8G8R8_UNORM:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_B8G8R8_SNORM:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_B8G8R8_USCALED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_B8G8R8_SSCALED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_B8G8R8_UINT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_B8G8R8_SINT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_B8G8R8_SRGB:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R8G8B8A8_UNORM:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_R8G8B8A8_SNORM:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_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_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_STORAGE_TEXEL_BUFFER_BIT
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R8G8B8A8_USCALED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R8G8B8A8_SSCALED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R8G8B8A8_UINT:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_R8G8B8A8_SINT:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_R8G8B8A8_SRGB:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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:
        None

FORMAT_B8G8R8A8_UNORM:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_B8G8R8A8_SNORM:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_B8G8R8A8_USCALED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_B8G8R8A8_SSCALED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_B8G8R8A8_UINT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_B8G8R8A8_SINT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_B8G8R8A8_SRGB:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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:
        None

FORMAT_A8B8G8R8_UNORM_PACK32:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_A8B8G8R8_SNORM_PACK32:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_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_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_STORAGE_TEXEL_BUFFER_BIT
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_A8B8G8R8_USCALED_PACK32:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_A8B8G8R8_SSCALED_PACK32:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_A8B8G8R8_UINT_PACK32:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_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_A8B8G8R8_SINT_PACK32:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_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_A8B8G8R8_SRGB_PACK32:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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:
        None

FORMAT_A2R10G10B10_UNORM_PACK32:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_A2R10G10B10_SNORM_PACK32:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_A2R10G10B10_USCALED_PACK32:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_A2R10G10B10_SSCALED_PACK32:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_A2R10G10B10_UINT_PACK32:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_A2R10G10B10_SINT_PACK32:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_A2B10G10R10_UNORM_PACK32:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_A2B10G10R10_SNORM_PACK32:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_A2B10G10R10_USCALED_PACK32:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_A2B10G10R10_SSCALED_PACK32:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_A2B10G10R10_UINT_PACK32:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_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

FORMAT_A2B10G10R10_SINT_PACK32:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R16_UNORM:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_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_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_STORAGE_TEXEL_BUFFER_BIT
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R16_SNORM:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_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_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_STORAGE_TEXEL_BUFFER_BIT
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R16_USCALED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R16_SSCALED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R16_UINT:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_R16_SINT:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_R16_SFLOAT:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_R16G16_UNORM:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_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_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_STORAGE_TEXEL_BUFFER_BIT
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R16G16_SNORM:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_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_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_STORAGE_TEXEL_BUFFER_BIT
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R16G16_USCALED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R16G16_SSCALED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R16G16_UINT:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_R16G16_SINT:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_R16G16_SFLOAT:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_R16G16B16_UNORM:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R16G16B16_SNORM:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R16G16B16_USCALED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R16G16B16_SSCALED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R16G16B16_UINT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R16G16B16_SINT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R16G16B16_SFLOAT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R16G16B16A16_UNORM:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_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_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_STORAGE_TEXEL_BUFFER_BIT
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R16G16B16A16_SNORM:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_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_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_STORAGE_TEXEL_BUFFER_BIT
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R16G16B16A16_USCALED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R16G16B16A16_SSCALED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R16G16B16A16_UINT:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_R16G16B16A16_SINT:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_R16G16B16A16_SFLOAT:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_R32_UINT:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_SINT:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_R32G32_UINT:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_R32G32_SINT:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_R32G32_SFLOAT:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_R32G32B32_UINT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R32G32B32_SINT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R32G32B32_SFLOAT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R32G32B32A32_UINT:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_R32G32B32A32_SINT:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_R32G32B32A32_SFLOAT:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_R64_UINT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R64_SINT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R64_SFLOAT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R64G64_UINT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R64G64_SINT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R64G64_SFLOAT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R64G64B64_UINT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R64G64B64_SINT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R64G64B64_SFLOAT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R64G64B64A64_UINT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R64G64B64A64_SINT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R64G64B64A64_SFLOAT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_B10G11R11_UFLOAT_PACK32:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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

FORMAT_E5B9G9R9_UFLOAT_PACK32:
    linearTiling   FormatFeatureFlags:
        None
    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_D16_UNORM:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_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_X8_D24_UNORM_PACK32:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_D32_SFLOAT:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_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_S8_UINT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_D16_UNORM_S8_UINT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_D24_UNORM_S8_UINT:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_D32_SFLOAT_S8_UINT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_BC1_RGB_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_BC1_RGB_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_BC1_RGBA_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_BC1_RGBA_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_BC2_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_BC2_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_BC3_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_BC3_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_BC4_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_BC4_SNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_BC5_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_BC5_SNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_BC6H_UFLOAT_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_BC6H_SFLOAT_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_BC7_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_BC7_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ETC2_R8G8B8_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    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_ETC2_R8G8B8_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    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_ETC2_R8G8B8A1_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    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_ETC2_R8G8B8A1_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    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_ETC2_R8G8B8A8_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    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_ETC2_R8G8B8A8_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    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_EAC_R11_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    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_EAC_R11_SNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    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_EAC_R11G11_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    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_EAC_R11G11_SNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    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_ASTC_4x4_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_4x4_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_5x4_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_5x4_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_5x5_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_5x5_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_6x5_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_6x5_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_6x6_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_6x6_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_8x5_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_8x5_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_8x6_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_8x6_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_8x8_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_8x8_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_10x5_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_10x5_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_10x6_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_10x6_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_10x8_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_10x8_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_10x10_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_10x10_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_12x10_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_12x10_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_12x12_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_12x12_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_G8B8G8R8_422_UNORM:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_B8G8R8G8_422_UNORM:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_G8_B8_R8_3PLANE_420_UNORM:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_G8_B8R8_2PLANE_420_UNORM:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_G8_B8_R8_3PLANE_422_UNORM:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_G8_B8R8_2PLANE_422_UNORM:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_G8_B8_R8_3PLANE_444_UNORM:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R10X6_UNORM_PACK16:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R10X6G10X6_UNORM_2PACK16:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R12X4_UNORM_PACK16:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R12X4G12X4_UNORM_2PACK16:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_G16B16G16R16_422_UNORM:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_B16G16R16G16_422_UNORM:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_G16_B16_R16_3PLANE_420_UNORM:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_G16_B16R16_2PLANE_420_UNORM:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_G16_B16_R16_3PLANE_422_UNORM:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_G16_B16R16_2PLANE_422_UNORM:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_G16_B16_R16_3PLANE_444_UNORM:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

Device Properties and Extensions :
==================================
GPU1
VkPhysicalDeviceProperties:
===========================
    apiVersion     = 0x40009b  (1.0.155)
    driverVersion  = 88080483 (0x5400063)
    vendorID       = 0x14e4
    deviceID       = 0x002a
    deviceType     = INTEGRATED_GPU
    deviceName     = V3D 4.2
    VkPhysicalDeviceLimits:
    -----------------------
        maxImageDimension1D                     = 4096
        maxImageDimension2D                     = 4096
        maxImageDimension3D                     = 4096
        maxImageDimensionCube                   = 4096
        maxImageArrayLayers                     = 2048
        maxTexelBufferElements                  = 0x10000000
        maxUniformBufferRange                   = 0x8000000
        maxStorageBufferRange                   = 0x8000000
        maxPushConstantsSize                    = 128
        maxMemoryAllocationCount                = 86691
        maxSamplerAllocationCount               = 65536
        bufferImageGranularity                  = 0x100
        sparseAddressSpaceSize                  = 0x0
        maxBoundDescriptorSets                  = 16
        maxPerStageDescriptorSamplers           = 16
        maxPerStageDescriptorUniformBuffers     = 12
        maxPerStageDescriptorStorageBuffers     = 12
        maxPerStageDescriptorSampledImages      = 16
        maxPerStageDescriptorStorageImages      = 4
        maxPerStageDescriptorInputAttachments   = 4
        maxPerStageResources                    = 128
        maxDescriptorSetSamplers                = 96
        maxDescriptorSetUniformBuffers          = 72
        maxDescriptorSetUniformBuffersDynamic   = 8
        maxDescriptorSetStorageBuffers          = 72
        maxDescriptorSetStorageBuffersDynamic   = 36
        maxDescriptorSetSampledImages           = 96
        maxDescriptorSetStorageImages           = 24
        maxDescriptorSetInputAttachments        = 4
        maxVertexInputAttributes                = 16
        maxVertexInputBindings                  = 16
        maxVertexInputAttributeOffset           = 0xffffffff
        maxVertexInputBindingStride             = 0xffffffff
        maxVertexOutputComponents               = 64
        maxTessellationGenerationLevel          = 0
        maxTessellationPatchSize                        = 0
        maxTessellationControlPerVertexInputComponents  = 0
        maxTessellationControlPerVertexOutputComponents = 0
        maxTessellationControlPerPatchOutputComponents  = 0
        maxTessellationControlTotalOutputComponents     = 0
        maxTessellationEvaluationInputComponents        = 0
        maxTessellationEvaluationOutputComponents       = 0
        maxGeometryShaderInvocations            = 0
        maxGeometryInputComponents              = 0
        maxGeometryOutputComponents             = 0
        maxGeometryOutputVertices               = 0
        maxGeometryTotalOutputComponents        = 0
        maxFragmentInputComponents              = 64
        maxFragmentOutputAttachments            = 4
        maxFragmentDualSrcAttachments           = 0
        maxFragmentCombinedOutputResources      = 20
        maxComputeSharedMemorySize              = 0x4000
        maxComputeWorkGroupCount[0]             = 65535
        maxComputeWorkGroupCount[1]             = 65535
        maxComputeWorkGroupCount[2]             = 65535
        maxComputeWorkGroupInvocations          = 256
        maxComputeWorkGroupSize[0]              = 256
        maxComputeWorkGroupSize[1]              = 256
        maxComputeWorkGroupSize[2]              = 256
        subPixelPrecisionBits                   = 6
        subTexelPrecisionBits                   = 8
        mipmapPrecisionBits                     = 8
        maxDrawIndexedIndexValue                = 16777215
        maxDrawIndirectCount                    = 2147483647
        maxSamplerLodBias                       = 14.000000
        maxSamplerAnisotropy                    = 16.000000
        maxViewports                            = 1
        maxViewportDimensions[0]                = 4096
        maxViewportDimensions[1]                = 4096
        viewportBoundsRange[0]                  =  -8192.000000
        viewportBoundsRange[1]                  =   8191.000000
        viewportSubPixelBits                    = 0
        minMemoryMapAlignment                   = 4096
        minTexelBufferOffsetAlignment           = 0x100
        minUniformBufferOffsetAlignment         = 0x20
        minStorageBufferOffsetAlignment         = 0x20
        minTexelOffset                          =  -8
        maxTexelOffset                          =   7
        minTexelGatherOffset                    =  -8
        maxTexelGatherOffset                    =   7
        minInterpolationOffset                  = -0.500000
        maxInterpolationOffset                  =  0.500000
        subPixelInterpolationOffsetBits         = 6
        maxFramebufferWidth                     = 4096
        maxFramebufferHeight                    = 4096
        maxFramebufferLayers                    = 256
        framebufferColorSampleCounts            = 5
        framebufferDepthSampleCounts            = 5
        framebufferStencilSampleCounts          = 5
        framebufferNoAttachmentsSampleCounts    = 5
        maxColorAttachments                     = 4
        sampledImageColorSampleCounts           = 5
        sampledImageDepthSampleCounts           = 5
        sampledImageStencilSampleCounts         = 5
        sampledImageIntegerSampleCounts         = 5
        storageImageSampleCounts                = 1
        maxSampleMaskWords                      = 1
        timestampComputeAndGraphics             = 1
        timestampPeriod                         = 1.000000
        maxClipDistances                        = 8
        maxCullDistances                        = 0
        maxCombinedClipAndCullDistances         = 8
        discreteQueuePriorities                 = 2
        pointSizeRange[0]                       = 0.000000
        pointSizeRange[1]                       = 512.000000
        lineWidthRange[0]                       = 1.000000
        lineWidthRange[1]                       = 32.000000
        pointSizeGranularity                    = 0.000000
        lineWidthGranularity                    = 0.000000
        strictLines                             = 1
        standardSampleLocations                 = 0
        optimalBufferCopyOffsetAlignment        = 0x20
        optimalBufferCopyRowPitchAlignment      = 0x20
        nonCoherentAtomSize                     = 0x100
    VkPhysicalDeviceSparseProperties:
    ---------------------------------
        residencyStandard2DBlockShape            = 0
        residencyStandard2DMultisampleBlockShape = 0
        residencyStandard3DBlockShape            = 0
        residencyAlignedMipSize                  = 0
        residencyNonResidentStrict               = 0

VkPhysicalDeviceMaintenance3Properties:
=======================================
    maxPerSetDescriptors    = 0
    maxMemoryAllocationSize = 0

VkPhysicalDeviceIDProperties:
=========================================
    deviceUUID      = e8c1c12d-2325-2af0-b0e8-66d7e87e7189
    driverUUID      = 8a5d830b-b5a3-7067-b976-b845cf99ed29
    deviceLUIDValid = false

Device Extensions   count = 6
    VK_EXT_external_memory_dma_buf      : extension revision  1
    VK_EXT_private_data                 : extension revision  1
    VK_KHR_external_memory              : extension revision  1
    VK_KHR_external_memory_fd           : extension revision  1
    VK_KHR_maintenance1                 : extension revision  2
    VK_KHR_swapchain                    : extension revision 68

VkQueueFamilyProperties[0]:
===========================
    queueFlags         = GRAPHICS | COMPUTE | TRANSFER
    queueCount         = 1
    timestampValidBits = 64
    minImageTransferGranularity = (1, 1, 1)

VkPhysicalDeviceMemoryProperties:
=================================
    memoryHeapCount       = 1
    memoryHeaps[0] :
        size          = 355088384 (0x152a3800) (338.64 MiB)
        flags:
            VK_MEMORY_HEAP_DEVICE_LOCAL_BIT
    memoryTypeCount       = 1
    memoryTypes[0] :
        heapIndex     = 0
        propertyFlags = 0x7:
            VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT
            VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT
            VK_MEMORY_PROPERTY_HOST_COHERENT_BIT

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

Format Properties:
==================
FORMAT_UNDEFINED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R4G4_UNORM_PACK8:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R4G4B4A4_UNORM_PACK16:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_B4G4R4A4_UNORM_PACK16:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_R5G6B5_UNORM_PACK16:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_B5G6R5_UNORM_PACK16:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R5G5B5A1_UNORM_PACK16:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_B5G5R5A1_UNORM_PACK16:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_A1R5G5B5_UNORM_PACK16:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_R8_UNORM:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_SNORM:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_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_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_STORAGE_TEXEL_BUFFER_BIT
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R8_USCALED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R8_SSCALED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R8_UINT:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_R8_SINT:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_R8_SRGB:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R8G8_UNORM:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_R8G8_SNORM:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_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_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_STORAGE_TEXEL_BUFFER_BIT
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R8G8_USCALED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R8G8_SSCALED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R8G8_UINT:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_R8G8_SINT:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_R8G8_SRGB:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R8G8B8_UNORM:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R8G8B8_SNORM:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R8G8B8_USCALED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R8G8B8_SSCALED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R8G8B8_UINT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R8G8B8_SINT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R8G8B8_SRGB:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_B8G8R8_UNORM:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_B8G8R8_SNORM:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_B8G8R8_USCALED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_B8G8R8_SSCALED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_B8G8R8_UINT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_B8G8R8_SINT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_B8G8R8_SRGB:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R8G8B8A8_UNORM:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_R8G8B8A8_SNORM:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_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_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_STORAGE_TEXEL_BUFFER_BIT
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R8G8B8A8_USCALED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R8G8B8A8_SSCALED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R8G8B8A8_UINT:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_R8G8B8A8_SINT:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_R8G8B8A8_SRGB:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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:
        None

FORMAT_B8G8R8A8_UNORM:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_B8G8R8A8_SNORM:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_B8G8R8A8_USCALED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_B8G8R8A8_SSCALED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_B8G8R8A8_UINT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_B8G8R8A8_SINT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_B8G8R8A8_SRGB:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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:
        None

FORMAT_A8B8G8R8_UNORM_PACK32:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_A8B8G8R8_SNORM_PACK32:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_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_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_STORAGE_TEXEL_BUFFER_BIT
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_A8B8G8R8_USCALED_PACK32:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_A8B8G8R8_SSCALED_PACK32:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_A8B8G8R8_UINT_PACK32:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_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_A8B8G8R8_SINT_PACK32:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_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_A8B8G8R8_SRGB_PACK32:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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:
        None

FORMAT_A2R10G10B10_UNORM_PACK32:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_A2R10G10B10_SNORM_PACK32:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_A2R10G10B10_USCALED_PACK32:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_A2R10G10B10_SSCALED_PACK32:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_A2R10G10B10_UINT_PACK32:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_A2R10G10B10_SINT_PACK32:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_A2B10G10R10_UNORM_PACK32:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_A2B10G10R10_SNORM_PACK32:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_A2B10G10R10_USCALED_PACK32:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_A2B10G10R10_SSCALED_PACK32:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_A2B10G10R10_UINT_PACK32:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_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

FORMAT_A2B10G10R10_SINT_PACK32:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R16_UNORM:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_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_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_STORAGE_TEXEL_BUFFER_BIT
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R16_SNORM:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_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_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_STORAGE_TEXEL_BUFFER_BIT
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R16_USCALED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R16_SSCALED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R16_UINT:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_R16_SINT:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_R16_SFLOAT:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_R16G16_UNORM:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_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_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_STORAGE_TEXEL_BUFFER_BIT
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R16G16_SNORM:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_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_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_STORAGE_TEXEL_BUFFER_BIT
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R16G16_USCALED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R16G16_SSCALED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R16G16_UINT:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_R16G16_SINT:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_R16G16_SFLOAT:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_R16G16B16_UNORM:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R16G16B16_SNORM:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R16G16B16_USCALED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R16G16B16_SSCALED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R16G16B16_UINT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R16G16B16_SINT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R16G16B16_SFLOAT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R16G16B16A16_UNORM:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_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_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_STORAGE_TEXEL_BUFFER_BIT
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R16G16B16A16_SNORM:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_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_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_STORAGE_TEXEL_BUFFER_BIT
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R16G16B16A16_USCALED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R16G16B16A16_SSCALED:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R16G16B16A16_UINT:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_R16G16B16A16_SINT:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_R16G16B16A16_SFLOAT:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_R32_UINT:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_SINT:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_R32G32_UINT:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_R32G32_SINT:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_R32G32_SFLOAT:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_R32G32B32_UINT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R32G32B32_SINT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R32G32B32_SFLOAT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT

FORMAT_R32G32B32A32_UINT:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_R32G32B32A32_SINT:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_R32G32B32A32_SFLOAT:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_R64_UINT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R64_SINT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R64_SFLOAT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R64G64_UINT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R64G64_SINT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R64G64_SFLOAT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R64G64B64_UINT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R64G64B64_SINT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R64G64B64_SFLOAT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R64G64B64A64_UINT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R64G64B64A64_SINT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R64G64B64A64_SFLOAT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_B10G11R11_UFLOAT_PACK32:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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

FORMAT_E5B9G9R9_UFLOAT_PACK32:
    linearTiling   FormatFeatureFlags:
        None
    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_D16_UNORM:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_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_X8_D24_UNORM_PACK32:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_D32_SFLOAT:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
        VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_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_S8_UINT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_D16_UNORM_S8_UINT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_D24_UNORM_S8_UINT:
    linearTiling   FormatFeatureFlags:
        VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT
        VK_FORMAT_FEATURE_BLIT_DST_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_D32_SFLOAT_S8_UINT:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_BC1_RGB_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_BC1_RGB_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_BC1_RGBA_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_BC1_RGBA_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_BC2_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_BC2_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_BC3_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_BC3_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_BC4_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_BC4_SNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_BC5_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_BC5_SNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_BC6H_UFLOAT_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_BC6H_SFLOAT_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_BC7_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_BC7_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ETC2_R8G8B8_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    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_ETC2_R8G8B8_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    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_ETC2_R8G8B8A1_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    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_ETC2_R8G8B8A1_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    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_ETC2_R8G8B8A8_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    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_ETC2_R8G8B8A8_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    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_EAC_R11_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    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_EAC_R11_SNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    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_EAC_R11G11_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    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_EAC_R11G11_SNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    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_ASTC_4x4_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_4x4_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_5x4_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_5x4_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_5x5_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_5x5_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_6x5_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_6x5_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_6x6_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_6x6_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_8x5_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_8x5_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_8x6_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_8x6_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_8x8_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_8x8_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_10x5_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_10x5_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_10x6_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_10x6_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_10x8_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_10x8_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_10x10_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_10x10_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_12x10_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_12x10_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_12x12_UNORM_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_ASTC_12x12_SRGB_BLOCK:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_G8B8G8R8_422_UNORM:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_B8G8R8G8_422_UNORM:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_G8_B8_R8_3PLANE_420_UNORM:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_G8_B8R8_2PLANE_420_UNORM:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_G8_B8_R8_3PLANE_422_UNORM:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_G8_B8R8_2PLANE_422_UNORM:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_G8_B8_R8_3PLANE_444_UNORM:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R10X6_UNORM_PACK16:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R10X6G10X6_UNORM_2PACK16:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R12X4_UNORM_PACK16:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R12X4G12X4_UNORM_2PACK16:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_G16B16G16R16_422_UNORM:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_B16G16R16G16_422_UNORM:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_G16_B16_R16_3PLANE_420_UNORM:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_G16_B16R16_2PLANE_420_UNORM:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_G16_B16_R16_3PLANE_422_UNORM:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_G16_B16R16_2PLANE_422_UNORM:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

FORMAT_G16_B16_R16_3PLANE_444_UNORM:
    linearTiling   FormatFeatureFlags:
        None
    optimalTiling  FormatFeatureFlags:
        None
    bufferFeatures FormatFeatureFlags:
        None

It seems that Vulkan 1.1.97 is running but I tried also with V10, it gives the same result as V 11. and here is the output for the 32x1x1

11 - VkFFT/FFTW C2C precision test in single precision
-1.867242 4.318095 - 0.680375 -0.211234
2.723335 -1.135239 - 0.566198 0.596880
-1.275026 1.701470 - 0.823295 -0.604897
1.066966 2.636105 - -0.329554 0.536459
5.973207 1.047940 - -0.444451 0.107940
5.417297 5.540814 - -0.045206 0.257742
2.341457 1.169850 - -0.270431 0.026802
1.510158 -1.894922 - 0.904459 0.832390
4.388940 -2.612464 - 0.271423 0.434594
-1.605148 -1.527536 - -0.716795 0.213938
-4.610864 -2.510723 - -0.967399 -0.514226
-3.367084 -0.190993 - -0.725537 0.608353
-0.001417 -1.135609 - -0.686642 -0.198111
0.156197 -4.127714 - -0.740419 -0.782382
1.717606 -2.669784 - 0.997849 -0.563486
-6.623531 -3.367038 - 0.025865 0.678224
-3.401905 -3.385775 - 0.225280 -0.407937
0.107437 3.922369 - 0.275105 0.048574
5.870233 0.107930 - -0.012834 0.945550
3.186970 -0.943483 - -0.414966 0.542715
-1.528269 0.314574 - 0.053490 0.539828
4.577259 5.930770 - -0.199543 0.783059
-0.625049 -7.351761 - -0.433371 -0.295083
2.141679 -0.571233 - 0.615449 0.838053
-5.650475 2.495261 - -0.860489 0.898654
-0.413945 -0.206596 - 0.051991 -0.827888
-1.228790 -2.438999 - -0.615572 0.326454
0.075728 -2.751176 - 0.780465 -0.302214
4.619874 4.670594 - -0.871657 -0.959954
-3.609183 2.232057 - -0.084597 -0.873808
9.768201 -3.627336 - -0.523440 0.941268
1.937398 -0.398941 - 0.804416 0.701840
VkFFT System: 32x1x1 avg_difference: 4.210443 max_difference: 11.260108 avg_eps: 1.013775 max_eps: 1.678629
DTolm commented 3 years ago

I see that the hardware capabilities of Pi are limited (16kb of shared memory, only 256 threads per block, no fp64) but the generated shaders of smaller sequences should work. Maybe enabling validation layers in Vulkan_FFT.cpp (const bool enableValidationLayers = false;) can show some discrepancy? Also it may be good to check simpler systems and see what the code outputs (for example, setting all input numbers to (1,0)).

kleinl commented 3 years ago

The limited sources make it particularity interesting to outsource some of the CPU load to the GPU. When you say "smaller sequences" do you have some idea about how small the sequence has to be for a GPU with these properties?

Enabling the validation error leads to: Instance creation failed, error code: -6 which according to VkResult means VK_ERROR_LAYER_NOT_PRESENT = -6 Using simple inputs shows interessting behaviour, if i initialize with (1, 0) the output is

11 - VkFFT/FFTW C2C precision test in single precision
32.000000 0.000000 - 1.000000 0.000000
0.000000 0.000000 - 1.000000 0.000000
0.000000 0.000000 - 1.000000 0.000000
0.000000 0.000000 - 1.000000 0.000000
0.000000 0.000000 - 1.000000 0.000000
0.000000 0.000000 - 1.000000 0.000000
0.000000 0.000000 - 1.000000 0.000000
0.000000 0.000000 - 1.000000 0.000000
0.000000 0.000000 - 1.000000 0.000000
0.000000 0.000000 - 1.000000 0.000000
0.000000 0.000000 - 1.000000 0.000000
0.000000 0.000000 - 1.000000 0.000000
0.000000 0.000000 - 1.000000 0.000000
0.000000 0.000000 - 1.000000 0.000000
0.000000 0.000000 - 1.000000 0.000000
0.000000 0.000000 - 1.000000 0.000000
0.000000 0.000000 - 1.000000 0.000000
0.000000 0.000000 - 1.000000 0.000000
0.000000 0.000000 - 1.000000 0.000000
0.000000 0.000000 - 1.000000 0.000000
0.000000 0.000000 - 1.000000 0.000000
0.000000 0.000000 - 1.000000 0.000000
0.000000 0.000000 - 1.000000 0.000000
0.000000 0.000000 - 1.000000 0.000000
0.000000 0.000000 - 1.000000 0.000000
0.000000 0.000000 - 1.000000 0.000000
0.000000 0.000000 - 1.000000 0.000000
0.000000 0.000000 - 1.000000 0.000000
0.000000 0.000000 - 1.000000 0.000000
0.000000 0.000000 - 1.000000 0.000000
0.000000 0.000000 - 1.000000 0.000000
0.000000 0.000000 - 1.000000 0.000000
VkFFT System: 32x1x1 avg_difference: 1.937500 max_difference: 31.000000 avg_eps: 0.030273 max_eps: 0.968750

Also I quickly checked (2, 0) and (1, 1) and it showed that the output was always just equals to the input. Best Regards

DTolm commented 3 years ago

It seems that VkFFT does not perform any computations on this system. I am not sure what can be the reason behind the launch failing is and will probably need to get access to one of the PI's in the future to debug it.

As for limitations, vulkaninfo shows that PI has 338MB of available memory which will be the main limiting factor (VkFFT should be able to adjust to other compute limitations of PI in the future, once the launch issue is resolved).

kleinl commented 3 years ago

I could set one up for you and give you remote access. You can contact me directly if you are interessted.

kleinl commented 3 years ago

Update: I think I found the problem (at least its working properly now)

vkFFT.h:7239 app->configuration.sharedMemorySizePow2 = (physicalDeviceProperties.limits.maxComputeSharedMemorySize / 32768) * 32768; will result in 0 if physicalDeviceProperties.limits.maxComputeSharedMemorySize < 32768, which is the case for the rpi4. changing it to app->configuration.sharedMemorySizePow2 = (physicalDeviceProperties.limits.maxComputeSharedMemorySize / 16384) * 16384; and also changing the two 32384 in vkFFT.h:97 to 16384 makes it run properly.

small sidenode: Vulkan_FFT.cpp:152 - VK_API_VERSION_1_2 cannot be found on a system running vulkan 1.1 so you might want to catch if it is defined, I guess same problem occurs when calling VK_API_VERSION_1_1 from vulkan 1.0

Best regards and thank you very much for this great project

DTolm commented 3 years ago

Thank you for the input, I will fix the code accordingly now. If you managed to make code run, have you tried some of the benchmarks on it? Can you upload the results to the issue, as they may be interesting to everybody?

Best regards, Dmitrii

kleinl commented 3 years ago

First of all I tried the new commit and its working fine, thank you!

For the benchmark: I get some segfaults with the timing benchmarks. I made the following changes to sample_0: Vulkan_FFT.cpp:536

float* buffer_input = (float*)malloc((uint64_t)4 * 2 * pow(2, 24));
for (uint64_t i = 0; i < 2 * pow(2, 24); i++) {

Vulkan_FFT.cpp:540 for (uint32_t n = 0; n < 15; n++) {

and Vulkan_FFT.cpp:553 forward_configuration.size[1] = 1;

If I let it run longer (let n get bigger) it terminates with the message "Killed"

The results are:

0 - VkFFT FFT + iFFT C2C benchmark 1D batched in single precision
VkFFT System: 3 8x1 Buffer: 0 MB avg_time_per_step: 0.137 ms std_error: 0.001 batch: 1000 benchmark: 0 bandwidth: 0.0
VkFFT System: 4 16x1 Buffer: 0 MB avg_time_per_step: 0.147 ms std_error: 0.000 batch: 1000 benchmark: 0 bandwidth: 0.0
VkFFT System: 5 32x1 Buffer: 0 MB avg_time_per_step: 0.148 ms std_error: 0.000 batch: 1000 benchmark: 1 bandwidth: 0.0
VkFFT System: 6 64x1 Buffer: 0 MB avg_time_per_step: 0.151 ms std_error: 0.000 batch: 1000 benchmark: 3 bandwidth: 0.0
VkFFT System: 7 128x1 Buffer: 0 MB avg_time_per_step: 0.172 ms std_error: 0.008 batch: 1000 benchmark: 5 bandwidth: 0.0
VkFFT System: 8 256x1 Buffer: 0 MB avg_time_per_step: 0.166 ms std_error: 0.001 batch: 1000 benchmark: 12 bandwidth: 0.0
VkFFT System: 9 512x1 Buffer: 0 MB avg_time_per_step: 0.166 ms std_error: 0.000 batch: 1000 benchmark: 24 bandwidth: 0.1
VkFFT System: 10 1024x1 Buffer: 0 MB avg_time_per_step: 0.183 ms std_error: 0.001 batch: 1000 benchmark: 43 bandwidth: 0.2
VkFFT System: 11 2048x1 Buffer: 0 MB avg_time_per_step: 0.203 ms std_error: 0.000 batch: 1000 benchmark: 78 bandwidth: 0.3
VkFFT System: 12 4096x1 Buffer: 0 MB avg_time_per_step: 0.551 ms std_error: 0.001 batch: 1000 benchmark: 58 bandwidth: 0.4
VkFFT System: 13 8192x1 Buffer: 0 MB avg_time_per_step: 0.811 ms std_error: 0.003 batch: 1000 benchmark: 78 bandwidth: 0.6
VkFFT System: 14 16384x1 Buffer: 0 MB avg_time_per_step: 1.346 ms std_error: 0.000 batch: 1000 benchmark: 95 bandwidth: 0.7
VkFFT System: 15 32768x1 Buffer: 0 MB avg_time_per_step: 3.303 ms std_error: 0.006 batch: 1000 benchmark: 77 bandwidth: 0.6
VkFFT System: 16 65536x1 Buffer: 0 MB avg_time_per_step: 7.024 ms std_error: 0.008 batch: 1000 benchmark: 72 bandwidth: 0.6
Benchmark score VkFFT: 22
Device name: V3D 4.2 API:1.0.155

Best regards

DTolm commented 3 years ago

Thank you for the results! The current version of benchmarks uses 4GB of VRAM, so I will need to adapt it for low-memory devices in the future. Also, adjusting configuration parameters to match the architecture is also important to performance and have to be done in the future.

As for the output, a non-batched version of systems like 8x1 does not utilize the parallel nature of the GPU well, so the actual results to look at are systems 11-16. We get almost linear 2x scaling (1.34->3.3->7ms) which correlates with a 2x increase of memory size of each system, so the bandwidth is once again a bottleneck. I don't know the particular details of this GPU, but it performs ~15x slower than Intel UHD610. Hope this analysis can be helpful.

Best regards, Dmitrii