Initial implementation of Vulkan SC CTS
authorPawel Ksiezopolski <pawel.ksiezopolski@mobica.com>
Fri, 22 Jan 2021 10:37:06 +0000 (11:37 +0100)
committerPawel Ksiezopolski <pawel.ksiezopolski@mobica.com>
Tue, 9 Feb 2021 16:47:26 +0000 (17:47 +0100)
This commit initiates Vulkan SC conformance tests suite.
Most important modifications:
- move existing Vulkan INL files from external/vulkancts/framework/vulkan to external/vulkancts/framework/vulkan/generated/vulkan
- add new set of INL files for Vulkan SC in a directory external/vulkancts/framework/vulkan/generated/vulkansc
- modify Python scripts so that they are able to generate both Vulkan and Vulkan SC INL files: external/vulkancts/scripts/gen*.py
- add Vulkan SC framework modules: vkscutil, vkscutilnoshader, tcutil-sc-platform
- add Vulkan SC modules required to create new executable deqp-vksc: deqp-vksc-package, deqp-vksc-util
- add module with first two tests for Vulkan SC: deqp-vksc-api
- add vulkan_sc_core.h file to directory external/vulkancts/scripts/src
- define new test case list for Vulkan SC
- CMake files cleanup

All above mentioned C++ modules ( executables, libraries ) use the same code as its Vulkan counterparts with CTS_USES_VULKAN and CTS_USES_VULKANSC flags added and different set of INL files.

New tests:

dEQP-VKSC.api.version_check.version
dEQP-VKSC.api.version_check.entry_points

Components: Vulkan VulkanSC Framework

Change-Id: I9d845a5ce321e3e734f5d33e2a430f1a3954a4ad

146 files changed:
AndroidGen.mk
CMakeLists.txt
android/cts/master/mustpass.xml
android/cts/master/src/vksc-master.txt [new file with mode: 0644]
android/cts/master/vksc-master.txt [new file with mode: 0644]
external/openglcts/modules/CMakeLists.txt
external/vulkancts/framework/vulkan/CMakeLists.txt
external/vulkancts/framework/vulkan/generated/vulkan/vkApiExtensionDependencyInfo.inl [moved from external/vulkancts/framework/vulkan/vkApiExtensionDependencyInfo.inl with 100% similarity]
external/vulkancts/framework/vulkan/generated/vulkan/vkBasicTypes.inl [moved from external/vulkancts/framework/vulkan/vkBasicTypes.inl with 100% similarity]
external/vulkancts/framework/vulkan/generated/vulkan/vkConcreteDeviceInterface.inl [moved from external/vulkancts/framework/vulkan/vkConcreteDeviceInterface.inl with 100% similarity]
external/vulkancts/framework/vulkan/generated/vulkan/vkConcreteInstanceInterface.inl [moved from external/vulkancts/framework/vulkan/vkConcreteInstanceInterface.inl with 100% similarity]
external/vulkancts/framework/vulkan/generated/vulkan/vkConcretePlatformInterface.inl [moved from external/vulkancts/framework/vulkan/vkConcretePlatformInterface.inl with 100% similarity]
external/vulkancts/framework/vulkan/generated/vulkan/vkCoreFunctionalities.inl [moved from external/vulkancts/framework/vulkan/vkCoreFunctionalities.inl with 100% similarity]
external/vulkancts/framework/vulkan/generated/vulkan/vkDeviceDriverImpl.inl [moved from external/vulkancts/framework/vulkan/vkDeviceDriverImpl.inl with 100% similarity]
external/vulkancts/framework/vulkan/generated/vulkan/vkDeviceExtensions.inl [moved from external/vulkancts/framework/vulkan/vkDeviceExtensions.inl with 100% similarity]
external/vulkancts/framework/vulkan/generated/vulkan/vkDeviceFeatures.inl [moved from external/vulkancts/framework/vulkan/vkDeviceFeatures.inl with 100% similarity]
external/vulkancts/framework/vulkan/generated/vulkan/vkDeviceFeatures2.inl [moved from external/vulkancts/framework/vulkan/vkDeviceFeatures2.inl with 100% similarity]
external/vulkancts/framework/vulkan/generated/vulkan/vkDeviceFeaturesForContextDecl.inl [moved from external/vulkancts/framework/vulkan/vkDeviceFeaturesForContextDecl.inl with 100% similarity]
external/vulkancts/framework/vulkan/generated/vulkan/vkDeviceFeaturesForContextDefs.inl [moved from external/vulkancts/framework/vulkan/vkDeviceFeaturesForContextDefs.inl with 100% similarity]
external/vulkancts/framework/vulkan/generated/vulkan/vkDeviceFeaturesForDefaultDeviceDefs.inl [moved from external/vulkancts/framework/vulkan/vkDeviceFeaturesForDefaultDeviceDefs.inl with 100% similarity]
external/vulkancts/framework/vulkan/generated/vulkan/vkDeviceFunctionPointers.inl [moved from external/vulkancts/framework/vulkan/vkDeviceFunctionPointers.inl with 100% similarity]
external/vulkancts/framework/vulkan/generated/vulkan/vkDeviceProperties.inl [moved from external/vulkancts/framework/vulkan/vkDeviceProperties.inl with 100% similarity]
external/vulkancts/framework/vulkan/generated/vulkan/vkDevicePropertiesForContextDecl.inl [moved from external/vulkancts/framework/vulkan/vkDevicePropertiesForContextDecl.inl with 100% similarity]
external/vulkancts/framework/vulkan/generated/vulkan/vkDevicePropertiesForContextDefs.inl [moved from external/vulkancts/framework/vulkan/vkDevicePropertiesForContextDefs.inl with 100% similarity]
external/vulkancts/framework/vulkan/generated/vulkan/vkDevicePropertiesForDefaultDeviceDefs.inl [moved from external/vulkancts/framework/vulkan/vkDevicePropertiesForDefaultDeviceDefs.inl with 100% similarity]
external/vulkancts/framework/vulkan/generated/vulkan/vkExtensionFunctions.inl [moved from external/vulkancts/framework/vulkan/vkExtensionFunctions.inl with 100% similarity]
external/vulkancts/framework/vulkan/generated/vulkan/vkFunctionPointerTypes.inl [moved from external/vulkancts/framework/vulkan/vkFunctionPointerTypes.inl with 100% similarity]
external/vulkancts/framework/vulkan/generated/vulkan/vkGetStructureTypeImpl.inl [moved from external/vulkancts/framework/vulkan/vkGetStructureTypeImpl.inl with 100% similarity]
external/vulkancts/framework/vulkan/generated/vulkan/vkHandleType.inl [moved from external/vulkancts/framework/vulkan/vkHandleType.inl with 100% similarity]
external/vulkancts/framework/vulkan/generated/vulkan/vkInitDeviceFunctionPointers.inl [moved from external/vulkancts/framework/vulkan/vkInitDeviceFunctionPointers.inl with 100% similarity]
external/vulkancts/framework/vulkan/generated/vulkan/vkInitInstanceFunctionPointers.inl [moved from external/vulkancts/framework/vulkan/vkInitInstanceFunctionPointers.inl with 100% similarity]
external/vulkancts/framework/vulkan/generated/vulkan/vkInitPlatformFunctionPointers.inl [moved from external/vulkancts/framework/vulkan/vkInitPlatformFunctionPointers.inl with 100% similarity]
external/vulkancts/framework/vulkan/generated/vulkan/vkInstanceDriverImpl.inl [moved from external/vulkancts/framework/vulkan/vkInstanceDriverImpl.inl with 100% similarity]
external/vulkancts/framework/vulkan/generated/vulkan/vkInstanceExtensions.inl [moved from external/vulkancts/framework/vulkan/vkInstanceExtensions.inl with 100% similarity]
external/vulkancts/framework/vulkan/generated/vulkan/vkInstanceFunctionPointers.inl [moved from external/vulkancts/framework/vulkan/vkInstanceFunctionPointers.inl with 100% similarity]
external/vulkancts/framework/vulkan/generated/vulkan/vkKnownDriverIds.inl [moved from external/vulkancts/framework/vulkan/vkKnownDriverIds.inl with 100% similarity]
external/vulkancts/framework/vulkan/generated/vulkan/vkMandatoryFeatures.inl [moved from external/vulkancts/framework/vulkan/vkMandatoryFeatures.inl with 82% similarity]
external/vulkancts/framework/vulkan/generated/vulkan/vkNullDriverImpl.inl [moved from external/vulkancts/framework/vulkan/vkNullDriverImpl.inl with 100% similarity]
external/vulkancts/framework/vulkan/generated/vulkan/vkObjTypeImpl.inl [moved from external/vulkancts/framework/vulkan/vkObjTypeImpl.inl with 100% similarity]
external/vulkancts/framework/vulkan/generated/vulkan/vkPlatformDriverImpl.inl [moved from external/vulkancts/framework/vulkan/vkPlatformDriverImpl.inl with 100% similarity]
external/vulkancts/framework/vulkan/generated/vulkan/vkPlatformFunctionPointers.inl [moved from external/vulkancts/framework/vulkan/vkPlatformFunctionPointers.inl with 100% similarity]
external/vulkancts/framework/vulkan/generated/vulkan/vkRefUtil.inl [moved from external/vulkancts/framework/vulkan/vkRefUtil.inl with 100% similarity]
external/vulkancts/framework/vulkan/generated/vulkan/vkRefUtilImpl.inl [moved from external/vulkancts/framework/vulkan/vkRefUtilImpl.inl with 100% similarity]
external/vulkancts/framework/vulkan/generated/vulkan/vkStrUtil.inl [moved from external/vulkancts/framework/vulkan/vkStrUtil.inl with 100% similarity]
external/vulkancts/framework/vulkan/generated/vulkan/vkStrUtilImpl.inl [moved from external/vulkancts/framework/vulkan/vkStrUtilImpl.inl with 100% similarity]
external/vulkancts/framework/vulkan/generated/vulkan/vkStructTypes.inl [moved from external/vulkancts/framework/vulkan/vkStructTypes.inl with 100% similarity]
external/vulkancts/framework/vulkan/generated/vulkan/vkSupportedExtensions.inl [moved from external/vulkancts/framework/vulkan/vkSupportedExtensions.inl with 100% similarity]
external/vulkancts/framework/vulkan/generated/vulkan/vkTypeUtil.inl [moved from external/vulkancts/framework/vulkan/vkTypeUtil.inl with 100% similarity]
external/vulkancts/framework/vulkan/generated/vulkan/vkVirtualDeviceInterface.inl [moved from external/vulkancts/framework/vulkan/vkVirtualDeviceInterface.inl with 100% similarity]
external/vulkancts/framework/vulkan/generated/vulkan/vkVirtualInstanceInterface.inl [moved from external/vulkancts/framework/vulkan/vkVirtualInstanceInterface.inl with 100% similarity]
external/vulkancts/framework/vulkan/generated/vulkan/vkVirtualPlatformInterface.inl [moved from external/vulkancts/framework/vulkan/vkVirtualPlatformInterface.inl with 100% similarity]
external/vulkancts/framework/vulkan/generated/vulkansc/vkBasicTypes.inl [new file with mode: 0644]
external/vulkancts/framework/vulkan/generated/vulkansc/vkConcreteDeviceInterface.inl [new file with mode: 0644]
external/vulkancts/framework/vulkan/generated/vulkansc/vkConcreteInstanceInterface.inl [new file with mode: 0644]
external/vulkancts/framework/vulkan/generated/vulkansc/vkConcretePlatformInterface.inl [new file with mode: 0644]
external/vulkancts/framework/vulkan/generated/vulkansc/vkCoreFunctionalities.inl [new file with mode: 0644]
external/vulkancts/framework/vulkan/generated/vulkansc/vkDeviceDriverImpl.inl [new file with mode: 0644]
external/vulkancts/framework/vulkan/generated/vulkansc/vkDeviceExtensions.inl [new file with mode: 0644]
external/vulkancts/framework/vulkan/generated/vulkansc/vkDeviceFeatures.inl [new file with mode: 0644]
external/vulkancts/framework/vulkan/generated/vulkansc/vkDeviceFeatures2.inl [new file with mode: 0644]
external/vulkancts/framework/vulkan/generated/vulkansc/vkDeviceFeaturesForContextDecl.inl [new file with mode: 0644]
external/vulkancts/framework/vulkan/generated/vulkansc/vkDeviceFeaturesForContextDefs.inl [new file with mode: 0644]
external/vulkancts/framework/vulkan/generated/vulkansc/vkDeviceFeaturesForDefaultDeviceDefs.inl [new file with mode: 0644]
external/vulkancts/framework/vulkan/generated/vulkansc/vkDeviceFunctionPointers.inl [new file with mode: 0644]
external/vulkancts/framework/vulkan/generated/vulkansc/vkDeviceProperties.inl [new file with mode: 0644]
external/vulkancts/framework/vulkan/generated/vulkansc/vkDevicePropertiesForContextDecl.inl [new file with mode: 0644]
external/vulkancts/framework/vulkan/generated/vulkansc/vkDevicePropertiesForContextDefs.inl [new file with mode: 0644]
external/vulkancts/framework/vulkan/generated/vulkansc/vkDevicePropertiesForDefaultDeviceDefs.inl [new file with mode: 0644]
external/vulkancts/framework/vulkan/generated/vulkansc/vkExtensionFunctions.inl [new file with mode: 0644]
external/vulkancts/framework/vulkan/generated/vulkansc/vkFunctionPointerTypes.inl [new file with mode: 0644]
external/vulkancts/framework/vulkan/generated/vulkansc/vkGetStructureTypeImpl.inl [new file with mode: 0644]
external/vulkancts/framework/vulkan/generated/vulkansc/vkHandleType.inl [new file with mode: 0644]
external/vulkancts/framework/vulkan/generated/vulkansc/vkInitDeviceFunctionPointers.inl [new file with mode: 0644]
external/vulkancts/framework/vulkan/generated/vulkansc/vkInitInstanceFunctionPointers.inl [new file with mode: 0644]
external/vulkancts/framework/vulkan/generated/vulkansc/vkInitPlatformFunctionPointers.inl [new file with mode: 0644]
external/vulkancts/framework/vulkan/generated/vulkansc/vkInstanceDriverImpl.inl [new file with mode: 0644]
external/vulkancts/framework/vulkan/generated/vulkansc/vkInstanceExtensions.inl [new file with mode: 0644]
external/vulkancts/framework/vulkan/generated/vulkansc/vkInstanceFunctionPointers.inl [new file with mode: 0644]
external/vulkancts/framework/vulkan/generated/vulkansc/vkKnownDriverIds.inl [new file with mode: 0644]
external/vulkancts/framework/vulkan/generated/vulkansc/vkMandatoryFeatures.inl [new file with mode: 0644]
external/vulkancts/framework/vulkan/generated/vulkansc/vkNullDriverImpl.inl [new file with mode: 0644]
external/vulkancts/framework/vulkan/generated/vulkansc/vkObjTypeImpl.inl [new file with mode: 0644]
external/vulkancts/framework/vulkan/generated/vulkansc/vkPlatformDriverImpl.inl [new file with mode: 0644]
external/vulkancts/framework/vulkan/generated/vulkansc/vkPlatformFunctionPointers.inl [new file with mode: 0644]
external/vulkancts/framework/vulkan/generated/vulkansc/vkRefUtil.inl [new file with mode: 0644]
external/vulkancts/framework/vulkan/generated/vulkansc/vkRefUtilImpl.inl [new file with mode: 0644]
external/vulkancts/framework/vulkan/generated/vulkansc/vkStrUtil.inl [new file with mode: 0644]
external/vulkancts/framework/vulkan/generated/vulkansc/vkStrUtilImpl.inl [new file with mode: 0644]
external/vulkancts/framework/vulkan/generated/vulkansc/vkStructTypes.inl [new file with mode: 0644]
external/vulkancts/framework/vulkan/generated/vulkansc/vkSupportedExtensions.inl [new file with mode: 0644]
external/vulkancts/framework/vulkan/generated/vulkansc/vkTypeUtil.inl [new file with mode: 0644]
external/vulkancts/framework/vulkan/generated/vulkansc/vkVirtualDeviceInterface.inl [new file with mode: 0644]
external/vulkancts/framework/vulkan/generated/vulkansc/vkVirtualInstanceInterface.inl [new file with mode: 0644]
external/vulkancts/framework/vulkan/generated/vulkansc/vkVirtualPlatformInterface.inl [new file with mode: 0644]
external/vulkancts/framework/vulkan/generated/vulkansc/vkVulkan_c.inl [new file with mode: 0644]
external/vulkancts/framework/vulkan/vkBuilderUtil.cpp
external/vulkancts/framework/vulkan/vkBuilderUtil.hpp
external/vulkancts/framework/vulkan/vkDebugReportUtil.cpp
external/vulkancts/framework/vulkan/vkDebugReportUtil.hpp
external/vulkancts/framework/vulkan/vkDefs.cpp
external/vulkancts/framework/vulkan/vkDefs.hpp
external/vulkancts/framework/vulkan/vkDeviceFeatures.cpp
external/vulkancts/framework/vulkan/vkNullDriver.cpp
external/vulkancts/framework/vulkan/vkPrograms.cpp
external/vulkancts/framework/vulkan/vkPrograms.hpp
external/vulkancts/framework/vulkan/vkRayTracingUtil.cpp
external/vulkancts/framework/vulkan/vkRayTracingUtil.hpp
external/vulkancts/framework/vulkan/vkRef.hpp
external/vulkancts/framework/vulkan/vkRefUtil.cpp
external/vulkancts/framework/vulkan/vkRefUtil.hpp
external/vulkancts/framework/vulkan/vkWsiUtil.cpp
external/vulkancts/modules/vulkan/CMakeLists.txt
external/vulkancts/modules/vulkan/amber/CMakeLists.txt
external/vulkancts/modules/vulkan/api/CMakeLists.txt
external/vulkancts/modules/vulkan/api/vktApiFeatureInfo.cpp
external/vulkancts/modules/vulkan/api/vktApiTests.cpp
external/vulkancts/modules/vulkan/util/CMakeLists.txt
external/vulkancts/modules/vulkan/util/vktExternalMemoryUtil.cpp
external/vulkancts/modules/vulkan/util/vktExternalMemoryUtil.hpp
external/vulkancts/modules/vulkan/vktCustomInstancesDevices.cpp
external/vulkancts/modules/vulkan/vktCustomInstancesDevices.hpp
external/vulkancts/modules/vulkan/vktTestCase.cpp
external/vulkancts/modules/vulkan/vktTestCase.hpp
external/vulkancts/modules/vulkan/vktTestGroupUtil.cpp
external/vulkancts/modules/vulkan/vktTestGroupUtil.hpp
external/vulkancts/modules/vulkan/vktTestPackage.cpp
external/vulkancts/modules/vulkan/vktTestPackage.hpp
external/vulkancts/modules/vulkan/vktTestPackageEntrySC.cpp [new file with mode: 0644]
external/vulkancts/mustpass/AndroidTest.xml
external/vulkancts/mustpass/master/src/master_sc.txt [new file with mode: 0644]
external/vulkancts/mustpass/master/vksc-default.txt [new file with mode: 0644]
external/vulkancts/scripts/build_mustpass.py
external/vulkancts/scripts/gen_ext_deps.py
external/vulkancts/scripts/gen_framework.py
external/vulkancts/scripts/gen_framework_c.py
external/vulkancts/scripts/src/mandatory_features.txt
external/vulkancts/scripts/src/vulkan_sc_core.h [new file with mode: 0644]
framework/platform/CMakeLists.txt
modules/egl/CMakeLists.txt
modules/gles2/CMakeLists.txt
modules/gles3/CMakeLists.txt
modules/gles31/CMakeLists.txt
modules/internal/CMakeLists.txt
scripts/build_android_mustpass.py
scripts/build_caselists.py
scripts/check_build_sanity.py

index f33181d..aba16db 100644 (file)
@@ -480,6 +480,7 @@ LOCAL_SRC_FILES := \
        external/vulkancts/modules/vulkan/vktTestGroupUtil.cpp \
        external/vulkancts/modules/vulkan/vktTestPackage.cpp \
        external/vulkancts/modules/vulkan/vktTestPackageEntry.cpp \
+       external/vulkancts/modules/vulkan/vktTestPackageEntrySC.cpp \
        external/vulkancts/modules/vulkan/wsi/vktWsiColorSpaceTests.cpp \
        external/vulkancts/modules/vulkan/wsi/vktWsiDisplayControlTests.cpp \
        external/vulkancts/modules/vulkan/wsi/vktWsiDisplayTests.cpp \
index ecb1da9..6478fa9 100644 (file)
@@ -205,6 +205,7 @@ include_directories(
        framework/egl/wrapper
        framework/xexml
        external/vulkancts/framework/vulkan
+       external/vulkancts/framework/vulkan/generated/vulkan
        )
 
 if (DE_OS_IS_ANDROID OR DE_OS_IS_IOS)
@@ -238,7 +239,7 @@ set(MODULE_DATA_TARGET_POSTFIX      "-data")
 #      ${MODULE_NAME}-package:         Static library that contains all SRCS and links to LIBS
 #      ${MODULE_NAME}-data:            Custom target that is used for data file copies
 #      ${MODULE_NAME}:                         Executable binary (if supported by the platform)
-macro (add_deqp_module MODULE_NAME SRCS LIBS ENTRY)
+macro (add_deqp_module MODULE_NAME SRCS LIBS EXECLIBS ENTRY)
 
        # Library target
        add_library("${MODULE_NAME}${MODULE_LIB_TARGET_POSTFIX}" STATIC ${SRCS})
@@ -254,7 +255,7 @@ macro (add_deqp_module MODULE_NAME SRCS LIBS ENTRY)
        if (NOT DE_OS_IS_ANDROID AND NOT DE_OS_IS_IOS)
                # Executable target
                add_executable(${MODULE_NAME} ${PROJECT_SOURCE_DIR}/framework/platform/tcuMain.cpp ${ENTRY})
-               target_link_libraries(${MODULE_NAME} tcutil-platform "${MODULE_NAME}${MODULE_LIB_TARGET_POSTFIX}")
+               target_link_libraries(${MODULE_NAME} PUBLIC "${EXECLIBS}" "${MODULE_NAME}${MODULE_LIB_TARGET_POSTFIX}")
                target_copy_files(${MODULE_NAME} platform-libs-${MODULE_NAME} "${DEQP_PLATFORM_COPY_LIBRARIES}")
        endif ()
 
index 66581be..fc4960e 100644 (file)
@@ -51,4 +51,7 @@
                <Configuration caseListFile="vk-master-2019-03-01.txt" commandLine="--deqp-watchdog=enable" name="master-2019-03-01"/>
                <Configuration caseListFile="vk-master-2020-03-01.txt" commandLine="--deqp-watchdog=enable" name="master-2020-03-01"/>
        </TestPackage>
+       <TestPackage name="dEQP-VKSC">
+               <Configuration caseListFile="vksc-master.txt" commandLine="--deqp-watchdog=enable" name="master"/>
+       </TestPackage>
 </Mustpass>
diff --git a/android/cts/master/src/vksc-master.txt b/android/cts/master/src/vksc-master.txt
new file mode 100644 (file)
index 0000000..0b1e7ff
--- /dev/null
@@ -0,0 +1 @@
+dEQP-VKSC.*
diff --git a/android/cts/master/vksc-master.txt b/android/cts/master/vksc-master.txt
new file mode 100644 (file)
index 0000000..264d26d
--- /dev/null
@@ -0,0 +1,2 @@
+dEQP-VKSC.api.version_check.version
+dEQP-VKSC.api.version_check.entry_points
index dbaaeda..cbdf91a 100644 (file)
@@ -56,7 +56,7 @@ set(GLCTS_LIBS
        )
 
 # \note This module contains multiple packages (ES2-CTS, ES3-CTS, ..)
-add_deqp_module(glcts "${GLCTS_SRCS}" "${GLCTS_LIBS}" glcTestPackageEntry.cpp)
+add_deqp_module(glcts "${GLCTS_SRCS}" "${GLCTS_LIBS}" "tcutil-platform" glcTestPackageEntry.cpp)
 
 # Data directories
 add_data_dir(glcts ../data gl_cts/data)
index 37dc216..7b9f004 100644 (file)
@@ -70,14 +70,22 @@ set(VKUTILNOSHADER_SRCS
        vkRenderDocUtil.hpp
        vkDeviceFeatures.hpp
        vkDeviceFeatures.cpp
-       vkDeviceFeatures.inl
        vkDeviceProperties.hpp
        vkDeviceProperties.cpp
-       vkDeviceProperties.inl
        vkRayTracingUtil.hpp
        vkRayTracingUtil.cpp
        )
 
+set(VKUTILNOSHADER_INLS
+       generated/vulkan/vkDeviceFeatures.inl
+       generated/vulkan/vkDeviceProperties.inl
+       )
+
+set(VKSCUTILNOSHADER_INLS
+       generated/vulkansc/vkDeviceFeatures.inl
+       generated/vulkansc/vkDeviceProperties.inl
+       )
+
 set(VKUTIL_SRCS
        vkPrograms.cpp
        vkPrograms.hpp
@@ -94,14 +102,6 @@ set(VKUTILNOSHADER_LIBS
        tcutil
        )
 
-set(VKUTIL_LIBS
-       glutil
-       tcutil
-       vkutilnoshader
-       )
-
-include_directories(${GLSLANG_INCLUDE_PATH})
-
 # \note Code interfacing with glslang needs to include third-party headers
 #       that cause all sorts of warnings to appear.
 if (DE_COMPILER_IS_GCC OR DE_COMPILER_IS_CLANG)
@@ -110,10 +110,6 @@ if (DE_COMPILER_IS_GCC OR DE_COMPILER_IS_CLANG)
                PROPERTIES COMPILE_FLAGS "${DE_3RD_PARTY_CXX_FLAGS}")
 endif ()
 
-set(VKUTIL_LIBS ${VKUTIL_LIBS} ${GLSLANG_LIBRARIES})
-
-include_directories(${spirv-tools_SOURCE_DIR}/include)
-include_directories(${spirv-tools_SOURCE_DIR}/external/include)
 
 # \note Code interfacing with spirv-opt needs to include third-party headers
 #       that cause all sorts of warnings to appear.
@@ -123,24 +119,46 @@ if (DE_COMPILER_IS_GCC OR DE_COMPILER_IS_CLANG)
                PROPERTIES COMPILE_FLAGS "${DE_3RD_PARTY_CXX_FLAGS}")
 endif ()
 
-set(VKUTIL_LIBS ${VKUTIL_LIBS} SPIRV-Tools SPIRV-Tools-opt)
-
 PCH(VKUTILNOSHADER_SRCS ../../modules/vulkan/pch.cpp)
 PCH(VKUTIL_SRCS ../../modules/vulkan/pch.cpp)
+PCH(VKUTILNOSHADER_INLS ../../modules/vulkan/pch.cpp)
+PCH(VKSCUTILNOSHADER_INLS ../../modules/vulkan/pch.cpp)
+
+add_library(vkutilnoshader STATIC ${VKUTILNOSHADER_SRCS} ${VKUTILNOSHADER_INLS})
+target_compile_definitions(vkutilnoshader PUBLIC CTS_USES_VULKAN)
+target_link_libraries(vkutilnoshader PUBLIC ${VKUTILNOSHADER_LIBS})
 
-add_library(vkutilnoshader STATIC ${VKUTILNOSHADER_SRCS})
-target_link_libraries(vkutilnoshader ${VKUTILNOSHADER_LIBS})
+add_library(vkscutilnoshader STATIC ${VKUTILNOSHADER_SRCS} ${VKSCUTILNOSHADER_INLS})
+target_include_directories(vkscutilnoshader BEFORE PUBLIC generated/vulkansc)
+target_compile_definitions(vkscutilnoshader PUBLIC CTS_USES_VULKANSC)
+target_link_libraries(vkscutilnoshader PUBLIC ${VKUTILNOSHADER_LIBS})
 
 if (DEQP_USE_X11)
        find_package(X11 REQUIRED)
+
+       target_compile_definitions(vkutilnoshader PUBLIC DEQP_SUPPORT_X11=1)
        target_link_libraries(vkutilnoshader ${X11_LIBRARIES})
-       add_definitions(-DDEQP_SUPPORT_X11=1)
+
+       target_compile_definitions(vkscutilnoshader PUBLIC DEQP_SUPPORT_X11=1)
+       target_link_libraries(vkscutilnoshader ${X11_LIBRARIES})
+
        if (DEQP_USE_XCB)
                find_package(XCB REQUIRED)
+
+               target_compile_definitions(vkutilnoshader PUBLIC DEQP_SUPPORT_XCB=1)
                target_link_libraries(vkutilnoshader ${XCB_LIBRARIES})
-               add_definitions(-DDEQP_SUPPORT_XCB=1)
+
+               target_compile_definitions(vkscutilnoshader PUBLIC DEQP_SUPPORT_XCB=1)
+               target_link_libraries(vkscutilnoshader ${XCB_LIBRARIES})
+
        endif ()
 endif()
 
 add_library(vkutil STATIC ${VKUTIL_SRCS})
-target_link_libraries(vkutil ${VKUTIL_LIBS})
+target_include_directories(vkutil PUBLIC ${GLSLANG_INCLUDE_PATH} ${spirv-tools_SOURCE_DIR}/include ${spirv-tools_SOURCE_DIR}/external/include )
+target_link_libraries(vkutil PUBLIC vkutilnoshader ${GLSLANG_LIBRARIES} SPIRV-Tools SPIRV-Tools-opt)
+
+add_library(vkscutil STATIC ${VKUTIL_SRCS})
+target_include_directories(vkscutil BEFORE PUBLIC generated/vulkansc)
+target_include_directories(vkscutil PUBLIC ${GLSLANG_INCLUDE_PATH} ${spirv-tools_SOURCE_DIR}/include ${spirv-tools_SOURCE_DIR}/external/include )
+target_link_libraries(vkscutil PUBLIC vkscutilnoshader ${GLSLANG_LIBRARIES} SPIRV-Tools SPIRV-Tools-opt)
@@ -16,34 +16,34 @@ bool checkMandatoryFeatures(const vkt::Context& context)
        coreFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
        void** nextPtr = &coreFeatures.pNext;
 
-       vk::VkPhysicalDevice16BitStorageFeaturesKHR physicalDevice16BitStorageFeaturesKHR;
-       deMemset(&physicalDevice16BitStorageFeaturesKHR, 0, sizeof(physicalDevice16BitStorageFeaturesKHR));
+       vk::VkPhysicalDevice16BitStorageFeatures physicalDevice16BitStorageFeatures;
+       deMemset(&physicalDevice16BitStorageFeatures, 0, sizeof(physicalDevice16BitStorageFeatures));
 
        if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_16bit_storage")) )
        {
-               physicalDevice16BitStorageFeaturesKHR.sType = getStructureType<VkPhysicalDevice16BitStorageFeaturesKHR>();
-               *nextPtr = &physicalDevice16BitStorageFeaturesKHR;
-               nextPtr  = &physicalDevice16BitStorageFeaturesKHR.pNext;
+               physicalDevice16BitStorageFeatures.sType = getStructureType<VkPhysicalDevice16BitStorageFeatures>();
+               *nextPtr = &physicalDevice16BitStorageFeatures;
+               nextPtr  = &physicalDevice16BitStorageFeatures.pNext;
        }
 
-       vk::VkPhysicalDevice8BitStorageFeaturesKHR physicalDevice8BitStorageFeaturesKHR;
-       deMemset(&physicalDevice8BitStorageFeaturesKHR, 0, sizeof(physicalDevice8BitStorageFeaturesKHR));
+       vk::VkPhysicalDevice8BitStorageFeatures physicalDevice8BitStorageFeatures;
+       deMemset(&physicalDevice8BitStorageFeatures, 0, sizeof(physicalDevice8BitStorageFeatures));
 
        if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_8bit_storage")) )
        {
-               physicalDevice8BitStorageFeaturesKHR.sType = getStructureType<VkPhysicalDevice8BitStorageFeaturesKHR>();
-               *nextPtr = &physicalDevice8BitStorageFeaturesKHR;
-               nextPtr  = &physicalDevice8BitStorageFeaturesKHR.pNext;
+               physicalDevice8BitStorageFeatures.sType = getStructureType<VkPhysicalDevice8BitStorageFeatures>();
+               *nextPtr = &physicalDevice8BitStorageFeatures;
+               nextPtr  = &physicalDevice8BitStorageFeatures.pNext;
        }
 
-       vk::VkPhysicalDeviceBufferDeviceAddressFeaturesKHR physicalDeviceBufferDeviceAddressFeaturesKHR;
-       deMemset(&physicalDeviceBufferDeviceAddressFeaturesKHR, 0, sizeof(physicalDeviceBufferDeviceAddressFeaturesKHR));
+       vk::VkPhysicalDeviceBufferDeviceAddressFeatures physicalDeviceBufferDeviceAddressFeatures;
+       deMemset(&physicalDeviceBufferDeviceAddressFeatures, 0, sizeof(physicalDeviceBufferDeviceAddressFeatures));
 
        if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_buffer_device_address")) )
        {
-               physicalDeviceBufferDeviceAddressFeaturesKHR.sType = getStructureType<VkPhysicalDeviceBufferDeviceAddressFeaturesKHR>();
-               *nextPtr = &physicalDeviceBufferDeviceAddressFeaturesKHR;
-               nextPtr  = &physicalDeviceBufferDeviceAddressFeaturesKHR.pNext;
+               physicalDeviceBufferDeviceAddressFeatures.sType = getStructureType<VkPhysicalDeviceBufferDeviceAddressFeatures>();
+               *nextPtr = &physicalDeviceBufferDeviceAddressFeatures;
+               nextPtr  = &physicalDeviceBufferDeviceAddressFeatures.pNext;
        }
 
        vk::VkPhysicalDeviceConditionalRenderingFeaturesEXT physicalDeviceConditionalRenderingFeaturesEXT;
@@ -66,14 +66,14 @@ bool checkMandatoryFeatures(const vkt::Context& context)
                nextPtr  = &physicalDeviceDepthClipEnableFeaturesEXT.pNext;
        }
 
-       vk::VkPhysicalDeviceDescriptorIndexingFeaturesEXT physicalDeviceDescriptorIndexingFeaturesEXT;
-       deMemset(&physicalDeviceDescriptorIndexingFeaturesEXT, 0, sizeof(physicalDeviceDescriptorIndexingFeaturesEXT));
+       vk::VkPhysicalDeviceDescriptorIndexingFeatures physicalDeviceDescriptorIndexingFeatures;
+       deMemset(&physicalDeviceDescriptorIndexingFeatures, 0, sizeof(physicalDeviceDescriptorIndexingFeatures));
 
        if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
        {
-               physicalDeviceDescriptorIndexingFeaturesEXT.sType = getStructureType<VkPhysicalDeviceDescriptorIndexingFeaturesEXT>();
-               *nextPtr = &physicalDeviceDescriptorIndexingFeaturesEXT;
-               nextPtr  = &physicalDeviceDescriptorIndexingFeaturesEXT.pNext;
+               physicalDeviceDescriptorIndexingFeatures.sType = getStructureType<VkPhysicalDeviceDescriptorIndexingFeatures>();
+               *nextPtr = &physicalDeviceDescriptorIndexingFeatures;
+               nextPtr  = &physicalDeviceDescriptorIndexingFeatures.pNext;
        }
 
        vk::VkPhysicalDeviceFragmentDensityMapFeaturesEXT physicalDeviceFragmentDensityMapFeaturesEXT;
@@ -96,24 +96,24 @@ bool checkMandatoryFeatures(const vkt::Context& context)
                nextPtr  = &physicalDeviceFragmentShaderInterlockFeaturesEXT.pNext;
        }
 
-       vk::VkPhysicalDeviceHostQueryResetFeaturesEXT physicalDeviceHostQueryResetFeaturesEXT;
-       deMemset(&physicalDeviceHostQueryResetFeaturesEXT, 0, sizeof(physicalDeviceHostQueryResetFeaturesEXT));
+       vk::VkPhysicalDeviceHostQueryResetFeatures physicalDeviceHostQueryResetFeatures;
+       deMemset(&physicalDeviceHostQueryResetFeatures, 0, sizeof(physicalDeviceHostQueryResetFeatures));
 
        if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_host_query_reset")) )
        {
-               physicalDeviceHostQueryResetFeaturesEXT.sType = getStructureType<VkPhysicalDeviceHostQueryResetFeaturesEXT>();
-               *nextPtr = &physicalDeviceHostQueryResetFeaturesEXT;
-               nextPtr  = &physicalDeviceHostQueryResetFeaturesEXT.pNext;
+               physicalDeviceHostQueryResetFeatures.sType = getStructureType<VkPhysicalDeviceHostQueryResetFeatures>();
+               *nextPtr = &physicalDeviceHostQueryResetFeatures;
+               nextPtr  = &physicalDeviceHostQueryResetFeatures.pNext;
        }
 
-       vk::VkPhysicalDeviceImagelessFramebufferFeaturesKHR physicalDeviceImagelessFramebufferFeaturesKHR;
-       deMemset(&physicalDeviceImagelessFramebufferFeaturesKHR, 0, sizeof(physicalDeviceImagelessFramebufferFeaturesKHR));
+       vk::VkPhysicalDeviceImagelessFramebufferFeatures physicalDeviceImagelessFramebufferFeatures;
+       deMemset(&physicalDeviceImagelessFramebufferFeatures, 0, sizeof(physicalDeviceImagelessFramebufferFeatures));
 
        if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_imageless_framebuffer")) )
        {
-               physicalDeviceImagelessFramebufferFeaturesKHR.sType = getStructureType<VkPhysicalDeviceImagelessFramebufferFeaturesKHR>();
-               *nextPtr = &physicalDeviceImagelessFramebufferFeaturesKHR;
-               nextPtr  = &physicalDeviceImagelessFramebufferFeaturesKHR.pNext;
+               physicalDeviceImagelessFramebufferFeatures.sType = getStructureType<VkPhysicalDeviceImagelessFramebufferFeatures>();
+               *nextPtr = &physicalDeviceImagelessFramebufferFeatures;
+               nextPtr  = &physicalDeviceImagelessFramebufferFeatures.pNext;
        }
 
        vk::VkPhysicalDeviceIndexTypeUint8FeaturesEXT physicalDeviceIndexTypeUint8FeaturesEXT;
@@ -186,44 +186,44 @@ bool checkMandatoryFeatures(const vkt::Context& context)
                nextPtr  = &physicalDevicePipelineExecutablePropertiesFeaturesKHR.pNext;
        }
 
-       vk::VkPhysicalDeviceSamplerYcbcrConversionFeaturesKHR physicalDeviceSamplerYcbcrConversionFeaturesKHR;
-       deMemset(&physicalDeviceSamplerYcbcrConversionFeaturesKHR, 0, sizeof(physicalDeviceSamplerYcbcrConversionFeaturesKHR));
+       vk::VkPhysicalDeviceSamplerYcbcrConversionFeatures physicalDeviceSamplerYcbcrConversionFeatures;
+       deMemset(&physicalDeviceSamplerYcbcrConversionFeatures, 0, sizeof(physicalDeviceSamplerYcbcrConversionFeatures));
 
        if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_sampler_ycbcr_conversion")) )
        {
-               physicalDeviceSamplerYcbcrConversionFeaturesKHR.sType = getStructureType<VkPhysicalDeviceSamplerYcbcrConversionFeaturesKHR>();
-               *nextPtr = &physicalDeviceSamplerYcbcrConversionFeaturesKHR;
-               nextPtr  = &physicalDeviceSamplerYcbcrConversionFeaturesKHR.pNext;
+               physicalDeviceSamplerYcbcrConversionFeatures.sType = getStructureType<VkPhysicalDeviceSamplerYcbcrConversionFeatures>();
+               *nextPtr = &physicalDeviceSamplerYcbcrConversionFeatures;
+               nextPtr  = &physicalDeviceSamplerYcbcrConversionFeatures.pNext;
        }
 
-       vk::VkPhysicalDeviceScalarBlockLayoutFeaturesEXT physicalDeviceScalarBlockLayoutFeaturesEXT;
-       deMemset(&physicalDeviceScalarBlockLayoutFeaturesEXT, 0, sizeof(physicalDeviceScalarBlockLayoutFeaturesEXT));
+       vk::VkPhysicalDeviceScalarBlockLayoutFeatures physicalDeviceScalarBlockLayoutFeatures;
+       deMemset(&physicalDeviceScalarBlockLayoutFeatures, 0, sizeof(physicalDeviceScalarBlockLayoutFeatures));
 
        if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_scalar_block_layout")) )
        {
-               physicalDeviceScalarBlockLayoutFeaturesEXT.sType = getStructureType<VkPhysicalDeviceScalarBlockLayoutFeaturesEXT>();
-               *nextPtr = &physicalDeviceScalarBlockLayoutFeaturesEXT;
-               nextPtr  = &physicalDeviceScalarBlockLayoutFeaturesEXT.pNext;
+               physicalDeviceScalarBlockLayoutFeatures.sType = getStructureType<VkPhysicalDeviceScalarBlockLayoutFeatures>();
+               *nextPtr = &physicalDeviceScalarBlockLayoutFeatures;
+               nextPtr  = &physicalDeviceScalarBlockLayoutFeatures.pNext;
        }
 
-       vk::VkPhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR physicalDeviceSeparateDepthStencilLayoutsFeaturesKHR;
-       deMemset(&physicalDeviceSeparateDepthStencilLayoutsFeaturesKHR, 0, sizeof(physicalDeviceSeparateDepthStencilLayoutsFeaturesKHR));
+       vk::VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures physicalDeviceSeparateDepthStencilLayoutsFeatures;
+       deMemset(&physicalDeviceSeparateDepthStencilLayoutsFeatures, 0, sizeof(physicalDeviceSeparateDepthStencilLayoutsFeatures));
 
        if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_separate_depth_stencil_layouts")) )
        {
-               physicalDeviceSeparateDepthStencilLayoutsFeaturesKHR.sType = getStructureType<VkPhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR>();
-               *nextPtr = &physicalDeviceSeparateDepthStencilLayoutsFeaturesKHR;
-               nextPtr  = &physicalDeviceSeparateDepthStencilLayoutsFeaturesKHR.pNext;
+               physicalDeviceSeparateDepthStencilLayoutsFeatures.sType = getStructureType<VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures>();
+               *nextPtr = &physicalDeviceSeparateDepthStencilLayoutsFeatures;
+               nextPtr  = &physicalDeviceSeparateDepthStencilLayoutsFeatures.pNext;
        }
 
-       vk::VkPhysicalDeviceShaderAtomicInt64FeaturesKHR physicalDeviceShaderAtomicInt64FeaturesKHR;
-       deMemset(&physicalDeviceShaderAtomicInt64FeaturesKHR, 0, sizeof(physicalDeviceShaderAtomicInt64FeaturesKHR));
+       vk::VkPhysicalDeviceShaderAtomicInt64Features physicalDeviceShaderAtomicInt64Features;
+       deMemset(&physicalDeviceShaderAtomicInt64Features, 0, sizeof(physicalDeviceShaderAtomicInt64Features));
 
        if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_shader_atomic_int64")) )
        {
-               physicalDeviceShaderAtomicInt64FeaturesKHR.sType = getStructureType<VkPhysicalDeviceShaderAtomicInt64FeaturesKHR>();
-               *nextPtr = &physicalDeviceShaderAtomicInt64FeaturesKHR;
-               nextPtr  = &physicalDeviceShaderAtomicInt64FeaturesKHR.pNext;
+               physicalDeviceShaderAtomicInt64Features.sType = getStructureType<VkPhysicalDeviceShaderAtomicInt64Features>();
+               *nextPtr = &physicalDeviceShaderAtomicInt64Features;
+               nextPtr  = &physicalDeviceShaderAtomicInt64Features.pNext;
        }
 
        vk::VkPhysicalDeviceShaderClockFeaturesKHR physicalDeviceShaderClockFeaturesKHR;
@@ -266,14 +266,14 @@ bool checkMandatoryFeatures(const vkt::Context& context)
                nextPtr  = &physicalDeviceShaderImageAtomicInt64FeaturesEXT.pNext;
        }
 
-       vk::VkPhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR physicalDeviceShaderSubgroupExtendedTypesFeaturesKHR;
-       deMemset(&physicalDeviceShaderSubgroupExtendedTypesFeaturesKHR, 0, sizeof(physicalDeviceShaderSubgroupExtendedTypesFeaturesKHR));
+       vk::VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures physicalDeviceShaderSubgroupExtendedTypesFeatures;
+       deMemset(&physicalDeviceShaderSubgroupExtendedTypesFeatures, 0, sizeof(physicalDeviceShaderSubgroupExtendedTypesFeatures));
 
        if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_shader_subgroup_extended_types")) )
        {
-               physicalDeviceShaderSubgroupExtendedTypesFeaturesKHR.sType = getStructureType<VkPhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR>();
-               *nextPtr = &physicalDeviceShaderSubgroupExtendedTypesFeaturesKHR;
-               nextPtr  = &physicalDeviceShaderSubgroupExtendedTypesFeaturesKHR.pNext;
+               physicalDeviceShaderSubgroupExtendedTypesFeatures.sType = getStructureType<VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures>();
+               *nextPtr = &physicalDeviceShaderSubgroupExtendedTypesFeatures;
+               nextPtr  = &physicalDeviceShaderSubgroupExtendedTypesFeatures.pNext;
        }
 
        vk::VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR physicalDeviceShaderTerminateInvocationFeaturesKHR;
@@ -316,14 +316,14 @@ bool checkMandatoryFeatures(const vkt::Context& context)
                nextPtr  = &physicalDeviceTextureCompressionASTCHDRFeaturesEXT.pNext;
        }
 
-       vk::VkPhysicalDeviceTimelineSemaphoreFeaturesKHR physicalDeviceTimelineSemaphoreFeaturesKHR;
-       deMemset(&physicalDeviceTimelineSemaphoreFeaturesKHR, 0, sizeof(physicalDeviceTimelineSemaphoreFeaturesKHR));
+       vk::VkPhysicalDeviceTimelineSemaphoreFeatures physicalDeviceTimelineSemaphoreFeatures;
+       deMemset(&physicalDeviceTimelineSemaphoreFeatures, 0, sizeof(physicalDeviceTimelineSemaphoreFeatures));
 
        if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_timeline_semaphore")) )
        {
-               physicalDeviceTimelineSemaphoreFeaturesKHR.sType = getStructureType<VkPhysicalDeviceTimelineSemaphoreFeaturesKHR>();
-               *nextPtr = &physicalDeviceTimelineSemaphoreFeaturesKHR;
-               nextPtr  = &physicalDeviceTimelineSemaphoreFeaturesKHR.pNext;
+               physicalDeviceTimelineSemaphoreFeatures.sType = getStructureType<VkPhysicalDeviceTimelineSemaphoreFeatures>();
+               *nextPtr = &physicalDeviceTimelineSemaphoreFeatures;
+               nextPtr  = &physicalDeviceTimelineSemaphoreFeatures.pNext;
        }
 
        vk::VkPhysicalDeviceTransformFeedbackFeaturesEXT physicalDeviceTransformFeedbackFeaturesEXT;
@@ -336,14 +336,14 @@ bool checkMandatoryFeatures(const vkt::Context& context)
                nextPtr  = &physicalDeviceTransformFeedbackFeaturesEXT.pNext;
        }
 
-       vk::VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR physicalDeviceUniformBufferStandardLayoutFeaturesKHR;
-       deMemset(&physicalDeviceUniformBufferStandardLayoutFeaturesKHR, 0, sizeof(physicalDeviceUniformBufferStandardLayoutFeaturesKHR));
+       vk::VkPhysicalDeviceUniformBufferStandardLayoutFeatures physicalDeviceUniformBufferStandardLayoutFeatures;
+       deMemset(&physicalDeviceUniformBufferStandardLayoutFeatures, 0, sizeof(physicalDeviceUniformBufferStandardLayoutFeatures));
 
        if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_uniform_buffer_standard_layout")) )
        {
-               physicalDeviceUniformBufferStandardLayoutFeaturesKHR.sType = getStructureType<VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR>();
-               *nextPtr = &physicalDeviceUniformBufferStandardLayoutFeaturesKHR;
-               nextPtr  = &physicalDeviceUniformBufferStandardLayoutFeaturesKHR.pNext;
+               physicalDeviceUniformBufferStandardLayoutFeatures.sType = getStructureType<VkPhysicalDeviceUniformBufferStandardLayoutFeatures>();
+               *nextPtr = &physicalDeviceUniformBufferStandardLayoutFeatures;
+               nextPtr  = &physicalDeviceUniformBufferStandardLayoutFeatures.pNext;
        }
 
        vk::VkPhysicalDeviceVariablePointersFeatures physicalDeviceVariablePointersFeatures;
@@ -386,14 +386,14 @@ bool checkMandatoryFeatures(const vkt::Context& context)
                nextPtr  = &physicalDeviceVulkan12Features.pNext;
        }
 
-       vk::VkPhysicalDeviceVulkanMemoryModelFeaturesKHR physicalDeviceVulkanMemoryModelFeaturesKHR;
-       deMemset(&physicalDeviceVulkanMemoryModelFeaturesKHR, 0, sizeof(physicalDeviceVulkanMemoryModelFeaturesKHR));
+       vk::VkPhysicalDeviceVulkanMemoryModelFeatures physicalDeviceVulkanMemoryModelFeatures;
+       deMemset(&physicalDeviceVulkanMemoryModelFeatures, 0, sizeof(physicalDeviceVulkanMemoryModelFeatures));
 
        if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_vulkan_memory_model")) )
        {
-               physicalDeviceVulkanMemoryModelFeaturesKHR.sType = getStructureType<VkPhysicalDeviceVulkanMemoryModelFeaturesKHR>();
-               *nextPtr = &physicalDeviceVulkanMemoryModelFeaturesKHR;
-               nextPtr  = &physicalDeviceVulkanMemoryModelFeaturesKHR.pNext;
+               physicalDeviceVulkanMemoryModelFeatures.sType = getStructureType<VkPhysicalDeviceVulkanMemoryModelFeatures>();
+               *nextPtr = &physicalDeviceVulkanMemoryModelFeatures;
+               nextPtr  = &physicalDeviceVulkanMemoryModelFeatures.pNext;
        }
 
        vk::VkPhysicalDeviceYcbcrImageArraysFeaturesEXT physicalDeviceYcbcrImageArraysFeaturesEXT;
@@ -437,7 +437,7 @@ bool checkMandatoryFeatures(const vkt::Context& context)
 
        if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_8bit_storage")) )
        {
-               if ( physicalDevice8BitStorageFeaturesKHR.storageBuffer8BitAccess == VK_FALSE )
+               if ( physicalDevice8BitStorageFeatures.storageBuffer8BitAccess == VK_FALSE )
                {
                        log << tcu::TestLog::Message << "Mandatory feature storageBuffer8BitAccess not supported" << tcu::TestLog::EndMessage;
                        result = false;
@@ -482,7 +482,7 @@ bool checkMandatoryFeatures(const vkt::Context& context)
 
        if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
        {
-               if ( physicalDeviceDescriptorIndexingFeaturesEXT.shaderUniformTexelBufferArrayDynamicIndexing == VK_FALSE )
+               if ( physicalDeviceDescriptorIndexingFeatures.shaderUniformTexelBufferArrayDynamicIndexing == VK_FALSE )
                {
                        log << tcu::TestLog::Message << "Mandatory feature shaderUniformTexelBufferArrayDynamicIndexing not supported" << tcu::TestLog::EndMessage;
                        result = false;
@@ -491,7 +491,7 @@ bool checkMandatoryFeatures(const vkt::Context& context)
 
        if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
        {
-               if ( physicalDeviceDescriptorIndexingFeaturesEXT.shaderStorageTexelBufferArrayDynamicIndexing == VK_FALSE )
+               if ( physicalDeviceDescriptorIndexingFeatures.shaderStorageTexelBufferArrayDynamicIndexing == VK_FALSE )
                {
                        log << tcu::TestLog::Message << "Mandatory feature shaderStorageTexelBufferArrayDynamicIndexing not supported" << tcu::TestLog::EndMessage;
                        result = false;
@@ -500,7 +500,7 @@ bool checkMandatoryFeatures(const vkt::Context& context)
 
        if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
        {
-               if ( physicalDeviceDescriptorIndexingFeaturesEXT.shaderSampledImageArrayNonUniformIndexing == VK_FALSE )
+               if ( physicalDeviceDescriptorIndexingFeatures.shaderSampledImageArrayNonUniformIndexing == VK_FALSE )
                {
                        log << tcu::TestLog::Message << "Mandatory feature shaderSampledImageArrayNonUniformIndexing not supported" << tcu::TestLog::EndMessage;
                        result = false;
@@ -509,7 +509,7 @@ bool checkMandatoryFeatures(const vkt::Context& context)
 
        if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
        {
-               if ( physicalDeviceDescriptorIndexingFeaturesEXT.shaderStorageBufferArrayNonUniformIndexing == VK_FALSE )
+               if ( physicalDeviceDescriptorIndexingFeatures.shaderStorageBufferArrayNonUniformIndexing == VK_FALSE )
                {
                        log << tcu::TestLog::Message << "Mandatory feature shaderStorageBufferArrayNonUniformIndexing not supported" << tcu::TestLog::EndMessage;
                        result = false;
@@ -518,7 +518,7 @@ bool checkMandatoryFeatures(const vkt::Context& context)
 
        if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
        {
-               if ( physicalDeviceDescriptorIndexingFeaturesEXT.shaderUniformTexelBufferArrayNonUniformIndexing == VK_FALSE )
+               if ( physicalDeviceDescriptorIndexingFeatures.shaderUniformTexelBufferArrayNonUniformIndexing == VK_FALSE )
                {
                        log << tcu::TestLog::Message << "Mandatory feature shaderUniformTexelBufferArrayNonUniformIndexing not supported" << tcu::TestLog::EndMessage;
                        result = false;
@@ -527,7 +527,7 @@ bool checkMandatoryFeatures(const vkt::Context& context)
 
        if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
        {
-               if ( physicalDeviceDescriptorIndexingFeaturesEXT.descriptorBindingSampledImageUpdateAfterBind == VK_FALSE )
+               if ( physicalDeviceDescriptorIndexingFeatures.descriptorBindingSampledImageUpdateAfterBind == VK_FALSE )
                {
                        log << tcu::TestLog::Message << "Mandatory feature descriptorBindingSampledImageUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
                        result = false;
@@ -536,7 +536,7 @@ bool checkMandatoryFeatures(const vkt::Context& context)
 
        if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
        {
-               if ( physicalDeviceDescriptorIndexingFeaturesEXT.descriptorBindingStorageImageUpdateAfterBind == VK_FALSE )
+               if ( physicalDeviceDescriptorIndexingFeatures.descriptorBindingStorageImageUpdateAfterBind == VK_FALSE )
                {
                        log << tcu::TestLog::Message << "Mandatory feature descriptorBindingStorageImageUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
                        result = false;
@@ -545,7 +545,7 @@ bool checkMandatoryFeatures(const vkt::Context& context)
 
        if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
        {
-               if ( physicalDeviceDescriptorIndexingFeaturesEXT.descriptorBindingStorageBufferUpdateAfterBind == VK_FALSE )
+               if ( physicalDeviceDescriptorIndexingFeatures.descriptorBindingStorageBufferUpdateAfterBind == VK_FALSE )
                {
                        log << tcu::TestLog::Message << "Mandatory feature descriptorBindingStorageBufferUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
                        result = false;
@@ -554,7 +554,7 @@ bool checkMandatoryFeatures(const vkt::Context& context)
 
        if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
        {
-               if ( physicalDeviceDescriptorIndexingFeaturesEXT.descriptorBindingUniformTexelBufferUpdateAfterBind == VK_FALSE )
+               if ( physicalDeviceDescriptorIndexingFeatures.descriptorBindingUniformTexelBufferUpdateAfterBind == VK_FALSE )
                {
                        log << tcu::TestLog::Message << "Mandatory feature descriptorBindingUniformTexelBufferUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
                        result = false;
@@ -563,7 +563,7 @@ bool checkMandatoryFeatures(const vkt::Context& context)
 
        if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
        {
-               if ( physicalDeviceDescriptorIndexingFeaturesEXT.descriptorBindingStorageTexelBufferUpdateAfterBind == VK_FALSE )
+               if ( physicalDeviceDescriptorIndexingFeatures.descriptorBindingStorageTexelBufferUpdateAfterBind == VK_FALSE )
                {
                        log << tcu::TestLog::Message << "Mandatory feature descriptorBindingStorageTexelBufferUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
                        result = false;
@@ -572,7 +572,7 @@ bool checkMandatoryFeatures(const vkt::Context& context)
 
        if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
        {
-               if ( physicalDeviceDescriptorIndexingFeaturesEXT.descriptorBindingUpdateUnusedWhilePending == VK_FALSE )
+               if ( physicalDeviceDescriptorIndexingFeatures.descriptorBindingUpdateUnusedWhilePending == VK_FALSE )
                {
                        log << tcu::TestLog::Message << "Mandatory feature descriptorBindingUpdateUnusedWhilePending not supported" << tcu::TestLog::EndMessage;
                        result = false;
@@ -581,7 +581,7 @@ bool checkMandatoryFeatures(const vkt::Context& context)
 
        if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
        {
-               if ( physicalDeviceDescriptorIndexingFeaturesEXT.descriptorBindingPartiallyBound == VK_FALSE )
+               if ( physicalDeviceDescriptorIndexingFeatures.descriptorBindingPartiallyBound == VK_FALSE )
                {
                        log << tcu::TestLog::Message << "Mandatory feature descriptorBindingPartiallyBound not supported" << tcu::TestLog::EndMessage;
                        result = false;
@@ -590,7 +590,7 @@ bool checkMandatoryFeatures(const vkt::Context& context)
 
        if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
        {
-               if ( physicalDeviceDescriptorIndexingFeaturesEXT.runtimeDescriptorArray == VK_FALSE )
+               if ( physicalDeviceDescriptorIndexingFeatures.runtimeDescriptorArray == VK_FALSE )
                {
                        log << tcu::TestLog::Message << "Mandatory feature runtimeDescriptorArray not supported" << tcu::TestLog::EndMessage;
                        result = false;
@@ -617,7 +617,7 @@ bool checkMandatoryFeatures(const vkt::Context& context)
 
        if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_scalar_block_layout")) )
        {
-               if ( physicalDeviceScalarBlockLayoutFeaturesEXT.scalarBlockLayout == VK_FALSE )
+               if ( physicalDeviceScalarBlockLayoutFeatures.scalarBlockLayout == VK_FALSE )
                {
                        log << tcu::TestLog::Message << "Mandatory feature scalarBlockLayout not supported" << tcu::TestLog::EndMessage;
                        result = false;
@@ -626,7 +626,7 @@ bool checkMandatoryFeatures(const vkt::Context& context)
 
        if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_uniform_buffer_standard_layout")) )
        {
-               if ( physicalDeviceUniformBufferStandardLayoutFeaturesKHR.uniformBufferStandardLayout == VK_FALSE )
+               if ( physicalDeviceUniformBufferStandardLayoutFeatures.uniformBufferStandardLayout == VK_FALSE )
                {
                        log << tcu::TestLog::Message << "Mandatory feature uniformBufferStandardLayout not supported" << tcu::TestLog::EndMessage;
                        result = false;
@@ -671,7 +671,7 @@ bool checkMandatoryFeatures(const vkt::Context& context)
 
        if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_shader_subgroup_extended_types")) )
        {
-               if ( physicalDeviceShaderSubgroupExtendedTypesFeaturesKHR.shaderSubgroupExtendedTypes == VK_FALSE )
+               if ( physicalDeviceShaderSubgroupExtendedTypesFeatures.shaderSubgroupExtendedTypes == VK_FALSE )
                {
                        log << tcu::TestLog::Message << "Mandatory feature shaderSubgroupExtendedTypes not supported" << tcu::TestLog::EndMessage;
                        result = false;
@@ -689,7 +689,7 @@ bool checkMandatoryFeatures(const vkt::Context& context)
 
        if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_imageless_framebuffer")) )
        {
-               if ( physicalDeviceImagelessFramebufferFeaturesKHR.imagelessFramebuffer == VK_FALSE )
+               if ( physicalDeviceImagelessFramebufferFeatures.imagelessFramebuffer == VK_FALSE )
                {
                        log << tcu::TestLog::Message << "Mandatory feature imagelessFramebuffer not supported" << tcu::TestLog::EndMessage;
                        result = false;
@@ -716,7 +716,7 @@ bool checkMandatoryFeatures(const vkt::Context& context)
 
        if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_separate_depth_stencil_layouts")) )
        {
-               if ( physicalDeviceSeparateDepthStencilLayoutsFeaturesKHR.separateDepthStencilLayouts == VK_FALSE )
+               if ( physicalDeviceSeparateDepthStencilLayoutsFeatures.separateDepthStencilLayouts == VK_FALSE )
                {
                        log << tcu::TestLog::Message << "Mandatory feature separateDepthStencilLayouts not supported" << tcu::TestLog::EndMessage;
                        result = false;
@@ -734,7 +734,7 @@ bool checkMandatoryFeatures(const vkt::Context& context)
 
        if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_host_query_reset")) )
        {
-               if ( physicalDeviceHostQueryResetFeaturesEXT.hostQueryReset == VK_FALSE )
+               if ( physicalDeviceHostQueryResetFeatures.hostQueryReset == VK_FALSE )
                {
                        log << tcu::TestLog::Message << "Mandatory feature hostQueryReset not supported" << tcu::TestLog::EndMessage;
                        result = false;
@@ -752,7 +752,7 @@ bool checkMandatoryFeatures(const vkt::Context& context)
 
        if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_timeline_semaphore")) )
        {
-               if ( physicalDeviceTimelineSemaphoreFeaturesKHR.timelineSemaphore == VK_FALSE )
+               if ( physicalDeviceTimelineSemaphoreFeatures.timelineSemaphore == VK_FALSE )
                {
                        log << tcu::TestLog::Message << "Mandatory feature timelineSemaphore not supported" << tcu::TestLog::EndMessage;
                        result = false;
@@ -950,7 +950,7 @@ bool checkMandatoryFeatures(const vkt::Context& context)
 
        if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_vulkan_memory_model")) )
        {
-               if ( physicalDeviceVulkanMemoryModelFeaturesKHR.vulkanMemoryModel == VK_FALSE )
+               if ( physicalDeviceVulkanMemoryModelFeatures.vulkanMemoryModel == VK_FALSE )
                {
                        log << tcu::TestLog::Message << "Mandatory feature vulkanMemoryModel not supported" << tcu::TestLog::EndMessage;
                        result = false;
@@ -959,7 +959,7 @@ bool checkMandatoryFeatures(const vkt::Context& context)
 
        if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_buffer_device_address")) )
        {
-               if ( physicalDeviceBufferDeviceAddressFeaturesKHR.bufferDeviceAddress == VK_FALSE )
+               if ( physicalDeviceBufferDeviceAddressFeatures.bufferDeviceAddress == VK_FALSE )
                {
                        log << tcu::TestLog::Message << "Mandatory feature bufferDeviceAddress not supported" << tcu::TestLog::EndMessage;
                        result = false;
@@ -1022,7 +1022,7 @@ bool checkMandatoryFeatures(const vkt::Context& context)
 
        if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_shader_atomic_int64")) )
        {
-               if ( physicalDeviceShaderAtomicInt64FeaturesKHR.shaderBufferInt64Atomics == VK_FALSE )
+               if ( physicalDeviceShaderAtomicInt64Features.shaderBufferInt64Atomics == VK_FALSE )
                {
                        log << tcu::TestLog::Message << "Mandatory feature shaderBufferInt64Atomics not supported" << tcu::TestLog::EndMessage;
                        result = false;
@@ -1031,7 +1031,7 @@ bool checkMandatoryFeatures(const vkt::Context& context)
 
        if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_16bit_storage")) )
        {
-               if ( physicalDevice16BitStorageFeaturesKHR.storageBuffer16BitAccess == VK_FALSE )
+               if ( physicalDevice16BitStorageFeatures.storageBuffer16BitAccess == VK_FALSE )
                {
                        log << tcu::TestLog::Message << "Mandatory feature storageBuffer16BitAccess not supported" << tcu::TestLog::EndMessage;
                        result = false;
@@ -1067,7 +1067,7 @@ bool checkMandatoryFeatures(const vkt::Context& context)
 
        if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_sampler_ycbcr_conversion")) )
        {
-               if ( physicalDeviceSamplerYcbcrConversionFeaturesKHR.samplerYcbcrConversion == VK_FALSE )
+               if ( physicalDeviceSamplerYcbcrConversionFeatures.samplerYcbcrConversion == VK_FALSE )
                {
                        log << tcu::TestLog::Message << "Mandatory feature samplerYcbcrConversion not supported" << tcu::TestLog::EndMessage;
                        result = false;
diff --git a/external/vulkancts/framework/vulkan/generated/vulkansc/vkBasicTypes.inl b/external/vulkancts/framework/vulkan/generated/vulkansc/vkBasicTypes.inl
new file mode 100644 (file)
index 0000000..69978bf
--- /dev/null
@@ -0,0 +1,2159 @@
+/* WARNING: This is auto-generated file. Do not modify, since changes will
+ * be lost! Modify the generating script instead.
+ */
+#define VK_API_VERSION_1_0                                     (static_cast<deUint32>                  (VK_MAKE_VERSION(1, 0, 0)))
+#define VKSC_API_VERSION_1_0                           (static_cast<deUint32>                  (VK_MAKE_VERSION(1, 0, 0)))
+#define VK_API_VERSION_1_1                                     (static_cast<deUint32>                  (VK_MAKE_VERSION(1, 1, 0)))
+#define VK_API_VERSION_1_2                                     (static_cast<deUint32>                  (VK_MAKE_VERSION(1, 2, 0)))
+#define VK_MAX_PHYSICAL_DEVICE_NAME_SIZE       (static_cast<size_t>                    (256))
+#define VK_MAX_EXTENSION_NAME_SIZE                     (static_cast<size_t>                    (256))
+#define VK_MAX_DRIVER_NAME_SIZE                                (static_cast<size_t>                    (256))
+#define VK_MAX_DRIVER_INFO_SIZE                                (static_cast<size_t>                    (256))
+#define VK_UUID_SIZE                                           (static_cast<size_t>                    (16))
+#define VK_LUID_SIZE                                           (static_cast<size_t>                    (8))
+#define VK_MAX_MEMORY_TYPES                                    (static_cast<size_t>                    (32))
+#define VK_MAX_MEMORY_HEAPS                                    (static_cast<size_t>                    (16))
+#define VK_MAX_DESCRIPTION_SIZE                                (static_cast<size_t>                    (256))
+#define VK_MAX_DEVICE_GROUP_SIZE                       (static_cast<size_t>                    (32))
+#define VK_ATTACHMENT_UNUSED                           (static_cast<deUint32>                  ((~0U)))
+#define VK_SUBPASS_EXTERNAL                                    (static_cast<deUint32>                  ((~0U)))
+#define VK_QUEUE_FAMILY_IGNORED                                (static_cast<deUint32>                  ((~0U)))
+#define VK_QUEUE_FAMILY_EXTERNAL                       (static_cast<deUint32>                  ((~0U-1)))
+#define VK_REMAINING_MIP_LEVELS                                (static_cast<deUint32>                  ((~0U)))
+#define VK_REMAINING_ARRAY_LAYERS                      (static_cast<deUint32>                  ((~0U)))
+#define VK_WHOLE_SIZE                                          (static_cast<vk::VkDeviceSize>  ((~0ULL)))
+#define VK_TRUE                                                                (static_cast<vk::VkBool32>              (1))
+#define VK_FALSE                                                       (static_cast<vk::VkBool32>              (0))
+#define VK_API_MAX_FRAMEWORK_VERSION           VK_API_VERSION_1_2
+
+VK_DEFINE_NON_DISPATCHABLE_HANDLE      (VkBuffer,                                      HANDLE_TYPE_BUFFER);
+VK_DEFINE_NON_DISPATCHABLE_HANDLE      (VkImage,                                       HANDLE_TYPE_IMAGE);
+VK_DEFINE_HANDLE                                       (VkInstance,                            HANDLE_TYPE_INSTANCE);
+VK_DEFINE_HANDLE                                       (VkPhysicalDevice,                      HANDLE_TYPE_PHYSICAL_DEVICE);
+VK_DEFINE_HANDLE                                       (VkDevice,                                      HANDLE_TYPE_DEVICE);
+VK_DEFINE_HANDLE                                       (VkQueue,                                       HANDLE_TYPE_QUEUE);
+VK_DEFINE_NON_DISPATCHABLE_HANDLE      (VkSemaphore,                           HANDLE_TYPE_SEMAPHORE);
+VK_DEFINE_HANDLE                                       (VkCommandBuffer,                       HANDLE_TYPE_COMMAND_BUFFER);
+VK_DEFINE_NON_DISPATCHABLE_HANDLE      (VkFence,                                       HANDLE_TYPE_FENCE);
+VK_DEFINE_NON_DISPATCHABLE_HANDLE      (VkDeviceMemory,                        HANDLE_TYPE_DEVICE_MEMORY);
+VK_DEFINE_NON_DISPATCHABLE_HANDLE      (VkEvent,                                       HANDLE_TYPE_EVENT);
+VK_DEFINE_NON_DISPATCHABLE_HANDLE      (VkQueryPool,                           HANDLE_TYPE_QUERY_POOL);
+VK_DEFINE_NON_DISPATCHABLE_HANDLE      (VkBufferView,                          HANDLE_TYPE_BUFFER_VIEW);
+VK_DEFINE_NON_DISPATCHABLE_HANDLE      (VkImageView,                           HANDLE_TYPE_IMAGE_VIEW);
+VK_DEFINE_NON_DISPATCHABLE_HANDLE      (VkShaderModule,                        HANDLE_TYPE_SHADER_MODULE);
+VK_DEFINE_NON_DISPATCHABLE_HANDLE      (VkPipelineCache,                       HANDLE_TYPE_PIPELINE_CACHE);
+VK_DEFINE_NON_DISPATCHABLE_HANDLE      (VkPipelineLayout,                      HANDLE_TYPE_PIPELINE_LAYOUT);
+VK_DEFINE_NON_DISPATCHABLE_HANDLE      (VkPipeline,                            HANDLE_TYPE_PIPELINE);
+VK_DEFINE_NON_DISPATCHABLE_HANDLE      (VkRenderPass,                          HANDLE_TYPE_RENDER_PASS);
+VK_DEFINE_NON_DISPATCHABLE_HANDLE      (VkDescriptorSetLayout,         HANDLE_TYPE_DESCRIPTOR_SET_LAYOUT);
+VK_DEFINE_NON_DISPATCHABLE_HANDLE      (VkSampler,                                     HANDLE_TYPE_SAMPLER);
+VK_DEFINE_NON_DISPATCHABLE_HANDLE      (VkDescriptorSet,                       HANDLE_TYPE_DESCRIPTOR_SET);
+VK_DEFINE_NON_DISPATCHABLE_HANDLE      (VkDescriptorPool,                      HANDLE_TYPE_DESCRIPTOR_POOL);
+VK_DEFINE_NON_DISPATCHABLE_HANDLE      (VkFramebuffer,                         HANDLE_TYPE_FRAMEBUFFER);
+VK_DEFINE_NON_DISPATCHABLE_HANDLE      (VkCommandPool,                         HANDLE_TYPE_COMMAND_POOL);
+VK_DEFINE_NON_DISPATCHABLE_HANDLE      (VkSamplerYcbcrConversion,      HANDLE_TYPE_SAMPLER_YCBCR_CONVERSION);
+VK_DEFINE_NON_DISPATCHABLE_HANDLE      (VkSurfaceKHR,                          HANDLE_TYPE_SURFACE_KHR);
+VK_DEFINE_NON_DISPATCHABLE_HANDLE      (VkSwapchainKHR,                        HANDLE_TYPE_SWAPCHAIN_KHR);
+VK_DEFINE_NON_DISPATCHABLE_HANDLE      (VkDisplayKHR,                          HANDLE_TYPE_DISPLAY_KHR);
+VK_DEFINE_NON_DISPATCHABLE_HANDLE      (VkDisplayModeKHR,                      HANDLE_TYPE_DISPLAY_MODE_KHR);
+
+enum VkResult
+{
+       VK_SUCCESS                                                                                              = 0,
+       VK_NOT_READY                                                                                    = 1,
+       VK_TIMEOUT                                                                                              = 2,
+       VK_EVENT_SET                                                                                    = 3,
+       VK_EVENT_RESET                                                                                  = 4,
+       VK_INCOMPLETE                                                                                   = 5,
+       VK_ERROR_OUT_OF_HOST_MEMORY                                                             = -1,
+       VK_ERROR_OUT_OF_DEVICE_MEMORY                                                   = -2,
+       VK_ERROR_INITIALIZATION_FAILED                                                  = -3,
+       VK_ERROR_DEVICE_LOST                                                                    = -4,
+       VK_ERROR_MEMORY_MAP_FAILED                                                              = -5,
+       VK_ERROR_LAYER_NOT_PRESENT                                                              = -6,
+       VK_ERROR_EXTENSION_NOT_PRESENT                                                  = -7,
+       VK_ERROR_FEATURE_NOT_PRESENT                                                    = -8,
+       VK_ERROR_INCOMPATIBLE_DRIVER                                                    = -9,
+       VK_ERROR_TOO_MANY_OBJECTS                                                               = -10,
+       VK_ERROR_FORMAT_NOT_SUPPORTED                                                   = -11,
+       VK_ERROR_FRAGMENTED_POOL                                                                = -12,
+       VK_ERROR_UNKNOWN                                                                                = -13,
+       VK_ERROR_OUT_OF_POOL_MEMORY                                                             = -1000069000,
+       VK_ERROR_INVALID_EXTERNAL_HANDLE                                                = -1000072003,
+       VK_ERROR_FRAGMENTATION                                                                  = -1000161000,
+       VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS                                 = -1000257000,
+       VK_ERROR_INVALID_PIPELINE_CACHE_DATA                                    = -1000349000,
+       VK_ERROR_NO_PIPELINE_MATCH                                                              = -1000349001,
+       VK_ERROR_SURFACE_LOST_KHR                                                               = -1000000000,
+       VK_ERROR_NATIVE_WINDOW_IN_USE_KHR                                               = -1000000001,
+       VK_SUBOPTIMAL_KHR                                                                               = 1000001003,
+       VK_ERROR_OUT_OF_DATE_KHR                                                                = -1000001004,
+       VK_ERROR_INCOMPATIBLE_DISPLAY_KHR                                               = -1000003001,
+       VK_ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT   = -1000158000,
+       VK_ERROR_NOT_PERMITTED_EXT                                                              = -1000174001,
+       VK_ERROR_INVALID_PIPELINE_CACHE_DATA_KHR                                = VK_ERROR_INVALID_PIPELINE_CACHE_DATA,
+       VK_ERROR_NO_PIPELINE_MATCH_KHR                                                  = VK_ERROR_NO_PIPELINE_MATCH,
+       VK_RESULT_MAX_ENUM                                                                              = 0x7FFFFFFF,
+};
+
+enum VkStructureType
+{
+       VK_STRUCTURE_TYPE_APPLICATION_INFO                                                                                                      = 0,
+       VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO                                                                                          = 1,
+       VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO                                                                                      = 2,
+       VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO                                                                                            = 3,
+       VK_STRUCTURE_TYPE_SUBMIT_INFO                                                                                                           = 4,
+       VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO                                                                                          = 5,
+       VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE                                                                                           = 6,
+       VK_STRUCTURE_TYPE_BIND_SPARSE_INFO                                                                                                      = 7,
+       VK_STRUCTURE_TYPE_FENCE_CREATE_INFO                                                                                                     = 8,
+       VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO                                                                                         = 9,
+       VK_STRUCTURE_TYPE_EVENT_CREATE_INFO                                                                                                     = 10,
+       VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO                                                                                        = 11,
+       VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO                                                                                            = 12,
+       VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO                                                                                       = 13,
+       VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO                                                                                                     = 14,
+       VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO                                                                                        = 15,
+       VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO                                                                                     = 16,
+       VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO                                                                            = 17,
+       VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO                                                                     = 18,
+       VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO                                                       = 19,
+       VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO                                                     = 20,
+       VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO                                                       = 21,
+       VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO                                                           = 22,
+       VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO                                                      = 23,
+       VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO                                                        = 24,
+       VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO                                                      = 25,
+       VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO                                                        = 26,
+       VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO                                                            = 27,
+       VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO                                                                         = 28,
+       VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO                                                                          = 29,
+       VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO                                                                           = 30,
+       VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO                                                                                           = 31,
+       VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO                                                                     = 32,
+       VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO                                                                           = 33,
+       VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO                                                                          = 34,
+       VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET                                                                                          = 35,
+       VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET                                                                                           = 36,
+       VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO                                                                                       = 37,
+       VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO                                                                                       = 38,
+       VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO                                                                                      = 39,
+       VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO                                                                          = 40,
+       VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO                                                                       = 41,
+       VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO                                                                                     = 42,
+       VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO                                                                                        = 43,
+       VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER                                                                                         = 44,
+       VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER                                                                                          = 45,
+       VK_STRUCTURE_TYPE_MEMORY_BARRIER                                                                                                        = 46,
+       VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO                                                                           = 47,
+       VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO                                                                                     = 48,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES                                                           = 1000094000,
+       VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO                                                                                       = 1000157000,
+       VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO                                                                                        = 1000157001,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES                                                        = 1000083000,
+       VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS                                                                         = 1000127000,
+       VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO                                                                        = 1000127001,
+       VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO                                                                            = 1000060000,
+       VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO                                                           = 1000060003,
+       VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO                                                        = 1000060004,
+       VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO                                                                                      = 1000060005,
+       VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO                                                                         = 1000060006,
+       VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO                                                          = 1000060013,
+       VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO                                                           = 1000060014,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES                                                                      = 1000070000,
+       VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO                                                                       = 1000070001,
+       VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2                                                                     = 1000146000,
+       VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2                                                                      = 1000146001,
+       VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2                                                       = 1000146002,
+       VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2                                                                                         = 1000146003,
+       VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2                                                            = 1000146004,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2                                                                            = 1000059000,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2                                                                          = 1000059001,
+       VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2                                                                                           = 1000059002,
+       VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2                                                                                     = 1000059003,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2                                                           = 1000059004,
+       VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2                                                                                     = 1000059005,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2                                                           = 1000059006,
+       VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2                                                                      = 1000059007,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2                                            = 1000059008,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES                                                     = 1000117000,
+       VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO                                       = 1000117001,
+       VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO                                                                          = 1000117002,
+       VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO                         = 1000117003,
+       VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO                                                                     = 1000053000,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES                                                            = 1000053001,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES                                                          = 1000053002,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES                                            = 1000120000,
+       VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO                                                                                         = 1000145000,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES                                                     = 1000145001,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES                                           = 1000145002,
+       VK_STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2                                                                                           = 1000145003,
+       VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO                                                          = 1000156000,
+       VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO                                                                         = 1000156001,
+       VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO                                                                          = 1000156002,
+       VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO                                                          = 1000156003,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES                                     = 1000156004,
+       VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES                                      = 1000156005,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO                                            = 1000071000,
+       VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES                                                                      = 1000071001,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO                                                          = 1000071002,
+       VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES                                                                            = 1000071003,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES                                                                         = 1000071004,
+       VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO                                                            = 1000072000,
+       VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO                                                                     = 1000072001,
+       VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO                                                                           = 1000072002,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO                                                           = 1000112000,
+       VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES                                                                                     = 1000112001,
+       VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO                                                                                      = 1000113000,
+       VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO                                                                          = 1000077000,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO                                                       = 1000076000,
+       VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES                                                                         = 1000076001,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES                                                      = 1000168000,
+       VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT                                                                         = 1000168001,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES                                       = 1000063000,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES                                                           = 49,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES                                                         = 50,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES                                                           = 51,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES                                                         = 52,
+       VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO                                                                         = 1000147000,
+       VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2                                                                                      = 1000109000,
+       VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2                                                                                        = 1000109001,
+       VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2                                                                                         = 1000109002,
+       VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2                                                                                          = 1000109003,
+       VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2                                                                                     = 1000109004,
+       VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO                                                                                            = 1000109005,
+       VK_STRUCTURE_TYPE_SUBPASS_END_INFO                                                                                                      = 1000109006,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES                                                         = 1000177000,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES                                                                     = 1000196000,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES                                          = 1000180000,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES                                          = 1000082000,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES                                                     = 1000197000,
+       VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO                                       = 1000161000,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES                                          = 1000161001,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES                                        = 1000161002,
+       VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO                        = 1000161003,
+       VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT                       = 1000161004,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES                                      = 1000199000,
+       VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE                                                     = 1000199001,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES                                          = 1000221000,
+       VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO                                                                       = 1000246000,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES                                      = 1000130000,
+       VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO                                                            = 1000130001,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES                                          = 1000211000,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES                                        = 1000108000,
+       VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO                                                           = 1000108001,
+       VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO                                                                     = 1000108002,
+       VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO                                                                     = 1000108003,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES                       = 1000253000,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES                       = 1000175000,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES                       = 1000241000,
+       VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT                                                           = 1000241001,
+       VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT                                                         = 1000241002,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES                                                     = 1000261000,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES                                           = 1000207000,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES                                         = 1000207001,
+       VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO                                                                            = 1000207002,
+       VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO                                                                        = 1000207003,
+       VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO                                                                                           = 1000207004,
+       VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO                                                                                         = 1000207005,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES                                        = 1000257000,
+       VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO                                                                            = 1000244001,
+       VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO                                                     = 1000257002,
+       VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO                                           = 1000257003,
+       VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO                                                     = 1000257004,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_SC_1_0_PROPERTIES                                                      = 1000357000,
+       VK_STRUCTURE_TYPE_DEVICE_MEMORY_RESERVATION_CREATE_INFO                                                         = 1000357001,
+       VK_STRUCTURE_TYPE_COMMAND_POOL_MEMORY_RESERVATION_CREATE_INFO                                           = 1000357002,
+       VK_STRUCTURE_TYPE_COMMAND_POOL_MEMORY_CONSUMPTION                                                                       = 1000357003,
+       VK_STRUCTURE_TYPE_PIPELINE_POOL_SIZE                                                                                            = 1000357004,
+       VK_STRUCTURE_TYPE_PIPELINE_POOL_ENTRY_SIZE_CREATE_INFO                                                          = 1000357005,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_SC_1_0_FEATURES                                                        = 1000357006,
+       VK_STRUCTURE_TYPE_FAULT_DATA                                                                                                            = 1000298000,
+       VK_STRUCTURE_TYPE_FAULT_CALLBACK_INFO                                                                                           = 1000298001,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FAULT_HANDLING_PROPERTIES                                                     = 1000298002,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_IDENTIFIER_FEATURES                                          = 1000334000,
+       VK_STRUCTURE_TYPE_PIPELINE_IDENTIFIER_INFO                                                                                      = 1000334001,
+       VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR                                                                                     = 1000001000,
+       VK_STRUCTURE_TYPE_PRESENT_INFO_KHR                                                                                                      = 1000001001,
+       VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR                                                         = 1000060007,
+       VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR                                                                       = 1000060008,
+       VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR                                                          = 1000060009,
+       VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR                                                                           = 1000060010,
+       VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR                                                                         = 1000060011,
+       VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR                                                        = 1000060012,
+       VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR                                                                          = 1000002000,
+       VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR                                                                       = 1000002001,
+       VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR                                                                                      = 1000003000,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT                     = 1000066000,
+       VK_STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT                                                                       = 1000067000,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT                                                      = 1000067001,
+       VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR                                                                                     = 1000074000,
+       VK_STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR                                                                                      = 1000074001,
+       VK_STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR                                                                                        = 1000074002,
+       VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR                                                                          = 1000079000,
+       VK_STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR                                                                                     = 1000079001,
+       VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR                                                                                           = 1000084000,
+       VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT                                                                            = 1000090000,
+       VK_STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT                                                                                        = 1000091000,
+       VK_STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT                                                                                         = 1000091001,
+       VK_STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT                                                                                        = 1000091002,
+       VK_STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT                                                                     = 1000091003,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT                                      = 1000099000,
+       VK_STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT                                      = 1000099001,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT                     = 1000101000,
+       VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT                     = 1000101001,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT                                        = 1000102000,
+       VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT                       = 1000102001,
+       VK_STRUCTURE_TYPE_HDR_METADATA_EXT                                                                                                      = 1000105000,
+       VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR                                                       = 1000111000,
+       VK_STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR                                                                                      = 1000115000,
+       VK_STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR                                                                                         = 1000115001,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR                                                            = 1000119000,
+       VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR                                                                            = 1000119001,
+       VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR                                                                                          = 1000119002,
+       VK_STRUCTURE_TYPE_DISPLAY_PROPERTIES_2_KHR                                                                                      = 1000121000,
+       VK_STRUCTURE_TYPE_DISPLAY_PLANE_PROPERTIES_2_KHR                                                                        = 1000121001,
+       VK_STRUCTURE_TYPE_DISPLAY_MODE_PROPERTIES_2_KHR                                                                         = 1000121002,
+       VK_STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR                                                                                      = 1000121003,
+       VK_STRUCTURE_TYPE_DISPLAY_PLANE_CAPABILITIES_2_KHR                                                                      = 1000121004,
+       VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT                                                                                     = 1000143000,
+       VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT                                           = 1000143001,
+       VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT                                       = 1000143002,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT                                       = 1000143003,
+       VK_STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT                                                                            = 1000143004,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT                         = 1000148000,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT                       = 1000148001,
+       VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT                           = 1000148002,
+       VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT                                                       = 1000158000,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT                            = 1000158002,
+       VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT                                        = 1000158003,
+       VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT                            = 1000158004,
+       VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT                                                      = 1000158005,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT                                      = 1000170000,
+       VK_STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT                           = 1000170001,
+       VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT                                          = 1000174000,
+       VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT                                                           = 1000178000,
+       VK_STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT                                                            = 1000178001,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT                           = 1000178002,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR                                                     = 1000181000,
+       VK_STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT                                                                         = 1000184000,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT                       = 1000190000,
+       VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT                           = 1000190001,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT                         = 1000190002,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT                                           = 1000212000,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES_KHR                      = 1000215000,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT                          = 1000225000,
+       VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT          = 1000225001,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT                            = 1000225002,
+       VK_STRUCTURE_TYPE_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR                                                     = 1000226000,
+       VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_STATE_CREATE_INFO_KHR                          = 1000226001,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_PROPERTIES_KHR                          = 1000226002,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_FEATURES_KHR                            = 1000226003,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_KHR                                                     = 1000226004,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT                        = 1000234000,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT                                          = 1000237000,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT                        = 1000251000,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT                                       = 1000252000,
+       VK_STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT                                                                      = 1000256000,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT                                       = 1000259000,
+       VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT                                     = 1000259001,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT                                     = 1000259002,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT                                      = 1000260000,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT                                         = 1000265000,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT                           = 1000267000,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT       = 1000276000,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT                           = 1000281000,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT                         = 1000281001,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT                                                     = 1000286000,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT                                           = 1000286001,
+       VK_STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT                                           = 1000287000,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT                            = 1000287001,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT                                      = 1000287002,
+       VK_STRUCTURE_TYPE_REFRESH_OBJECT_LIST_KHR                                                                                       = 1000299000,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT                                         = 1000335000,
+       VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2_KHR                                                                                        = 1000337000,
+       VK_STRUCTURE_TYPE_COPY_IMAGE_INFO_2_KHR                                                                                         = 1000337001,
+       VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2_KHR                                                                       = 1000337002,
+       VK_STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2_KHR                                                                       = 1000337003,
+       VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2_KHR                                                                                         = 1000337004,
+       VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2_KHR                                                                                      = 1000337005,
+       VK_STRUCTURE_TYPE_BUFFER_COPY_2_KHR                                                                                                     = 1000337006,
+       VK_STRUCTURE_TYPE_IMAGE_COPY_2_KHR                                                                                                      = 1000337007,
+       VK_STRUCTURE_TYPE_IMAGE_BLIT_2_KHR                                                                                                      = 1000337008,
+       VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2_KHR                                                                                       = 1000337009,
+       VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2_KHR                                                                                           = 1000337010,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT                                                     = 1000340000,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES                                                     = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES                                        = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES,
+       VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES2_EXT                                                                                     = VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT,
+       VK_STRUCTURE_TYPE_FAULT_DATA_KHR                                                                                                        = VK_STRUCTURE_TYPE_FAULT_DATA,
+       VK_STRUCTURE_TYPE_FAULT_CALLBACK_INFO_KHR                                                                                       = VK_STRUCTURE_TYPE_FAULT_CALLBACK_INFO,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FAULT_HANDLING_PROPERTIES_KHR                                         = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FAULT_HANDLING_PROPERTIES,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_IDENTIFIER_FEATURES_KHR                                      = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_IDENTIFIER_FEATURES,
+       VK_STRUCTURE_TYPE_PIPELINE_IDENTIFIER_INFO_KHR                                                                          = VK_STRUCTURE_TYPE_PIPELINE_IDENTIFIER_INFO,
+       VK_STRUCTURE_TYPE_MAX_ENUM                                                                                                                      = 0x7FFFFFFF,
+};
+
+enum VkImageLayout
+{
+       VK_IMAGE_LAYOUT_UNDEFINED                                                                               = 0,
+       VK_IMAGE_LAYOUT_GENERAL                                                                                 = 1,
+       VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL                                                = 2,
+       VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL                                = 3,
+       VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL                                 = 4,
+       VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL                                                = 5,
+       VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL                                                    = 6,
+       VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL                                                    = 7,
+       VK_IMAGE_LAYOUT_PREINITIALIZED                                                                  = 8,
+       VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL              = 1000117000,
+       VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL              = 1000117001,
+       VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL                                                = 1000241000,
+       VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL                                                 = 1000241001,
+       VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL                                              = 1000241002,
+       VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL                                               = 1000241003,
+       VK_IMAGE_LAYOUT_PRESENT_SRC_KHR                                                                 = 1000001002,
+       VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR                                                              = 1000111000,
+       VK_IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV                                                 = 1000164003,
+       VK_IMAGE_LAYOUT_FRAGMENT_SHADING_RATE_ATTACHMENT_OPTIMAL_KHR    = VK_IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV,
+       VK_IMAGE_LAYOUT_MAX_ENUM                                                                                = 0x7FFFFFFF,
+};
+
+enum VkObjectType
+{
+       VK_OBJECT_TYPE_UNKNOWN                                  = 0,
+       VK_OBJECT_TYPE_INSTANCE                                 = 1,
+       VK_OBJECT_TYPE_PHYSICAL_DEVICE                  = 2,
+       VK_OBJECT_TYPE_DEVICE                                   = 3,
+       VK_OBJECT_TYPE_QUEUE                                    = 4,
+       VK_OBJECT_TYPE_SEMAPHORE                                = 5,
+       VK_OBJECT_TYPE_COMMAND_BUFFER                   = 6,
+       VK_OBJECT_TYPE_FENCE                                    = 7,
+       VK_OBJECT_TYPE_DEVICE_MEMORY                    = 8,
+       VK_OBJECT_TYPE_BUFFER                                   = 9,
+       VK_OBJECT_TYPE_IMAGE                                    = 10,
+       VK_OBJECT_TYPE_EVENT                                    = 11,
+       VK_OBJECT_TYPE_QUERY_POOL                               = 12,
+       VK_OBJECT_TYPE_BUFFER_VIEW                              = 13,
+       VK_OBJECT_TYPE_IMAGE_VIEW                               = 14,
+       VK_OBJECT_TYPE_SHADER_MODULE                    = 15,
+       VK_OBJECT_TYPE_PIPELINE_CACHE                   = 16,
+       VK_OBJECT_TYPE_PIPELINE_LAYOUT                  = 17,
+       VK_OBJECT_TYPE_RENDER_PASS                              = 18,
+       VK_OBJECT_TYPE_PIPELINE                                 = 19,
+       VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT    = 20,
+       VK_OBJECT_TYPE_SAMPLER                                  = 21,
+       VK_OBJECT_TYPE_DESCRIPTOR_POOL                  = 22,
+       VK_OBJECT_TYPE_DESCRIPTOR_SET                   = 23,
+       VK_OBJECT_TYPE_FRAMEBUFFER                              = 24,
+       VK_OBJECT_TYPE_COMMAND_POOL                             = 25,
+       VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION = 1000156000,
+       VK_OBJECT_TYPE_SURFACE_KHR                              = 1000000000,
+       VK_OBJECT_TYPE_SWAPCHAIN_KHR                    = 1000001000,
+       VK_OBJECT_TYPE_DISPLAY_KHR                              = 1000002000,
+       VK_OBJECT_TYPE_DISPLAY_MODE_KHR                 = 1000002001,
+       VK_OBJECT_TYPE_MAX_ENUM                                 = 0x7FFFFFFF,
+};
+
+enum VkVendorId
+{
+       VK_VENDOR_ID_VIV                = 0x10001,
+       VK_VENDOR_ID_VSI                = 0x10002,
+       VK_VENDOR_ID_KAZAN              = 0x10003,
+       VK_VENDOR_ID_CODEPLAY   = 0x10004,
+       VK_VENDOR_ID_MESA               = 0x10005,
+       VK_VENDOR_ID_POCL               = 0x10006,
+       VK_VENDOR_ID_MAX_ENUM   = 0x7FFFFFFF,
+};
+
+enum VkPipelineCacheHeaderVersion
+{
+       VK_PIPELINE_CACHE_HEADER_VERSION_ONE            = 1,
+       VK_PIPELINE_CACHE_HEADER_VERSION_MAX_ENUM       = 0x7FFFFFFF,
+};
+
+enum VkSystemAllocationScope
+{
+       VK_SYSTEM_ALLOCATION_SCOPE_COMMAND      = 0,
+       VK_SYSTEM_ALLOCATION_SCOPE_OBJECT       = 1,
+       VK_SYSTEM_ALLOCATION_SCOPE_CACHE        = 2,
+       VK_SYSTEM_ALLOCATION_SCOPE_DEVICE       = 3,
+       VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE     = 4,
+       VK_SYSTEM_ALLOCATION_SCOPE_LAST,
+       VK_SYSTEM_ALLOCATION_SCOPE_MAX_ENUM     = 0x7FFFFFFF,
+};
+
+enum VkInternalAllocationType
+{
+       VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE  = 0,
+       VK_INTERNAL_ALLOCATION_TYPE_LAST,
+       VK_INTERNAL_ALLOCATION_TYPE_MAX_ENUM    = 0x7FFFFFFF,
+};
+
+enum VkFormat
+{
+       VK_FORMAT_UNDEFINED                                                                             = 0,
+       VK_FORMAT_R4G4_UNORM_PACK8                                                              = 1,
+       VK_FORMAT_R4G4B4A4_UNORM_PACK16                                                 = 2,
+       VK_FORMAT_B4G4R4A4_UNORM_PACK16                                                 = 3,
+       VK_FORMAT_R5G6B5_UNORM_PACK16                                                   = 4,
+       VK_FORMAT_B5G6R5_UNORM_PACK16                                                   = 5,
+       VK_FORMAT_R5G5B5A1_UNORM_PACK16                                                 = 6,
+       VK_FORMAT_B5G5R5A1_UNORM_PACK16                                                 = 7,
+       VK_FORMAT_A1R5G5B5_UNORM_PACK16                                                 = 8,
+       VK_FORMAT_R8_UNORM                                                                              = 9,
+       VK_FORMAT_R8_SNORM                                                                              = 10,
+       VK_FORMAT_R8_USCALED                                                                    = 11,
+       VK_FORMAT_R8_SSCALED                                                                    = 12,
+       VK_FORMAT_R8_UINT                                                                               = 13,
+       VK_FORMAT_R8_SINT                                                                               = 14,
+       VK_FORMAT_R8_SRGB                                                                               = 15,
+       VK_FORMAT_R8G8_UNORM                                                                    = 16,
+       VK_FORMAT_R8G8_SNORM                                                                    = 17,
+       VK_FORMAT_R8G8_USCALED                                                                  = 18,
+       VK_FORMAT_R8G8_SSCALED                                                                  = 19,
+       VK_FORMAT_R8G8_UINT                                                                             = 20,
+       VK_FORMAT_R8G8_SINT                                                                             = 21,
+       VK_FORMAT_R8G8_SRGB                                                                             = 22,
+       VK_FORMAT_R8G8B8_UNORM                                                                  = 23,
+       VK_FORMAT_R8G8B8_SNORM                                                                  = 24,
+       VK_FORMAT_R8G8B8_USCALED                                                                = 25,
+       VK_FORMAT_R8G8B8_SSCALED                                                                = 26,
+       VK_FORMAT_R8G8B8_UINT                                                                   = 27,
+       VK_FORMAT_R8G8B8_SINT                                                                   = 28,
+       VK_FORMAT_R8G8B8_SRGB                                                                   = 29,
+       VK_FORMAT_B8G8R8_UNORM                                                                  = 30,
+       VK_FORMAT_B8G8R8_SNORM                                                                  = 31,
+       VK_FORMAT_B8G8R8_USCALED                                                                = 32,
+       VK_FORMAT_B8G8R8_SSCALED                                                                = 33,
+       VK_FORMAT_B8G8R8_UINT                                                                   = 34,
+       VK_FORMAT_B8G8R8_SINT                                                                   = 35,
+       VK_FORMAT_B8G8R8_SRGB                                                                   = 36,
+       VK_FORMAT_R8G8B8A8_UNORM                                                                = 37,
+       VK_FORMAT_R8G8B8A8_SNORM                                                                = 38,
+       VK_FORMAT_R8G8B8A8_USCALED                                                              = 39,
+       VK_FORMAT_R8G8B8A8_SSCALED                                                              = 40,
+       VK_FORMAT_R8G8B8A8_UINT                                                                 = 41,
+       VK_FORMAT_R8G8B8A8_SINT                                                                 = 42,
+       VK_FORMAT_R8G8B8A8_SRGB                                                                 = 43,
+       VK_FORMAT_B8G8R8A8_UNORM                                                                = 44,
+       VK_FORMAT_B8G8R8A8_SNORM                                                                = 45,
+       VK_FORMAT_B8G8R8A8_USCALED                                                              = 46,
+       VK_FORMAT_B8G8R8A8_SSCALED                                                              = 47,
+       VK_FORMAT_B8G8R8A8_UINT                                                                 = 48,
+       VK_FORMAT_B8G8R8A8_SINT                                                                 = 49,
+       VK_FORMAT_B8G8R8A8_SRGB                                                                 = 50,
+       VK_FORMAT_A8B8G8R8_UNORM_PACK32                                                 = 51,
+       VK_FORMAT_A8B8G8R8_SNORM_PACK32                                                 = 52,
+       VK_FORMAT_A8B8G8R8_USCALED_PACK32                                               = 53,
+       VK_FORMAT_A8B8G8R8_SSCALED_PACK32                                               = 54,
+       VK_FORMAT_A8B8G8R8_UINT_PACK32                                                  = 55,
+       VK_FORMAT_A8B8G8R8_SINT_PACK32                                                  = 56,
+       VK_FORMAT_A8B8G8R8_SRGB_PACK32                                                  = 57,
+       VK_FORMAT_A2R10G10B10_UNORM_PACK32                                              = 58,
+       VK_FORMAT_A2R10G10B10_SNORM_PACK32                                              = 59,
+       VK_FORMAT_A2R10G10B10_USCALED_PACK32                                    = 60,
+       VK_FORMAT_A2R10G10B10_SSCALED_PACK32                                    = 61,
+       VK_FORMAT_A2R10G10B10_UINT_PACK32                                               = 62,
+       VK_FORMAT_A2R10G10B10_SINT_PACK32                                               = 63,
+       VK_FORMAT_A2B10G10R10_UNORM_PACK32                                              = 64,
+       VK_FORMAT_A2B10G10R10_SNORM_PACK32                                              = 65,
+       VK_FORMAT_A2B10G10R10_USCALED_PACK32                                    = 66,
+       VK_FORMAT_A2B10G10R10_SSCALED_PACK32                                    = 67,
+       VK_FORMAT_A2B10G10R10_UINT_PACK32                                               = 68,
+       VK_FORMAT_A2B10G10R10_SINT_PACK32                                               = 69,
+       VK_FORMAT_R16_UNORM                                                                             = 70,
+       VK_FORMAT_R16_SNORM                                                                             = 71,
+       VK_FORMAT_R16_USCALED                                                                   = 72,
+       VK_FORMAT_R16_SSCALED                                                                   = 73,
+       VK_FORMAT_R16_UINT                                                                              = 74,
+       VK_FORMAT_R16_SINT                                                                              = 75,
+       VK_FORMAT_R16_SFLOAT                                                                    = 76,
+       VK_FORMAT_R16G16_UNORM                                                                  = 77,
+       VK_FORMAT_R16G16_SNORM                                                                  = 78,
+       VK_FORMAT_R16G16_USCALED                                                                = 79,
+       VK_FORMAT_R16G16_SSCALED                                                                = 80,
+       VK_FORMAT_R16G16_UINT                                                                   = 81,
+       VK_FORMAT_R16G16_SINT                                                                   = 82,
+       VK_FORMAT_R16G16_SFLOAT                                                                 = 83,
+       VK_FORMAT_R16G16B16_UNORM                                                               = 84,
+       VK_FORMAT_R16G16B16_SNORM                                                               = 85,
+       VK_FORMAT_R16G16B16_USCALED                                                             = 86,
+       VK_FORMAT_R16G16B16_SSCALED                                                             = 87,
+       VK_FORMAT_R16G16B16_UINT                                                                = 88,
+       VK_FORMAT_R16G16B16_SINT                                                                = 89,
+       VK_FORMAT_R16G16B16_SFLOAT                                                              = 90,
+       VK_FORMAT_R16G16B16A16_UNORM                                                    = 91,
+       VK_FORMAT_R16G16B16A16_SNORM                                                    = 92,
+       VK_FORMAT_R16G16B16A16_USCALED                                                  = 93,
+       VK_FORMAT_R16G16B16A16_SSCALED                                                  = 94,
+       VK_FORMAT_R16G16B16A16_UINT                                                             = 95,
+       VK_FORMAT_R16G16B16A16_SINT                                                             = 96,
+       VK_FORMAT_R16G16B16A16_SFLOAT                                                   = 97,
+       VK_FORMAT_R32_UINT                                                                              = 98,
+       VK_FORMAT_R32_SINT                                                                              = 99,
+       VK_FORMAT_R32_SFLOAT                                                                    = 100,
+       VK_FORMAT_R32G32_UINT                                                                   = 101,
+       VK_FORMAT_R32G32_SINT                                                                   = 102,
+       VK_FORMAT_R32G32_SFLOAT                                                                 = 103,
+       VK_FORMAT_R32G32B32_UINT                                                                = 104,
+       VK_FORMAT_R32G32B32_SINT                                                                = 105,
+       VK_FORMAT_R32G32B32_SFLOAT                                                              = 106,
+       VK_FORMAT_R32G32B32A32_UINT                                                             = 107,
+       VK_FORMAT_R32G32B32A32_SINT                                                             = 108,
+       VK_FORMAT_R32G32B32A32_SFLOAT                                                   = 109,
+       VK_FORMAT_R64_UINT                                                                              = 110,
+       VK_FORMAT_R64_SINT                                                                              = 111,
+       VK_FORMAT_R64_SFLOAT                                                                    = 112,
+       VK_FORMAT_R64G64_UINT                                                                   = 113,
+       VK_FORMAT_R64G64_SINT                                                                   = 114,
+       VK_FORMAT_R64G64_SFLOAT                                                                 = 115,
+       VK_FORMAT_R64G64B64_UINT                                                                = 116,
+       VK_FORMAT_R64G64B64_SINT                                                                = 117,
+       VK_FORMAT_R64G64B64_SFLOAT                                                              = 118,
+       VK_FORMAT_R64G64B64A64_UINT                                                             = 119,
+       VK_FORMAT_R64G64B64A64_SINT                                                             = 120,
+       VK_FORMAT_R64G64B64A64_SFLOAT                                                   = 121,
+       VK_FORMAT_B10G11R11_UFLOAT_PACK32                                               = 122,
+       VK_FORMAT_E5B9G9R9_UFLOAT_PACK32                                                = 123,
+       VK_FORMAT_D16_UNORM                                                                             = 124,
+       VK_FORMAT_X8_D24_UNORM_PACK32                                                   = 125,
+       VK_FORMAT_D32_SFLOAT                                                                    = 126,
+       VK_FORMAT_S8_UINT                                                                               = 127,
+       VK_FORMAT_D16_UNORM_S8_UINT                                                             = 128,
+       VK_FORMAT_D24_UNORM_S8_UINT                                                             = 129,
+       VK_FORMAT_D32_SFLOAT_S8_UINT                                                    = 130,
+       VK_FORMAT_BC1_RGB_UNORM_BLOCK                                                   = 131,
+       VK_FORMAT_BC1_RGB_SRGB_BLOCK                                                    = 132,
+       VK_FORMAT_BC1_RGBA_UNORM_BLOCK                                                  = 133,
+       VK_FORMAT_BC1_RGBA_SRGB_BLOCK                                                   = 134,
+       VK_FORMAT_BC2_UNORM_BLOCK                                                               = 135,
+       VK_FORMAT_BC2_SRGB_BLOCK                                                                = 136,
+       VK_FORMAT_BC3_UNORM_BLOCK                                                               = 137,
+       VK_FORMAT_BC3_SRGB_BLOCK                                                                = 138,
+       VK_FORMAT_BC4_UNORM_BLOCK                                                               = 139,
+       VK_FORMAT_BC4_SNORM_BLOCK                                                               = 140,
+       VK_FORMAT_BC5_UNORM_BLOCK                                                               = 141,
+       VK_FORMAT_BC5_SNORM_BLOCK                                                               = 142,
+       VK_FORMAT_BC6H_UFLOAT_BLOCK                                                             = 143,
+       VK_FORMAT_BC6H_SFLOAT_BLOCK                                                             = 144,
+       VK_FORMAT_BC7_UNORM_BLOCK                                                               = 145,
+       VK_FORMAT_BC7_SRGB_BLOCK                                                                = 146,
+       VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK                                               = 147,
+       VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK                                                = 148,
+       VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK                                             = 149,
+       VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK                                              = 150,
+       VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK                                             = 151,
+       VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK                                              = 152,
+       VK_FORMAT_EAC_R11_UNORM_BLOCK                                                   = 153,
+       VK_FORMAT_EAC_R11_SNORM_BLOCK                                                   = 154,
+       VK_FORMAT_EAC_R11G11_UNORM_BLOCK                                                = 155,
+       VK_FORMAT_EAC_R11G11_SNORM_BLOCK                                                = 156,
+       VK_FORMAT_ASTC_4x4_UNORM_BLOCK                                                  = 157,
+       VK_FORMAT_ASTC_4x4_SRGB_BLOCK                                                   = 158,
+       VK_FORMAT_ASTC_5x4_UNORM_BLOCK                                                  = 159,
+       VK_FORMAT_ASTC_5x4_SRGB_BLOCK                                                   = 160,
+       VK_FORMAT_ASTC_5x5_UNORM_BLOCK                                                  = 161,
+       VK_FORMAT_ASTC_5x5_SRGB_BLOCK                                                   = 162,
+       VK_FORMAT_ASTC_6x5_UNORM_BLOCK                                                  = 163,
+       VK_FORMAT_ASTC_6x5_SRGB_BLOCK                                                   = 164,
+       VK_FORMAT_ASTC_6x6_UNORM_BLOCK                                                  = 165,
+       VK_FORMAT_ASTC_6x6_SRGB_BLOCK                                                   = 166,
+       VK_FORMAT_ASTC_8x5_UNORM_BLOCK                                                  = 167,
+       VK_FORMAT_ASTC_8x5_SRGB_BLOCK                                                   = 168,
+       VK_FORMAT_ASTC_8x6_UNORM_BLOCK                                                  = 169,
+       VK_FORMAT_ASTC_8x6_SRGB_BLOCK                                                   = 170,
+       VK_FORMAT_ASTC_8x8_UNORM_BLOCK                                                  = 171,
+       VK_FORMAT_ASTC_8x8_SRGB_BLOCK                                                   = 172,
+       VK_FORMAT_ASTC_10x5_UNORM_BLOCK                                                 = 173,
+       VK_FORMAT_ASTC_10x5_SRGB_BLOCK                                                  = 174,
+       VK_FORMAT_ASTC_10x6_UNORM_BLOCK                                                 = 175,
+       VK_FORMAT_ASTC_10x6_SRGB_BLOCK                                                  = 176,
+       VK_FORMAT_ASTC_10x8_UNORM_BLOCK                                                 = 177,
+       VK_FORMAT_ASTC_10x8_SRGB_BLOCK                                                  = 178,
+       VK_FORMAT_ASTC_10x10_UNORM_BLOCK                                                = 179,
+       VK_FORMAT_ASTC_10x10_SRGB_BLOCK                                                 = 180,
+       VK_FORMAT_ASTC_12x10_UNORM_BLOCK                                                = 181,
+       VK_FORMAT_ASTC_12x10_SRGB_BLOCK                                                 = 182,
+       VK_FORMAT_ASTC_12x12_UNORM_BLOCK                                                = 183,
+       VK_FORMAT_ASTC_12x12_SRGB_BLOCK                                                 = 184,
+       VK_FORMAT_G8B8G8R8_422_UNORM                                                    = 1000156000,
+       VK_FORMAT_B8G8R8G8_422_UNORM                                                    = 1000156001,
+       VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM                                             = 1000156002,
+       VK_FORMAT_G8_B8R8_2PLANE_420_UNORM                                              = 1000156003,
+       VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM                                             = 1000156004,
+       VK_FORMAT_G8_B8R8_2PLANE_422_UNORM                                              = 1000156005,
+       VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM                                             = 1000156006,
+       VK_FORMAT_R10X6_UNORM_PACK16                                                    = 1000156007,
+       VK_FORMAT_R10X6G10X6_UNORM_2PACK16                                              = 1000156008,
+       VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16                    = 1000156009,
+       VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16                = 1000156010,
+       VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16                = 1000156011,
+       VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16    = 1000156012,
+       VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16             = 1000156013,
+       VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16    = 1000156014,
+       VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16             = 1000156015,
+       VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16    = 1000156016,
+       VK_FORMAT_R12X4_UNORM_PACK16                                                    = 1000156017,
+       VK_FORMAT_R12X4G12X4_UNORM_2PACK16                                              = 1000156018,
+       VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16                    = 1000156019,
+       VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16                = 1000156020,
+       VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16                = 1000156021,
+       VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16    = 1000156022,
+       VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16             = 1000156023,
+       VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16    = 1000156024,
+       VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16             = 1000156025,
+       VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16    = 1000156026,
+       VK_FORMAT_G16B16G16R16_422_UNORM                                                = 1000156027,
+       VK_FORMAT_B16G16R16G16_422_UNORM                                                = 1000156028,
+       VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM                                  = 1000156029,
+       VK_FORMAT_G16_B16R16_2PLANE_420_UNORM                                   = 1000156030,
+       VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM                                  = 1000156031,
+       VK_FORMAT_G16_B16R16_2PLANE_422_UNORM                                   = 1000156032,
+       VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM                                  = 1000156033,
+       VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT                                             = 1000066000,
+       VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT                                             = 1000066001,
+       VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT                                             = 1000066002,
+       VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT                                             = 1000066003,
+       VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT                                             = 1000066004,
+       VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT                                             = 1000066005,
+       VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT                                             = 1000066006,
+       VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT                                             = 1000066007,
+       VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT                                    = 1000066008,
+       VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT                                    = 1000066009,
+       VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT                                    = 1000066010,
+       VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT                                   = 1000066011,
+       VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT                                   = 1000066012,
+       VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT                                   = 1000066013,
+       VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT                                             = 1000340000,
+       VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT                                             = 1000340001,
+       VK_FORMAT_MAX_ENUM                                                                              = 0x7FFFFFFF,
+};
+
+enum VkImageTiling
+{
+       VK_IMAGE_TILING_OPTIMAL                                 = 0,
+       VK_IMAGE_TILING_LINEAR                                  = 1,
+       VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT = 1000158000,
+       VK_IMAGE_TILING_MAX_ENUM                                = 0x7FFFFFFF,
+};
+
+enum VkImageType
+{
+       VK_IMAGE_TYPE_1D                = 0,
+       VK_IMAGE_TYPE_2D                = 1,
+       VK_IMAGE_TYPE_3D                = 2,
+       VK_IMAGE_TYPE_LAST,
+       VK_IMAGE_TYPE_MAX_ENUM  = 0x7FFFFFFF,
+};
+
+enum VkPhysicalDeviceType
+{
+       VK_PHYSICAL_DEVICE_TYPE_OTHER                   = 0,
+       VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU  = 1,
+       VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU    = 2,
+       VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU             = 3,
+       VK_PHYSICAL_DEVICE_TYPE_CPU                             = 4,
+       VK_PHYSICAL_DEVICE_TYPE_LAST,
+       VK_PHYSICAL_DEVICE_TYPE_MAX_ENUM                = 0x7FFFFFFF,
+};
+
+enum VkQueryType
+{
+       VK_QUERY_TYPE_OCCLUSION                         = 0,
+       VK_QUERY_TYPE_PIPELINE_STATISTICS       = 1,
+       VK_QUERY_TYPE_TIMESTAMP                         = 2,
+       VK_QUERY_TYPE_LAST,
+       VK_QUERY_TYPE_MAX_ENUM                          = 0x7FFFFFFF,
+};
+
+enum VkSharingMode
+{
+       VK_SHARING_MODE_EXCLUSIVE       = 0,
+       VK_SHARING_MODE_CONCURRENT      = 1,
+       VK_SHARING_MODE_LAST,
+       VK_SHARING_MODE_MAX_ENUM        = 0x7FFFFFFF,
+};
+
+enum VkComponentSwizzle
+{
+       VK_COMPONENT_SWIZZLE_IDENTITY   = 0,
+       VK_COMPONENT_SWIZZLE_ZERO               = 1,
+       VK_COMPONENT_SWIZZLE_ONE                = 2,
+       VK_COMPONENT_SWIZZLE_R                  = 3,
+       VK_COMPONENT_SWIZZLE_G                  = 4,
+       VK_COMPONENT_SWIZZLE_B                  = 5,
+       VK_COMPONENT_SWIZZLE_A                  = 6,
+       VK_COMPONENT_SWIZZLE_LAST,
+       VK_COMPONENT_SWIZZLE_MAX_ENUM   = 0x7FFFFFFF,
+};
+
+enum VkImageViewType
+{
+       VK_IMAGE_VIEW_TYPE_1D                   = 0,
+       VK_IMAGE_VIEW_TYPE_2D                   = 1,
+       VK_IMAGE_VIEW_TYPE_3D                   = 2,
+       VK_IMAGE_VIEW_TYPE_CUBE                 = 3,
+       VK_IMAGE_VIEW_TYPE_1D_ARRAY             = 4,
+       VK_IMAGE_VIEW_TYPE_2D_ARRAY             = 5,
+       VK_IMAGE_VIEW_TYPE_CUBE_ARRAY   = 6,
+       VK_IMAGE_VIEW_TYPE_LAST,
+       VK_IMAGE_VIEW_TYPE_MAX_ENUM             = 0x7FFFFFFF,
+};
+
+enum VkBlendFactor
+{
+       VK_BLEND_FACTOR_ZERO                                            = 0,
+       VK_BLEND_FACTOR_ONE                                                     = 1,
+       VK_BLEND_FACTOR_SRC_COLOR                                       = 2,
+       VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR                     = 3,
+       VK_BLEND_FACTOR_DST_COLOR                                       = 4,
+       VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR                     = 5,
+       VK_BLEND_FACTOR_SRC_ALPHA                                       = 6,
+       VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA                     = 7,
+       VK_BLEND_FACTOR_DST_ALPHA                                       = 8,
+       VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA                     = 9,
+       VK_BLEND_FACTOR_CONSTANT_COLOR                          = 10,
+       VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR        = 11,
+       VK_BLEND_FACTOR_CONSTANT_ALPHA                          = 12,
+       VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA        = 13,
+       VK_BLEND_FACTOR_SRC_ALPHA_SATURATE                      = 14,
+       VK_BLEND_FACTOR_SRC1_COLOR                                      = 15,
+       VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR            = 16,
+       VK_BLEND_FACTOR_SRC1_ALPHA                                      = 17,
+       VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA            = 18,
+       VK_BLEND_FACTOR_LAST,
+       VK_BLEND_FACTOR_MAX_ENUM                                        = 0x7FFFFFFF,
+};
+
+enum VkBlendOp
+{
+       VK_BLEND_OP_ADD                                         = 0,
+       VK_BLEND_OP_SUBTRACT                            = 1,
+       VK_BLEND_OP_REVERSE_SUBTRACT            = 2,
+       VK_BLEND_OP_MIN                                         = 3,
+       VK_BLEND_OP_MAX                                         = 4,
+       VK_BLEND_OP_ZERO_EXT                            = 1000148000,
+       VK_BLEND_OP_SRC_EXT                                     = 1000148001,
+       VK_BLEND_OP_DST_EXT                                     = 1000148002,
+       VK_BLEND_OP_SRC_OVER_EXT                        = 1000148003,
+       VK_BLEND_OP_DST_OVER_EXT                        = 1000148004,
+       VK_BLEND_OP_SRC_IN_EXT                          = 1000148005,
+       VK_BLEND_OP_DST_IN_EXT                          = 1000148006,
+       VK_BLEND_OP_SRC_OUT_EXT                         = 1000148007,
+       VK_BLEND_OP_DST_OUT_EXT                         = 1000148008,
+       VK_BLEND_OP_SRC_ATOP_EXT                        = 1000148009,
+       VK_BLEND_OP_DST_ATOP_EXT                        = 1000148010,
+       VK_BLEND_OP_XOR_EXT                                     = 1000148011,
+       VK_BLEND_OP_MULTIPLY_EXT                        = 1000148012,
+       VK_BLEND_OP_SCREEN_EXT                          = 1000148013,
+       VK_BLEND_OP_OVERLAY_EXT                         = 1000148014,
+       VK_BLEND_OP_DARKEN_EXT                          = 1000148015,
+       VK_BLEND_OP_LIGHTEN_EXT                         = 1000148016,
+       VK_BLEND_OP_COLORDODGE_EXT                      = 1000148017,
+       VK_BLEND_OP_COLORBURN_EXT                       = 1000148018,
+       VK_BLEND_OP_HARDLIGHT_EXT                       = 1000148019,
+       VK_BLEND_OP_SOFTLIGHT_EXT                       = 1000148020,
+       VK_BLEND_OP_DIFFERENCE_EXT                      = 1000148021,
+       VK_BLEND_OP_EXCLUSION_EXT                       = 1000148022,
+       VK_BLEND_OP_INVERT_EXT                          = 1000148023,
+       VK_BLEND_OP_INVERT_RGB_EXT                      = 1000148024,
+       VK_BLEND_OP_LINEARDODGE_EXT                     = 1000148025,
+       VK_BLEND_OP_LINEARBURN_EXT                      = 1000148026,
+       VK_BLEND_OP_VIVIDLIGHT_EXT                      = 1000148027,
+       VK_BLEND_OP_LINEARLIGHT_EXT                     = 1000148028,
+       VK_BLEND_OP_PINLIGHT_EXT                        = 1000148029,
+       VK_BLEND_OP_HARDMIX_EXT                         = 1000148030,
+       VK_BLEND_OP_HSL_HUE_EXT                         = 1000148031,
+       VK_BLEND_OP_HSL_SATURATION_EXT          = 1000148032,
+       VK_BLEND_OP_HSL_COLOR_EXT                       = 1000148033,
+       VK_BLEND_OP_HSL_LUMINOSITY_EXT          = 1000148034,
+       VK_BLEND_OP_PLUS_EXT                            = 1000148035,
+       VK_BLEND_OP_PLUS_CLAMPED_EXT            = 1000148036,
+       VK_BLEND_OP_PLUS_CLAMPED_ALPHA_EXT      = 1000148037,
+       VK_BLEND_OP_PLUS_DARKER_EXT                     = 1000148038,
+       VK_BLEND_OP_MINUS_EXT                           = 1000148039,
+       VK_BLEND_OP_MINUS_CLAMPED_EXT           = 1000148040,
+       VK_BLEND_OP_CONTRAST_EXT                        = 1000148041,
+       VK_BLEND_OP_INVERT_OVG_EXT                      = 1000148042,
+       VK_BLEND_OP_RED_EXT                                     = 1000148043,
+       VK_BLEND_OP_GREEN_EXT                           = 1000148044,
+       VK_BLEND_OP_BLUE_EXT                            = 1000148045,
+       VK_BLEND_OP_MAX_ENUM                            = 0x7FFFFFFF,
+};
+
+enum VkCompareOp
+{
+       VK_COMPARE_OP_NEVER                             = 0,
+       VK_COMPARE_OP_LESS                              = 1,
+       VK_COMPARE_OP_EQUAL                             = 2,
+       VK_COMPARE_OP_LESS_OR_EQUAL             = 3,
+       VK_COMPARE_OP_GREATER                   = 4,
+       VK_COMPARE_OP_NOT_EQUAL                 = 5,
+       VK_COMPARE_OP_GREATER_OR_EQUAL  = 6,
+       VK_COMPARE_OP_ALWAYS                    = 7,
+       VK_COMPARE_OP_LAST,
+       VK_COMPARE_OP_MAX_ENUM                  = 0x7FFFFFFF,
+};
+
+enum VkDynamicState
+{
+       VK_DYNAMIC_STATE_VIEWPORT                                                       = 0,
+       VK_DYNAMIC_STATE_SCISSOR                                                        = 1,
+       VK_DYNAMIC_STATE_LINE_WIDTH                                                     = 2,
+       VK_DYNAMIC_STATE_DEPTH_BIAS                                                     = 3,
+       VK_DYNAMIC_STATE_BLEND_CONSTANTS                                        = 4,
+       VK_DYNAMIC_STATE_DEPTH_BOUNDS                                           = 5,
+       VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK                           = 6,
+       VK_DYNAMIC_STATE_STENCIL_WRITE_MASK                                     = 7,
+       VK_DYNAMIC_STATE_STENCIL_REFERENCE                                      = 8,
+       VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT                          = 1000099000,
+       VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT                           = 1000143000,
+       VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR                      = 1000226000,
+       VK_DYNAMIC_STATE_LINE_STIPPLE_EXT                                       = 1000259000,
+       VK_DYNAMIC_STATE_CULL_MODE_EXT                                          = 1000267000,
+       VK_DYNAMIC_STATE_FRONT_FACE_EXT                                         = 1000267001,
+       VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT                         = 1000267002,
+       VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT                        = 1000267003,
+       VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT                         = 1000267004,
+       VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT        = 1000267005,
+       VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE_EXT                          = 1000267006,
+       VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE_EXT                         = 1000267007,
+       VK_DYNAMIC_STATE_DEPTH_COMPARE_OP_EXT                           = 1000267008,
+       VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE_EXT           = 1000267009,
+       VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE_EXT                        = 1000267010,
+       VK_DYNAMIC_STATE_STENCIL_OP_EXT                                         = 1000267011,
+       VK_DYNAMIC_STATE_MAX_ENUM                                                       = 0x7FFFFFFF,
+};
+
+enum VkFrontFace
+{
+       VK_FRONT_FACE_COUNTER_CLOCKWISE = 0,
+       VK_FRONT_FACE_CLOCKWISE                 = 1,
+       VK_FRONT_FACE_LAST,
+       VK_FRONT_FACE_MAX_ENUM                  = 0x7FFFFFFF,
+};
+
+enum VkVertexInputRate
+{
+       VK_VERTEX_INPUT_RATE_VERTEX             = 0,
+       VK_VERTEX_INPUT_RATE_INSTANCE   = 1,
+       VK_VERTEX_INPUT_RATE_LAST,
+       VK_VERTEX_INPUT_RATE_MAX_ENUM   = 0x7FFFFFFF,
+};
+
+enum VkPrimitiveTopology
+{
+       VK_PRIMITIVE_TOPOLOGY_POINT_LIST                                        = 0,
+       VK_PRIMITIVE_TOPOLOGY_LINE_LIST                                         = 1,
+       VK_PRIMITIVE_TOPOLOGY_LINE_STRIP                                        = 2,
+       VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST                                     = 3,
+       VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP                            = 4,
+       VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN                                      = 5,
+       VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY          = 6,
+       VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY         = 7,
+       VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY      = 8,
+       VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY     = 9,
+       VK_PRIMITIVE_TOPOLOGY_PATCH_LIST                                        = 10,
+       VK_PRIMITIVE_TOPOLOGY_LAST,
+       VK_PRIMITIVE_TOPOLOGY_MAX_ENUM                                          = 0x7FFFFFFF,
+};
+
+enum VkPolygonMode
+{
+       VK_POLYGON_MODE_FILL            = 0,
+       VK_POLYGON_MODE_LINE            = 1,
+       VK_POLYGON_MODE_POINT           = 2,
+       VK_POLYGON_MODE_LAST,
+       VK_POLYGON_MODE_MAX_ENUM        = 0x7FFFFFFF,
+};
+
+enum VkStencilOp
+{
+       VK_STENCIL_OP_KEEP                                      = 0,
+       VK_STENCIL_OP_ZERO                                      = 1,
+       VK_STENCIL_OP_REPLACE                           = 2,
+       VK_STENCIL_OP_INCREMENT_AND_CLAMP       = 3,
+       VK_STENCIL_OP_DECREMENT_AND_CLAMP       = 4,
+       VK_STENCIL_OP_INVERT                            = 5,
+       VK_STENCIL_OP_INCREMENT_AND_WRAP        = 6,
+       VK_STENCIL_OP_DECREMENT_AND_WRAP        = 7,
+       VK_STENCIL_OP_LAST,
+       VK_STENCIL_OP_MAX_ENUM                          = 0x7FFFFFFF,
+};
+
+enum VkLogicOp
+{
+       VK_LOGIC_OP_CLEAR                       = 0,
+       VK_LOGIC_OP_AND                         = 1,
+       VK_LOGIC_OP_AND_REVERSE         = 2,
+       VK_LOGIC_OP_COPY                        = 3,
+       VK_LOGIC_OP_AND_INVERTED        = 4,
+       VK_LOGIC_OP_NO_OP                       = 5,
+       VK_LOGIC_OP_XOR                         = 6,
+       VK_LOGIC_OP_OR                          = 7,
+       VK_LOGIC_OP_NOR                         = 8,
+       VK_LOGIC_OP_EQUIVALENT          = 9,
+       VK_LOGIC_OP_INVERT                      = 10,
+       VK_LOGIC_OP_OR_REVERSE          = 11,
+       VK_LOGIC_OP_COPY_INVERTED       = 12,
+       VK_LOGIC_OP_OR_INVERTED         = 13,
+       VK_LOGIC_OP_NAND                        = 14,
+       VK_LOGIC_OP_SET                         = 15,
+       VK_LOGIC_OP_LAST,
+       VK_LOGIC_OP_MAX_ENUM            = 0x7FFFFFFF,
+};
+
+enum VkBorderColor
+{
+       VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK = 0,
+       VK_BORDER_COLOR_INT_TRANSPARENT_BLACK   = 1,
+       VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK              = 2,
+       VK_BORDER_COLOR_INT_OPAQUE_BLACK                = 3,
+       VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE              = 4,
+       VK_BORDER_COLOR_INT_OPAQUE_WHITE                = 5,
+       VK_BORDER_COLOR_FLOAT_CUSTOM_EXT                = 1000287003,
+       VK_BORDER_COLOR_INT_CUSTOM_EXT                  = 1000287004,
+       VK_BORDER_COLOR_MAX_ENUM                                = 0x7FFFFFFF,
+};
+
+enum VkFilter
+{
+       VK_FILTER_NEAREST       = 0,
+       VK_FILTER_LINEAR        = 1,
+       VK_FILTER_CUBIC_IMG     = 1000015000,
+       VK_FILTER_CUBIC_EXT     = VK_FILTER_CUBIC_IMG,
+       VK_FILTER_MAX_ENUM      = 0x7FFFFFFF,
+};
+
+enum VkSamplerAddressMode
+{
+       VK_SAMPLER_ADDRESS_MODE_REPEAT                                  = 0,
+       VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT                 = 1,
+       VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE                   = 2,
+       VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER                 = 3,
+       VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE    = 4,
+       VK_SAMPLER_ADDRESS_MODE_LAST,
+       VK_SAMPLER_ADDRESS_MODE_MAX_ENUM                                = 0x7FFFFFFF,
+};
+
+enum VkSamplerMipmapMode
+{
+       VK_SAMPLER_MIPMAP_MODE_NEAREST  = 0,
+       VK_SAMPLER_MIPMAP_MODE_LINEAR   = 1,
+       VK_SAMPLER_MIPMAP_MODE_LAST,
+       VK_SAMPLER_MIPMAP_MODE_MAX_ENUM = 0x7FFFFFFF,
+};
+
+enum VkDescriptorType
+{
+       VK_DESCRIPTOR_TYPE_SAMPLER                                      = 0,
+       VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER       = 1,
+       VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE                        = 2,
+       VK_DESCRIPTOR_TYPE_STORAGE_IMAGE                        = 3,
+       VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER         = 4,
+       VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER         = 5,
+       VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER                       = 6,
+       VK_DESCRIPTOR_TYPE_STORAGE_BUFFER                       = 7,
+       VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC       = 8,
+       VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC       = 9,
+       VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT                     = 10,
+       VK_DESCRIPTOR_TYPE_LAST,
+       VK_DESCRIPTOR_TYPE_MAX_ENUM                                     = 0x7FFFFFFF,
+};
+
+enum VkAttachmentLoadOp
+{
+       VK_ATTACHMENT_LOAD_OP_LOAD              = 0,
+       VK_ATTACHMENT_LOAD_OP_CLEAR             = 1,
+       VK_ATTACHMENT_LOAD_OP_DONT_CARE = 2,
+       VK_ATTACHMENT_LOAD_OP_LAST,
+       VK_ATTACHMENT_LOAD_OP_MAX_ENUM  = 0x7FFFFFFF,
+};
+
+enum VkAttachmentStoreOp
+{
+       VK_ATTACHMENT_STORE_OP_STORE            = 0,
+       VK_ATTACHMENT_STORE_OP_DONT_CARE        = 1,
+       VK_ATTACHMENT_STORE_OP_LAST,
+       VK_ATTACHMENT_STORE_OP_MAX_ENUM         = 0x7FFFFFFF,
+};
+
+enum VkPipelineBindPoint
+{
+       VK_PIPELINE_BIND_POINT_GRAPHICS = 0,
+       VK_PIPELINE_BIND_POINT_COMPUTE  = 1,
+       VK_PIPELINE_BIND_POINT_LAST,
+       VK_PIPELINE_BIND_POINT_MAX_ENUM = 0x7FFFFFFF,
+};
+
+enum VkCommandBufferLevel
+{
+       VK_COMMAND_BUFFER_LEVEL_PRIMARY         = 0,
+       VK_COMMAND_BUFFER_LEVEL_SECONDARY       = 1,
+       VK_COMMAND_BUFFER_LEVEL_LAST,
+       VK_COMMAND_BUFFER_LEVEL_MAX_ENUM        = 0x7FFFFFFF,
+};
+
+enum VkIndexType
+{
+       VK_INDEX_TYPE_UINT16    = 0,
+       VK_INDEX_TYPE_UINT32    = 1,
+       VK_INDEX_TYPE_UINT8_EXT = 1000265000,
+       VK_INDEX_TYPE_MAX_ENUM  = 0x7FFFFFFF,
+};
+
+enum VkSubpassContents
+{
+       VK_SUBPASS_CONTENTS_INLINE                                              = 0,
+       VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS   = 1,
+       VK_SUBPASS_CONTENTS_LAST,
+       VK_SUBPASS_CONTENTS_MAX_ENUM                                    = 0x7FFFFFFF,
+};
+
+enum VkFaultLevel
+{
+       VK_FAULT_LEVEL_UNASSIGNED               = 0,
+       VK_FAULT_LEVEL_CRITICAL                 = 1,
+       VK_FAULT_LEVEL_RECOVERABLE              = 2,
+       VK_FAULT_LEVEL_WARNING                  = 3,
+       VK_FAULT_LEVEL_UNASSIGNED_KHR   = VK_FAULT_LEVEL_UNASSIGNED,
+       VK_FAULT_LEVEL_CRITICAL_KHR             = VK_FAULT_LEVEL_CRITICAL,
+       VK_FAULT_LEVEL_RECOVERABLE_KHR  = VK_FAULT_LEVEL_RECOVERABLE,
+       VK_FAULT_LEVEL_WARNING_KHR              = VK_FAULT_LEVEL_WARNING,
+       VK_FAULT_LEVEL_LAST,
+       VK_FAULT_LEVEL_MAX_ENUM                 = 0x7FFFFFFF,
+};
+
+enum VkFaultType
+{
+       VK_FAULT_TYPE_INVALID                                   = 0,
+       VK_FAULT_TYPE_UNASSIGNED                                = 1,
+       VK_FAULT_TYPE_IMPLEMENTATION                    = 2,
+       VK_FAULT_TYPE_SYSTEM                                    = 3,
+       VK_FAULT_TYPE_PHYSICAL_DEVICE                   = 4,
+       VK_FAULT_TYPE_COMMAND_BUFFER_FULL               = 5,
+       VK_FAULT_TYPE_INVALID_API_USAGE                 = 6,
+       VK_FAULT_TYPE_INVALID_KHR                               = VK_FAULT_TYPE_INVALID,
+       VK_FAULT_TYPE_UNASSIGNED_KHR                    = VK_FAULT_TYPE_UNASSIGNED,
+       VK_FAULT_TYPE_IMPLEMENTATION_KHR                = VK_FAULT_TYPE_IMPLEMENTATION,
+       VK_FAULT_TYPE_SYSTEM_KHR                                = VK_FAULT_TYPE_SYSTEM,
+       VK_FAULT_TYPE_PHYSICAL_DEVICE_KHR               = VK_FAULT_TYPE_PHYSICAL_DEVICE,
+       VK_FAULT_TYPE_COMMAND_BUFFER_FULL_KHR   = VK_FAULT_TYPE_COMMAND_BUFFER_FULL,
+       VK_FAULT_TYPE_INVALID_API_USAGE_KHR             = VK_FAULT_TYPE_INVALID_API_USAGE,
+       VK_FAULT_TYPE_LAST,
+       VK_FAULT_TYPE_MAX_ENUM                                  = 0x7FFFFFFF,
+};
+
+enum VkFaultQueryBehavior
+{
+       VK_FAULT_QUERY_BEHAVIOR_GET_AND_CLEAR_ALL_FAULTS                = 0,
+       VK_FAULT_QUERY_BEHAVIOR_GET_AND_CLEAR_ALL_FAULTS_KHR    = VK_FAULT_QUERY_BEHAVIOR_GET_AND_CLEAR_ALL_FAULTS,
+       VK_FAULT_QUERY_BEHAVIOR_LAST,
+       VK_FAULT_QUERY_BEHAVIOR_MAX_ENUM                                                = 0x7FFFFFFF,
+};
+
+enum VkPipelineMatchControl
+{
+       VK_PIPELINE_MATCH_CONTROL_APPLICATION_UUID_EXACT_MATCH          = 0,
+       VK_PIPELINE_MATCH_CONTROL_APPLICATION_UUID_EXACT_MATCH_KHR      = VK_PIPELINE_MATCH_CONTROL_APPLICATION_UUID_EXACT_MATCH,
+       VK_PIPELINE_MATCH_CONTROL_LAST,
+       VK_PIPELINE_MATCH_CONTROL_MAX_ENUM                                                      = 0x7FFFFFFF,
+};
+
+enum VkPointClippingBehavior
+{
+       VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES                      = 0,
+       VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY        = 1,
+       VK_POINT_CLIPPING_BEHAVIOR_LAST,
+       VK_POINT_CLIPPING_BEHAVIOR_MAX_ENUM                                     = 0x7FFFFFFF,
+};
+
+enum VkTessellationDomainOrigin
+{
+       VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT        = 0,
+       VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT        = 1,
+       VK_TESSELLATION_DOMAIN_ORIGIN_LAST,
+       VK_TESSELLATION_DOMAIN_ORIGIN_MAX_ENUM          = 0x7FFFFFFF,
+};
+
+enum VkSamplerYcbcrModelConversion
+{
+       VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY          = 0,
+       VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY        = 1,
+       VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709                     = 2,
+       VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601                     = 3,
+       VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020            = 4,
+       VK_SAMPLER_YCBCR_MODEL_CONVERSION_LAST,
+       VK_SAMPLER_YCBCR_MODEL_CONVERSION_MAX_ENUM                      = 0x7FFFFFFF,
+};
+
+enum VkSamplerYcbcrRange
+{
+       VK_SAMPLER_YCBCR_RANGE_ITU_FULL         = 0,
+       VK_SAMPLER_YCBCR_RANGE_ITU_NARROW       = 1,
+       VK_SAMPLER_YCBCR_RANGE_LAST,
+       VK_SAMPLER_YCBCR_RANGE_MAX_ENUM         = 0x7FFFFFFF,
+};
+
+enum VkChromaLocation
+{
+       VK_CHROMA_LOCATION_COSITED_EVEN = 0,
+       VK_CHROMA_LOCATION_MIDPOINT             = 1,
+       VK_CHROMA_LOCATION_LAST,
+       VK_CHROMA_LOCATION_MAX_ENUM             = 0x7FFFFFFF,
+};
+
+enum VkDriverId
+{
+       VK_DRIVER_ID_AMD_PROPRIETARY                    = 1,
+       VK_DRIVER_ID_AMD_OPEN_SOURCE                    = 2,
+       VK_DRIVER_ID_MESA_RADV                                  = 3,
+       VK_DRIVER_ID_NVIDIA_PROPRIETARY                 = 4,
+       VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS  = 5,
+       VK_DRIVER_ID_INTEL_OPEN_SOURCE_MESA             = 6,
+       VK_DRIVER_ID_IMAGINATION_PROPRIETARY    = 7,
+       VK_DRIVER_ID_QUALCOMM_PROPRIETARY               = 8,
+       VK_DRIVER_ID_ARM_PROPRIETARY                    = 9,
+       VK_DRIVER_ID_GOOGLE_SWIFTSHADER                 = 10,
+       VK_DRIVER_ID_GGP_PROPRIETARY                    = 11,
+       VK_DRIVER_ID_BROADCOM_PROPRIETARY               = 12,
+       VK_DRIVER_ID_MESA_LLVMPIPE                              = 13,
+       VK_DRIVER_ID_MOLTENVK                                   = 14,
+       VK_DRIVER_ID_MAX_ENUM                                   = 0x7FFFFFFF,
+};
+
+enum VkShaderFloatControlsIndependence
+{
+       VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY       = 0,
+       VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL                       = 1,
+       VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE                      = 2,
+       VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_LAST,
+       VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_MAX_ENUM          = 0x7FFFFFFF,
+};
+
+enum VkSamplerReductionMode
+{
+       VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE      = 0,
+       VK_SAMPLER_REDUCTION_MODE_MIN                           = 1,
+       VK_SAMPLER_REDUCTION_MODE_MAX                           = 2,
+       VK_SAMPLER_REDUCTION_MODE_LAST,
+       VK_SAMPLER_REDUCTION_MODE_MAX_ENUM                      = 0x7FFFFFFF,
+};
+
+enum VkSemaphoreType
+{
+       VK_SEMAPHORE_TYPE_BINARY        = 0,
+       VK_SEMAPHORE_TYPE_TIMELINE      = 1,
+       VK_SEMAPHORE_TYPE_LAST,
+       VK_SEMAPHORE_TYPE_MAX_ENUM      = 0x7FFFFFFF,
+};
+
+enum VkPresentModeKHR
+{
+       VK_PRESENT_MODE_IMMEDIATE_KHR                                   = 0,
+       VK_PRESENT_MODE_MAILBOX_KHR                                             = 1,
+       VK_PRESENT_MODE_FIFO_KHR                                                = 2,
+       VK_PRESENT_MODE_FIFO_RELAXED_KHR                                = 3,
+       VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR               = 1000111000,
+       VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR   = 1000111001,
+       VK_PRESENT_MODE_MAX_ENUM_KHR                                    = 0x7FFFFFFF,
+};
+
+enum VkColorSpaceKHR
+{
+       VK_COLOR_SPACE_SRGB_NONLINEAR_KHR                       = 0,
+       VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT         = 1000104001,
+       VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT         = 1000104002,
+       VK_COLOR_SPACE_DISPLAY_P3_LINEAR_EXT            = 1000104003,
+       VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT                     = 1000104004,
+       VK_COLOR_SPACE_BT709_LINEAR_EXT                         = 1000104005,
+       VK_COLOR_SPACE_BT709_NONLINEAR_EXT                      = 1000104006,
+       VK_COLOR_SPACE_BT2020_LINEAR_EXT                        = 1000104007,
+       VK_COLOR_SPACE_HDR10_ST2084_EXT                         = 1000104008,
+       VK_COLOR_SPACE_DOLBYVISION_EXT                          = 1000104009,
+       VK_COLOR_SPACE_HDR10_HLG_EXT                            = 1000104010,
+       VK_COLOR_SPACE_ADOBERGB_LINEAR_EXT                      = 1000104011,
+       VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT           = 1000104012,
+       VK_COLOR_SPACE_PASS_THROUGH_EXT                         = 1000104013,
+       VK_COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT      = 1000104014,
+       VK_COLORSPACE_SRGB_NONLINEAR_KHR                        = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR,
+       VK_COLOR_SPACE_DCI_P3_LINEAR_EXT                        = VK_COLOR_SPACE_DISPLAY_P3_LINEAR_EXT,
+       VK_COLOR_SPACE_MAX_ENUM_KHR                                     = 0x7FFFFFFF,
+};
+
+enum VkFragmentShadingRateCombinerOpKHR
+{
+       VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR           = 0,
+       VK_FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_KHR        = 1,
+       VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MIN_KHR            = 2,
+       VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MAX_KHR            = 3,
+       VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MUL_KHR            = 4,
+       VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KHR_LAST,
+       VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MAX_ENUM_KHR       = 0x7FFFFFFF,
+};
+
+enum VkDisplayPowerStateEXT
+{
+       VK_DISPLAY_POWER_STATE_OFF_EXT          = 0,
+       VK_DISPLAY_POWER_STATE_SUSPEND_EXT      = 1,
+       VK_DISPLAY_POWER_STATE_ON_EXT           = 2,
+       VK_DISPLAY_POWER_STATE_EXT_LAST,
+       VK_DISPLAY_POWER_STATE_MAX_ENUM_EXT     = 0x7FFFFFFF,
+};
+
+enum VkDeviceEventTypeEXT
+{
+       VK_DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT        = 0,
+       VK_DEVICE_EVENT_TYPE_EXT_LAST,
+       VK_DEVICE_EVENT_TYPE_MAX_ENUM_EXT                       = 0x7FFFFFFF,
+};
+
+enum VkDisplayEventTypeEXT
+{
+       VK_DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT       = 0,
+       VK_DISPLAY_EVENT_TYPE_EXT_LAST,
+       VK_DISPLAY_EVENT_TYPE_MAX_ENUM_EXT                      = 0x7FFFFFFF,
+};
+
+enum VkDiscardRectangleModeEXT
+{
+       VK_DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT = 0,
+       VK_DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT = 1,
+       VK_DISCARD_RECTANGLE_MODE_EXT_LAST,
+       VK_DISCARD_RECTANGLE_MODE_MAX_ENUM_EXT  = 0x7FFFFFFF,
+};
+
+enum VkConservativeRasterizationModeEXT
+{
+       VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT                 = 0,
+       VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT             = 1,
+       VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT    = 2,
+       VK_CONSERVATIVE_RASTERIZATION_MODE_EXT_LAST,
+       VK_CONSERVATIVE_RASTERIZATION_MODE_MAX_ENUM_EXT                 = 0x7FFFFFFF,
+};
+
+enum VkBlendOverlapEXT
+{
+       VK_BLEND_OVERLAP_UNCORRELATED_EXT       = 0,
+       VK_BLEND_OVERLAP_DISJOINT_EXT           = 1,
+       VK_BLEND_OVERLAP_CONJOINT_EXT           = 2,
+       VK_BLEND_OVERLAP_EXT_LAST,
+       VK_BLEND_OVERLAP_MAX_ENUM_EXT           = 0x7FFFFFFF,
+};
+
+enum VkQueueGlobalPriorityEXT
+{
+       VK_QUEUE_GLOBAL_PRIORITY_LOW_EXT                = 128,
+       VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT             = 256,
+       VK_QUEUE_GLOBAL_PRIORITY_HIGH_EXT               = 512,
+       VK_QUEUE_GLOBAL_PRIORITY_REALTIME_EXT   = 1024,
+       VK_QUEUE_GLOBAL_PRIORITY_MAX_ENUM_EXT   = 0x7FFFFFFF,
+};
+
+enum VkTimeDomainEXT
+{
+       VK_TIME_DOMAIN_DEVICE_EXT                                               = 0,
+       VK_TIME_DOMAIN_CLOCK_MONOTONIC_EXT                              = 1,
+       VK_TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT                  = 2,
+       VK_TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT    = 3,
+       VK_TIME_DOMAIN_EXT_LAST,
+       VK_TIME_DOMAIN_MAX_ENUM_EXT                                             = 0x7FFFFFFF,
+};
+
+enum VkLineRasterizationModeEXT
+{
+       VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT                          = 0,
+       VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT                      = 1,
+       VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT                        = 2,
+       VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT       = 3,
+       VK_LINE_RASTERIZATION_MODE_EXT_LAST,
+       VK_LINE_RASTERIZATION_MODE_MAX_ENUM_EXT                         = 0x7FFFFFFF,
+};
+
+typedef VkFaultLevel VkFaultLevelKHR;
+
+typedef VkFaultType VkFaultTypeKHR;
+
+typedef VkFaultQueryBehavior VkFaultQueryBehaviorKHR;
+
+typedef VkPipelineMatchControl VkPipelineMatchControlKHR;
+
+enum VkAccessFlagBits
+{
+       VK_ACCESS_INDIRECT_COMMAND_READ_BIT                                             = 0x00000001,
+       VK_ACCESS_INDEX_READ_BIT                                                                = 0x00000002,
+       VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT                                             = 0x00000004,
+       VK_ACCESS_UNIFORM_READ_BIT                                                              = 0x00000008,
+       VK_ACCESS_INPUT_ATTACHMENT_READ_BIT                                             = 0x00000010,
+       VK_ACCESS_SHADER_READ_BIT                                                               = 0x00000020,
+       VK_ACCESS_SHADER_WRITE_BIT                                                              = 0x00000040,
+       VK_ACCESS_COLOR_ATTACHMENT_READ_BIT                                             = 0x00000080,
+       VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT                                    = 0x00000100,
+       VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT                             = 0x00000200,
+       VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT                    = 0x00000400,
+       VK_ACCESS_TRANSFER_READ_BIT                                                             = 0x00000800,
+       VK_ACCESS_TRANSFER_WRITE_BIT                                                    = 0x00001000,
+       VK_ACCESS_HOST_READ_BIT                                                                 = 0x00002000,
+       VK_ACCESS_HOST_WRITE_BIT                                                                = 0x00004000,
+       VK_ACCESS_MEMORY_READ_BIT                                                               = 0x00008000,
+       VK_ACCESS_MEMORY_WRITE_BIT                                                              = 0x00010000,
+       VK_ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT             = 0x00080000,
+       VK_ACCESS_SHADING_RATE_IMAGE_READ_BIT_NV                                = 0x00800000,
+       VK_ACCESS_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR = VK_ACCESS_SHADING_RATE_IMAGE_READ_BIT_NV,
+       VK_ACCESS_FLAG_BITS_MAX_ENUM                                                    = 0x7FFFFFFF,
+};
+typedef deUint32 VkAccessFlags;
+
+enum VkImageAspectFlagBits
+{
+       VK_IMAGE_ASPECT_COLOR_BIT                               = 0x00000001,
+       VK_IMAGE_ASPECT_DEPTH_BIT                               = 0x00000002,
+       VK_IMAGE_ASPECT_STENCIL_BIT                             = 0x00000004,
+       VK_IMAGE_ASPECT_METADATA_BIT                    = 0x00000008,
+       VK_IMAGE_ASPECT_PLANE_0_BIT                             = 0x00000010,
+       VK_IMAGE_ASPECT_PLANE_1_BIT                             = 0x00000020,
+       VK_IMAGE_ASPECT_PLANE_2_BIT                             = 0x00000040,
+       VK_IMAGE_ASPECT_MEMORY_PLANE_0_BIT_EXT  = 0x00000080,
+       VK_IMAGE_ASPECT_MEMORY_PLANE_1_BIT_EXT  = 0x00000100,
+       VK_IMAGE_ASPECT_MEMORY_PLANE_2_BIT_EXT  = 0x00000200,
+       VK_IMAGE_ASPECT_MEMORY_PLANE_3_BIT_EXT  = 0x00000400,
+       VK_IMAGE_ASPECT_FLAG_BITS_MAX_ENUM              = 0x7FFFFFFF,
+};
+typedef deUint32 VkImageAspectFlags;
+
+enum VkFormatFeatureFlagBits
+{
+       VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT                                                                                                                             = 0x00000001,
+       VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT                                                                                                                             = 0x00000002,
+       VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT                                                                                                              = 0x00000004,
+       VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT                                                                                                              = 0x00000008,
+       VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT                                                                                                              = 0x00000010,
+       VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT                                                                                               = 0x00000020,
+       VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT                                                                                                                             = 0x00000040,
+       VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT                                                                                                                  = 0x00000080,
+       VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT                                                                                                    = 0x00000100,
+       VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT                                                                                                  = 0x00000200,
+       VK_FORMAT_FEATURE_BLIT_SRC_BIT                                                                                                                                  = 0x00000400,
+       VK_FORMAT_FEATURE_BLIT_DST_BIT                                                                                                                                  = 0x00000800,
+       VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT                                                                                               = 0x00001000,
+       VK_FORMAT_FEATURE_TRANSFER_SRC_BIT                                                                                                                              = 0x00004000,
+       VK_FORMAT_FEATURE_TRANSFER_DST_BIT                                                                                                                              = 0x00008000,
+       VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT                                                                                                   = 0x00020000,
+       VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT                                                              = 0x00040000,
+       VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT                             = 0x00080000,
+       VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT                             = 0x00100000,
+       VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT   = 0x00200000,
+       VK_FORMAT_FEATURE_DISJOINT_BIT                                                                                                                                  = 0x00400000,
+       VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT                                                                                                    = 0x00800000,
+       VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT                                                                                               = 0x00010000,
+       VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG                                                                                    = 0x00002000,
+       VK_FORMAT_FEATURE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR                                                                              = 0x40000000,
+       VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT                                                                                    = VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG,
+       VK_FORMAT_FEATURE_FLAG_BITS_MAX_ENUM                                                                                                                    = 0x7FFFFFFF,
+};
+typedef deUint32 VkFormatFeatureFlags;
+
+enum VkImageCreateFlagBits
+{
+       VK_IMAGE_CREATE_SPARSE_BINDING_BIT                                                      = 0x00000001,
+       VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT                                            = 0x00000002,
+       VK_IMAGE_CREATE_SPARSE_ALIASED_BIT                                                      = 0x00000004,
+       VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT                                                      = 0x00000008,
+       VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT                                                     = 0x00000010,
+       VK_IMAGE_CREATE_ALIAS_BIT                                                                       = 0x00000400,
+       VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT                         = 0x00000040,
+       VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT                                         = 0x00000020,
+       VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT                         = 0x00000080,
+       VK_IMAGE_CREATE_EXTENDED_USAGE_BIT                                                      = 0x00000100,
+       VK_IMAGE_CREATE_PROTECTED_BIT                                                           = 0x00000800,
+       VK_IMAGE_CREATE_DISJOINT_BIT                                                            = 0x00000200,
+       VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT       = 0x00001000,
+       VK_IMAGE_CREATE_FLAG_BITS_MAX_ENUM                                                      = 0x7FFFFFFF,
+};
+typedef deUint32 VkImageCreateFlags;
+
+enum VkSampleCountFlagBits
+{
+       VK_SAMPLE_COUNT_1_BIT                           = 0x00000001,
+       VK_SAMPLE_COUNT_2_BIT                           = 0x00000002,
+       VK_SAMPLE_COUNT_4_BIT                           = 0x00000004,
+       VK_SAMPLE_COUNT_8_BIT                           = 0x00000008,
+       VK_SAMPLE_COUNT_16_BIT                          = 0x00000010,
+       VK_SAMPLE_COUNT_32_BIT                          = 0x00000020,
+       VK_SAMPLE_COUNT_64_BIT                          = 0x00000040,
+       VK_SAMPLE_COUNT_FLAG_BITS_MAX_ENUM      = 0x7FFFFFFF,
+};
+typedef deUint32 VkSampleCountFlags;
+
+enum VkImageUsageFlagBits
+{
+       VK_IMAGE_USAGE_TRANSFER_SRC_BIT                                                 = 0x00000001,
+       VK_IMAGE_USAGE_TRANSFER_DST_BIT                                                 = 0x00000002,
+       VK_IMAGE_USAGE_SAMPLED_BIT                                                              = 0x00000004,
+       VK_IMAGE_USAGE_STORAGE_BIT                                                              = 0x00000008,
+       VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT                                             = 0x00000010,
+       VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT                             = 0x00000020,
+       VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT                                 = 0x00000040,
+       VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT                                             = 0x00000080,
+       VK_IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV                                = 0x00000100,
+       VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = VK_IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV,
+       VK_IMAGE_USAGE_FLAG_BITS_MAX_ENUM                                               = 0x7FFFFFFF,
+};
+typedef deUint32 VkImageUsageFlags;
+
+enum VkMemoryHeapFlagBits
+{
+       VK_MEMORY_HEAP_DEVICE_LOCAL_BIT         = 0x00000001,
+       VK_MEMORY_HEAP_MULTI_INSTANCE_BIT       = 0x00000002,
+       VK_MEMORY_HEAP_SEU_SAFE_BIT_KHR         = 0x00000004,
+       VK_MEMORY_HEAP_FLAG_BITS_MAX_ENUM       = 0x7FFFFFFF,
+};
+typedef deUint32 VkMemoryHeapFlags;
+
+enum VkMemoryPropertyFlagBits
+{
+       VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT             = 0x00000001,
+       VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT             = 0x00000002,
+       VK_MEMORY_PROPERTY_HOST_COHERENT_BIT    = 0x00000004,
+       VK_MEMORY_PROPERTY_HOST_CACHED_BIT              = 0x00000008,
+       VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT = 0x00000010,
+       VK_MEMORY_PROPERTY_PROTECTED_BIT                = 0x00000020,
+       VK_MEMORY_PROPERTY_FLAG_BITS_MAX_ENUM   = 0x7FFFFFFF,
+};
+typedef deUint32 VkMemoryPropertyFlags;
+
+enum VkQueueFlagBits
+{
+       VK_QUEUE_GRAPHICS_BIT           = 0x00000001,
+       VK_QUEUE_COMPUTE_BIT            = 0x00000002,
+       VK_QUEUE_TRANSFER_BIT           = 0x00000004,
+       VK_QUEUE_SPARSE_BINDING_BIT     = 0x00000008,
+       VK_QUEUE_PROTECTED_BIT          = 0x00000010,
+       VK_QUEUE_FLAG_BITS_MAX_ENUM     = 0x7FFFFFFF,
+};
+typedef deUint32 VkQueueFlags;
+
+enum VkDeviceQueueCreateFlagBits
+{
+       VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT            = 0x00000001,
+       VK_DEVICE_QUEUE_CREATE_FLAG_BITS_MAX_ENUM       = 0x7FFFFFFF,
+};
+typedef deUint32 VkDeviceQueueCreateFlags;
+
+enum VkPipelineStageFlagBits
+{
+       VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT                                                       = 0x00000001,
+       VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT                                                     = 0x00000002,
+       VK_PIPELINE_STAGE_VERTEX_INPUT_BIT                                                      = 0x00000004,
+       VK_PIPELINE_STAGE_VERTEX_SHADER_BIT                                                     = 0x00000008,
+       VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT                       = 0x00000010,
+       VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT            = 0x00000020,
+       VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT                                           = 0x00000040,
+       VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT                                           = 0x00000080,
+       VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT                                      = 0x00000100,
+       VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT                                       = 0x00000200,
+       VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT                           = 0x00000400,
+       VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT                                            = 0x00000800,
+       VK_PIPELINE_STAGE_TRANSFER_BIT                                                          = 0x00001000,
+       VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT                                            = 0x00002000,
+       VK_PIPELINE_STAGE_HOST_BIT                                                                      = 0x00004000,
+       VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT                                                      = 0x00008000,
+       VK_PIPELINE_STAGE_ALL_COMMANDS_BIT                                                      = 0x00010000,
+       VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV                                     = 0x00400000,
+       VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR      = VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV,
+       VK_PIPELINE_STAGE_FLAG_BITS_MAX_ENUM                                            = 0x7FFFFFFF,
+};
+typedef deUint32 VkPipelineStageFlags;
+
+enum VkSparseMemoryBindFlagBits
+{
+       VK_SPARSE_MEMORY_BIND_METADATA_BIT                      = 0x00000001,
+       VK_SPARSE_MEMORY_BIND_FLAG_BITS_MAX_ENUM        = 0x7FFFFFFF,
+};
+typedef deUint32 VkSparseMemoryBindFlags;
+
+enum VkSparseImageFormatFlagBits
+{
+       VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT                       = 0x00000001,
+       VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT                     = 0x00000002,
+       VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT       = 0x00000004,
+       VK_SPARSE_IMAGE_FORMAT_FLAG_BITS_MAX_ENUM                       = 0x7FFFFFFF,
+};
+typedef deUint32 VkSparseImageFormatFlags;
+
+enum VkFenceCreateFlagBits
+{
+       VK_FENCE_CREATE_SIGNALED_BIT            = 0x00000001,
+       VK_FENCE_CREATE_FLAG_BITS_MAX_ENUM      = 0x7FFFFFFF,
+};
+typedef deUint32 VkFenceCreateFlags;
+
+enum VkQueryPipelineStatisticFlagBits
+{
+       VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT                                         = 0x00000001,
+       VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT                                       = 0x00000002,
+       VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT                                       = 0x00000004,
+       VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT                                     = 0x00000008,
+       VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT                                      = 0x00000010,
+       VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT                                            = 0x00000020,
+       VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT                                                     = 0x00000040,
+       VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT                                     = 0x00000080,
+       VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT                     = 0x00000100,
+       VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT      = 0x00000200,
+       VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT                                      = 0x00000400,
+       VK_QUERY_PIPELINE_STATISTIC_FLAG_BITS_MAX_ENUM                                                          = 0x7FFFFFFF,
+};
+typedef deUint32 VkQueryPipelineStatisticFlags;
+
+enum VkQueryResultFlagBits
+{
+       VK_QUERY_RESULT_64_BIT                                  = 0x00000001,
+       VK_QUERY_RESULT_WAIT_BIT                                = 0x00000002,
+       VK_QUERY_RESULT_WITH_AVAILABILITY_BIT   = 0x00000004,
+       VK_QUERY_RESULT_PARTIAL_BIT                             = 0x00000008,
+       VK_QUERY_RESULT_FLAG_BITS_MAX_ENUM              = 0x7FFFFFFF,
+};
+typedef deUint32 VkQueryResultFlags;
+
+enum VkBufferCreateFlagBits
+{
+       VK_BUFFER_CREATE_SPARSE_BINDING_BIT                                     = 0x00000001,
+       VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT                           = 0x00000002,
+       VK_BUFFER_CREATE_SPARSE_ALIASED_BIT                                     = 0x00000004,
+       VK_BUFFER_CREATE_PROTECTED_BIT                                          = 0x00000008,
+       VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT      = 0x00000010,
+       VK_BUFFER_CREATE_FLAG_BITS_MAX_ENUM                                     = 0x7FFFFFFF,
+};
+typedef deUint32 VkBufferCreateFlags;
+
+enum VkBufferUsageFlagBits
+{
+       VK_BUFFER_USAGE_TRANSFER_SRC_BIT                        = 0x00000001,
+       VK_BUFFER_USAGE_TRANSFER_DST_BIT                        = 0x00000002,
+       VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT        = 0x00000004,
+       VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT        = 0x00000008,
+       VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT                      = 0x00000010,
+       VK_BUFFER_USAGE_STORAGE_BUFFER_BIT                      = 0x00000020,
+       VK_BUFFER_USAGE_INDEX_BUFFER_BIT                        = 0x00000040,
+       VK_BUFFER_USAGE_VERTEX_BUFFER_BIT                       = 0x00000080,
+       VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT                     = 0x00000100,
+       VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT       = 0x00020000,
+       VK_BUFFER_USAGE_FLAG_BITS_MAX_ENUM                      = 0x7FFFFFFF,
+};
+typedef deUint32 VkBufferUsageFlags;
+
+enum VkImageViewCreateFlagBits
+{
+       VK_IMAGE_VIEW_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF,
+};
+typedef deUint32 VkImageViewCreateFlags;
+
+enum VkPipelineCacheCreateFlagBits
+{
+       VK_PIPELINE_CACHE_CREATE_USE_APPLICATION_STORAGE_BIT            = 0x00000004,
+       VK_PIPELINE_CACHE_CREATE_RESERVED_1_BIT_EXT                                     = 0x00000002,
+       VK_PIPELINE_CACHE_CREATE_READ_ONLY_BIT                                          = VK_PIPELINE_CACHE_CREATE_RESERVED_1_BIT_EXT,
+       VK_PIPELINE_CACHE_CREATE_READ_ONLY_BIT_KHR                                      = VK_PIPELINE_CACHE_CREATE_READ_ONLY_BIT,
+       VK_PIPELINE_CACHE_CREATE_USE_APPLICATION_STORAGE_BIT_KHR        = VK_PIPELINE_CACHE_CREATE_USE_APPLICATION_STORAGE_BIT,
+       VK_PIPELINE_CACHE_CREATE_FLAG_BITS_MAX_ENUM                                     = 0x7FFFFFFF,
+};
+typedef deUint32 VkPipelineCacheCreateFlags;
+
+enum VkColorComponentFlagBits
+{
+       VK_COLOR_COMPONENT_R_BIT                                = 0x00000001,
+       VK_COLOR_COMPONENT_G_BIT                                = 0x00000002,
+       VK_COLOR_COMPONENT_B_BIT                                = 0x00000004,
+       VK_COLOR_COMPONENT_A_BIT                                = 0x00000008,
+       VK_COLOR_COMPONENT_FLAG_BITS_MAX_ENUM   = 0x7FFFFFFF,
+};
+typedef deUint32 VkColorComponentFlags;
+
+enum VkPipelineCreateFlagBits
+{
+       VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT                     = 0x00000001,
+       VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT                        = 0x00000002,
+       VK_PIPELINE_CREATE_DERIVATIVE_BIT                                       = 0x00000004,
+       VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT     = 0x00000008,
+       VK_PIPELINE_CREATE_DISPATCH_BASE_BIT                            = 0x00000010,
+       VK_PIPELINE_CREATE_DISPATCH_BASE                                        = VK_PIPELINE_CREATE_DISPATCH_BASE_BIT,
+       VK_PIPELINE_CREATE_FLAG_BITS_MAX_ENUM                           = 0x7FFFFFFF,
+};
+typedef deUint32 VkPipelineCreateFlags;
+
+enum VkPipelineShaderStageCreateFlagBits
+{
+       VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT     = 0x00000001,
+       VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT          = 0x00000002,
+       VK_PIPELINE_SHADER_STAGE_CREATE_FLAG_BITS_MAX_ENUM                                      = 0x7FFFFFFF,
+};
+typedef deUint32 VkPipelineShaderStageCreateFlags;
+
+enum VkShaderStageFlagBits
+{
+       VK_SHADER_STAGE_VERTEX_BIT                                      = 0x00000001,
+       VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT        = 0x00000002,
+       VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT     = 0x00000004,
+       VK_SHADER_STAGE_GEOMETRY_BIT                            = 0x00000008,
+       VK_SHADER_STAGE_FRAGMENT_BIT                            = 0x00000010,
+       VK_SHADER_STAGE_COMPUTE_BIT                                     = 0x00000020,
+       VK_SHADER_STAGE_ALL_GRAPHICS                            = 0x0000001F,
+       VK_SHADER_STAGE_ALL                                                     = 0x7FFFFFFF,
+       VK_SHADER_STAGE_FLAG_BITS_MAX_ENUM                      = 0x7FFFFFFF,
+};
+typedef deUint32 VkShaderStageFlags;
+
+enum VkCullModeFlagBits
+{
+       VK_CULL_MODE_NONE                               = 0,
+       VK_CULL_MODE_FRONT_BIT                  = 0x00000001,
+       VK_CULL_MODE_BACK_BIT                   = 0x00000002,
+       VK_CULL_MODE_FRONT_AND_BACK             = 0x00000003,
+       VK_CULL_MODE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF,
+};
+typedef deUint32 VkCullModeFlags;
+
+enum VkSamplerCreateFlagBits
+{
+       VK_SAMPLER_CREATE_FLAG_BITS_MAX_ENUM    = 0x7FFFFFFF,
+};
+typedef deUint32 VkSamplerCreateFlags;
+
+enum VkDescriptorPoolCreateFlagBits
+{
+       VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT       = 0x00000001,
+       VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT         = 0x00000002,
+       VK_DESCRIPTOR_POOL_CREATE_FLAG_BITS_MAX_ENUM            = 0x7FFFFFFF,
+};
+typedef deUint32 VkDescriptorPoolCreateFlags;
+
+enum VkDescriptorSetLayoutCreateFlagBits
+{
+       VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT      = 0x00000002,
+       VK_DESCRIPTOR_SET_LAYOUT_CREATE_FLAG_BITS_MAX_ENUM                      = 0x7FFFFFFF,
+};
+typedef deUint32 VkDescriptorSetLayoutCreateFlags;
+
+enum VkAttachmentDescriptionFlagBits
+{
+       VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT                 = 0x00000001,
+       VK_ATTACHMENT_DESCRIPTION_FLAG_BITS_MAX_ENUM    = 0x7FFFFFFF,
+};
+typedef deUint32 VkAttachmentDescriptionFlags;
+
+enum VkDependencyFlagBits
+{
+       VK_DEPENDENCY_BY_REGION_BIT                     = 0x00000001,
+       VK_DEPENDENCY_DEVICE_GROUP_BIT          = 0x00000004,
+       VK_DEPENDENCY_VIEW_LOCAL_BIT            = 0x00000002,
+       VK_DEPENDENCY_FLAG_BITS_MAX_ENUM        = 0x7FFFFFFF,
+};
+typedef deUint32 VkDependencyFlags;
+
+enum VkFramebufferCreateFlagBits
+{
+       VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT                     = 0x00000001,
+       VK_FRAMEBUFFER_CREATE_FLAG_BITS_MAX_ENUM        = 0x7FFFFFFF,
+};
+typedef deUint32 VkFramebufferCreateFlags;
+
+enum VkRenderPassCreateFlagBits
+{
+       VK_RENDER_PASS_CREATE_FLAG_BITS_MAX_ENUM        = 0x7FFFFFFF,
+};
+typedef deUint32 VkRenderPassCreateFlags;
+
+enum VkSubpassDescriptionFlagBits
+{
+       VK_SUBPASS_DESCRIPTION_FLAG_BITS_MAX_ENUM       = 0x7FFFFFFF,
+};
+typedef deUint32 VkSubpassDescriptionFlags;
+
+enum VkCommandPoolCreateFlagBits
+{
+       VK_COMMAND_POOL_CREATE_TRANSIENT_BIT                    = 0x00000001,
+       VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT = 0x00000002,
+       VK_COMMAND_POOL_CREATE_PROTECTED_BIT                    = 0x00000004,
+       VK_COMMAND_POOL_CREATE_FLAG_BITS_MAX_ENUM               = 0x7FFFFFFF,
+};
+typedef deUint32 VkCommandPoolCreateFlags;
+
+enum VkCommandPoolResetFlagBits
+{
+       VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT     = 0x00000001,
+       VK_COMMAND_POOL_RESET_FLAG_BITS_MAX_ENUM        = 0x7FFFFFFF,
+};
+typedef deUint32 VkCommandPoolResetFlags;
+
+enum VkCommandBufferUsageFlagBits
+{
+       VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT                     = 0x00000001,
+       VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT        = 0x00000002,
+       VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT            = 0x00000004,
+       VK_COMMAND_BUFFER_USAGE_FLAG_BITS_MAX_ENUM                      = 0x7FFFFFFF,
+};
+typedef deUint32 VkCommandBufferUsageFlags;
+
+enum VkQueryControlFlagBits
+{
+       VK_QUERY_CONTROL_PRECISE_BIT            = 0x00000001,
+       VK_QUERY_CONTROL_FLAG_BITS_MAX_ENUM     = 0x7FFFFFFF,
+};
+typedef deUint32 VkQueryControlFlags;
+
+enum VkCommandBufferResetFlagBits
+{
+       VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT   = 0x00000001,
+       VK_COMMAND_BUFFER_RESET_FLAG_BITS_MAX_ENUM              = 0x7FFFFFFF,
+};
+typedef deUint32 VkCommandBufferResetFlags;
+
+enum VkStencilFaceFlagBits
+{
+       VK_STENCIL_FACE_FRONT_BIT                       = 0x00000001,
+       VK_STENCIL_FACE_BACK_BIT                        = 0x00000002,
+       VK_STENCIL_FACE_FRONT_AND_BACK          = 0x00000003,
+       VK_STENCIL_FRONT_AND_BACK                       = VK_STENCIL_FACE_FRONT_AND_BACK,
+       VK_STENCIL_FACE_FLAG_BITS_MAX_ENUM      = 0x7FFFFFFF,
+};
+typedef deUint32 VkStencilFaceFlags;
+
+enum VkSubgroupFeatureFlagBits
+{
+       VK_SUBGROUP_FEATURE_BASIC_BIT                           = 0x00000001,
+       VK_SUBGROUP_FEATURE_VOTE_BIT                            = 0x00000002,
+       VK_SUBGROUP_FEATURE_ARITHMETIC_BIT                      = 0x00000004,
+       VK_SUBGROUP_FEATURE_BALLOT_BIT                          = 0x00000008,
+       VK_SUBGROUP_FEATURE_SHUFFLE_BIT                         = 0x00000010,
+       VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT        = 0x00000020,
+       VK_SUBGROUP_FEATURE_CLUSTERED_BIT                       = 0x00000040,
+       VK_SUBGROUP_FEATURE_QUAD_BIT                            = 0x00000080,
+       VK_SUBGROUP_FEATURE_FLAG_BITS_MAX_ENUM          = 0x7FFFFFFF,
+};
+typedef deUint32 VkSubgroupFeatureFlags;
+
+enum VkPeerMemoryFeatureFlagBits
+{
+       VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT                     = 0x00000001,
+       VK_PEER_MEMORY_FEATURE_COPY_DST_BIT                     = 0x00000002,
+       VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT          = 0x00000004,
+       VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT          = 0x00000008,
+       VK_PEER_MEMORY_FEATURE_FLAG_BITS_MAX_ENUM       = 0x7FFFFFFF,
+};
+typedef deUint32 VkPeerMemoryFeatureFlags;
+
+enum VkMemoryAllocateFlagBits
+{
+       VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT                                              = 0x00000001,
+       VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT                                   = 0x00000002,
+       VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT    = 0x00000004,
+       VK_MEMORY_ALLOCATE_FLAG_BITS_MAX_ENUM                                   = 0x7FFFFFFF,
+};
+typedef deUint32 VkMemoryAllocateFlags;
+
+enum VkExternalMemoryHandleTypeFlagBits
+{
+       VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT                                            = 0x00000001,
+       VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT                                         = 0x00000002,
+       VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT                                     = 0x00000004,
+       VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT                                        = 0x00000008,
+       VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT                            = 0x00000010,
+       VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT                                           = 0x00000020,
+       VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT                                       = 0x00000040,
+       VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT                                          = 0x00000200,
+       VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT                          = 0x00000080,
+       VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT       = 0x00000100,
+       VK_EXTERNAL_MEMORY_HANDLE_TYPE_FLAG_BITS_MAX_ENUM                                       = 0x7FFFFFFF,
+};
+typedef deUint32 VkExternalMemoryHandleTypeFlags;
+
+enum VkExternalMemoryFeatureFlagBits
+{
+       VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT   = 0x00000001,
+       VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT               = 0x00000002,
+       VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT               = 0x00000004,
+       VK_EXTERNAL_MEMORY_FEATURE_FLAG_BITS_MAX_ENUM   = 0x7FFFFFFF,
+};
+typedef deUint32 VkExternalMemoryFeatureFlags;
+
+enum VkExternalFenceHandleTypeFlagBits
+{
+       VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT                     = 0x00000001,
+       VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT          = 0x00000002,
+       VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT      = 0x00000004,
+       VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT                       = 0x00000008,
+       VK_EXTERNAL_FENCE_HANDLE_TYPE_FLAG_BITS_MAX_ENUM        = 0x7FFFFFFF,
+};
+typedef deUint32 VkExternalFenceHandleTypeFlags;
+
+enum VkExternalFenceFeatureFlagBits
+{
+       VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT                = 0x00000001,
+       VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT                = 0x00000002,
+       VK_EXTERNAL_FENCE_FEATURE_FLAG_BITS_MAX_ENUM    = 0x7FFFFFFF,
+};
+typedef deUint32 VkExternalFenceFeatureFlags;
+
+enum VkFenceImportFlagBits
+{
+       VK_FENCE_IMPORT_TEMPORARY_BIT           = 0x00000001,
+       VK_FENCE_IMPORT_FLAG_BITS_MAX_ENUM      = 0x7FFFFFFF,
+};
+typedef deUint32 VkFenceImportFlags;
+
+enum VkSemaphoreImportFlagBits
+{
+       VK_SEMAPHORE_IMPORT_TEMPORARY_BIT               = 0x00000001,
+       VK_SEMAPHORE_IMPORT_FLAG_BITS_MAX_ENUM  = 0x7FFFFFFF,
+};
+typedef deUint32 VkSemaphoreImportFlags;
+
+enum VkExternalSemaphoreHandleTypeFlagBits
+{
+       VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT                 = 0x00000001,
+       VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT              = 0x00000002,
+       VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT  = 0x00000004,
+       VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT               = 0x00000008,
+       VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT                   = 0x00000010,
+       VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_FENCE_BIT               = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT,
+       VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_FLAG_BITS_MAX_ENUM    = 0x7FFFFFFF,
+};
+typedef deUint32 VkExternalSemaphoreHandleTypeFlags;
+
+enum VkExternalSemaphoreFeatureFlagBits
+{
+       VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT            = 0x00000001,
+       VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT            = 0x00000002,
+       VK_EXTERNAL_SEMAPHORE_FEATURE_FLAG_BITS_MAX_ENUM        = 0x7FFFFFFF,
+};
+typedef deUint32 VkExternalSemaphoreFeatureFlags;
+
+enum VkResolveModeFlagBits
+{
+       VK_RESOLVE_MODE_NONE                            = 0,
+       VK_RESOLVE_MODE_SAMPLE_ZERO_BIT         = 0x00000001,
+       VK_RESOLVE_MODE_AVERAGE_BIT                     = 0x00000002,
+       VK_RESOLVE_MODE_MIN_BIT                         = 0x00000004,
+       VK_RESOLVE_MODE_MAX_BIT                         = 0x00000008,
+       VK_RESOLVE_MODE_FLAG_BITS_MAX_ENUM      = 0x7FFFFFFF,
+};
+typedef deUint32 VkResolveModeFlags;
+
+enum VkDescriptorBindingFlagBits
+{
+       VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT                             = 0x00000001,
+       VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT   = 0x00000002,
+       VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT                               = 0x00000004,
+       VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT             = 0x00000008,
+       VK_DESCRIPTOR_BINDING_FLAG_BITS_MAX_ENUM                                = 0x7FFFFFFF,
+};
+typedef deUint32 VkDescriptorBindingFlags;
+
+enum VkSemaphoreWaitFlagBits
+{
+       VK_SEMAPHORE_WAIT_ANY_BIT                               = 0x00000001,
+       VK_SEMAPHORE_WAIT_FLAG_BITS_MAX_ENUM    = 0x7FFFFFFF,
+};
+typedef deUint32 VkSemaphoreWaitFlags;
+
+enum VkSurfaceTransformFlagBitsKHR
+{
+       VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR                                           = 0x00000001,
+       VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR                                          = 0x00000002,
+       VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR                                         = 0x00000004,
+       VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR                                         = 0x00000008,
+       VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR                          = 0x00000010,
+       VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR        = 0x00000020,
+       VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR       = 0x00000040,
+       VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR       = 0x00000080,
+       VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR                                            = 0x00000100,
+       VK_SURFACE_TRANSFORM_FLAG_BITS_MAX_ENUM_KHR                                     = 0x7FFFFFFF,
+};
+typedef deUint32 VkSurfaceTransformFlagsKHR;
+
+enum VkCompositeAlphaFlagBitsKHR
+{
+       VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR                       = 0x00000001,
+       VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR       = 0x00000002,
+       VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR      = 0x00000004,
+       VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR                      = 0x00000008,
+       VK_COMPOSITE_ALPHA_FLAG_BITS_MAX_ENUM_KHR       = 0x7FFFFFFF,
+};
+typedef deUint32 VkCompositeAlphaFlagsKHR;
+
+enum VkSwapchainCreateFlagBitsKHR
+{
+       VK_SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR = 0x00000001,
+       VK_SWAPCHAIN_CREATE_PROTECTED_BIT_KHR                                   = 0x00000002,
+       VK_SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR                              = 0x00000004,
+       VK_SWAPCHAIN_CREATE_FLAG_BITS_MAX_ENUM_KHR                              = 0x7FFFFFFF,
+};
+typedef deUint32 VkSwapchainCreateFlagsKHR;
+
+enum VkDeviceGroupPresentModeFlagBitsKHR
+{
+       VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR                              = 0x00000001,
+       VK_DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHR                             = 0x00000002,
+       VK_DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR                                = 0x00000004,
+       VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR = 0x00000008,
+       VK_DEVICE_GROUP_PRESENT_MODE_FLAG_BITS_MAX_ENUM_KHR             = 0x7FFFFFFF,
+};
+typedef deUint32 VkDeviceGroupPresentModeFlagsKHR;
+
+enum VkDisplayPlaneAlphaFlagBitsKHR
+{
+       VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR                                   = 0x00000001,
+       VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR                                   = 0x00000002,
+       VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR                                = 0x00000004,
+       VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR  = 0x00000008,
+       VK_DISPLAY_PLANE_ALPHA_FLAG_BITS_MAX_ENUM_KHR                   = 0x7FFFFFFF,
+};
+typedef deUint32 VkDisplayPlaneAlphaFlagsKHR;
+
+enum VkRefreshObjectFlagBitsKHR
+{
+       VK_REFRESH_OBJECT_FLAG_BITS_MAX_ENUM_KHR        = 0x7FFFFFFF,
+};
+typedef deUint32 VkRefreshObjectFlagsKHR;
+
+enum VkSurfaceCounterFlagBitsEXT
+{
+       VK_SURFACE_COUNTER_VBLANK_BIT_EXT                       = 0x00000001,
+       VK_SURFACE_COUNTER_VBLANK_EXT                           = VK_SURFACE_COUNTER_VBLANK_BIT_EXT,
+       VK_SURFACE_COUNTER_FLAG_BITS_MAX_ENUM_EXT       = 0x7FFFFFFF,
+};
+typedef deUint32 VkSurfaceCounterFlagsEXT;
+
+typedef deUint32 VkInstanceCreateFlags;
+
+typedef deUint32 VkDeviceCreateFlags;
+
+typedef deUint32 VkMemoryMapFlags;
+
+typedef deUint32 VkSemaphoreCreateFlags;
+
+typedef deUint32 VkEventCreateFlags;
+
+typedef deUint32 VkQueryPoolCreateFlags;
+
+typedef deUint32 VkBufferViewCreateFlags;
+
+typedef deUint32 VkPipelineVertexInputStateCreateFlags;
+
+typedef deUint32 VkPipelineInputAssemblyStateCreateFlags;
+
+typedef deUint32 VkPipelineTessellationStateCreateFlags;
+
+typedef deUint32 VkPipelineViewportStateCreateFlags;
+
+typedef deUint32 VkPipelineRasterizationStateCreateFlags;
+
+typedef deUint32 VkPipelineMultisampleStateCreateFlags;
+
+typedef deUint32 VkPipelineDepthStencilStateCreateFlags;
+
+typedef deUint32 VkPipelineColorBlendStateCreateFlags;
+
+typedef deUint32 VkPipelineDynamicStateCreateFlags;
+
+typedef deUint32 VkPipelineLayoutCreateFlags;
+
+typedef deUint32 VkDescriptorPoolResetFlags;
+
+typedef deUint32 VkDisplayModeCreateFlagsKHR;
+
+typedef deUint32 VkDisplaySurfaceCreateFlagsKHR;
+
+typedef deUint32 VkPipelineDiscardRectangleStateCreateFlagsEXT;
+
+typedef deUint32 VkPipelineRasterizationConservativeStateCreateFlagsEXT;
+
+typedef deUint32 VkPipelineRasterizationDepthClipStateCreateFlagsEXT;
+
+typedef deUint32 VkHeadlessSurfaceCreateFlagsEXT;
+
+VK_DEFINE_PLATFORM_TYPE(XlibDisplayPtr,                                void*);
+VK_DEFINE_PLATFORM_TYPE(XlibWindow,                                    deUintptr);
+VK_DEFINE_PLATFORM_TYPE(XlibVisualID,                          deUint32);
+VK_DEFINE_PLATFORM_TYPE(XcbConnectionPtr,                      void*);
+VK_DEFINE_PLATFORM_TYPE(XcbWindow,                                     deUintptr);
+VK_DEFINE_PLATFORM_TYPE(XcbVisualid,                           deUint32);
+VK_DEFINE_PLATFORM_TYPE(WaylandDisplayPtr,                     void*);
+VK_DEFINE_PLATFORM_TYPE(WaylandSurfacePtr,                     void*);
+VK_DEFINE_PLATFORM_TYPE(MirConnectionPtr,                      void*);
+VK_DEFINE_PLATFORM_TYPE(MirSurfacePtr,                         void*);
+VK_DEFINE_PLATFORM_TYPE(AndroidNativeWindowPtr,                void*);
+VK_DEFINE_PLATFORM_TYPE(Win32InstanceHandle,           void*);
+VK_DEFINE_PLATFORM_TYPE(Win32WindowHandle,                     void*);
+VK_DEFINE_PLATFORM_TYPE(Win32Handle,                           void*);
+VK_DEFINE_PLATFORM_TYPE(Win32SecurityAttributesPtr,    const void*);
+VK_DEFINE_PLATFORM_TYPE(AndroidHardwareBufferPtr,      void*);
+VK_DEFINE_PLATFORM_TYPE(Win32MonitorHandle,                    void*);
+VK_DEFINE_PLATFORM_TYPE(Win32LPCWSTR,                          const void*);
+VK_DEFINE_PLATFORM_TYPE(RROutput,                                      void*);
+VK_DEFINE_PLATFORM_TYPE(zx_handle_t,                           deInt32);
+VK_DEFINE_PLATFORM_TYPE(GgpFrameToken,                         deInt32);
+VK_DEFINE_PLATFORM_TYPE(GgpStreamDescriptor,           deInt32);
+VK_DEFINE_PLATFORM_TYPE(CAMetalLayer,                          void*);
+#define VK_KHR_SURFACE_SPEC_VERSION 25
+#define VK_KHR_SWAPCHAIN_SPEC_VERSION 70
+#define VK_KHR_DISPLAY_SPEC_VERSION 23
+#define VK_KHR_DISPLAY_SWAPCHAIN_SPEC_VERSION 10
+#define VK_KHR_EXTERNAL_MEMORY_FD_SPEC_VERSION 1
+#define VK_KHR_EXTERNAL_SEMAPHORE_FD_SPEC_VERSION 1
+#define VK_KHR_INCREMENTAL_PRESENT_SPEC_VERSION 1
+#define VK_KHR_SHARED_PRESENTABLE_IMAGE_SPEC_VERSION 1
+#define VK_KHR_EXTERNAL_FENCE_FD_SPEC_VERSION 1
+#define VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME "VK_KHR_get_surface_capabilities2"
+#define VK_KHR_GET_DISPLAY_PROPERTIES_2_EXTENSION_NAME "VK_KHR_get_display_properties2"
+#define VK_KHR_SHADER_CLOCK_SPEC_VERSION 1
+#define VK_KHR_SWAPCHAIN_MUTABLE_FORMAT_SPEC_VERSION 1
+#define VK_KHR_SHADER_TERMINATE_INVOCATION_SPEC_VERSION 1
+#define VK_KHR_FRAGMENT_SHADING_RATE_SPEC_VERSION 1
+#define VK_KHR_FAULT_HANDLING_SPEC_VERSION 1
+#define VK_KHR_OBJECT_REFRESH_SPEC_VERSION 1
+#define VK_KHR_SEU_SAFE_MEMORY_SPEC_VERSION 1
+#define VK_KHR_PIPELINE_IDENTIFIER_SPEC_VERSION 1
+#define VK_KHR_COPY_COMMANDS_2_EXTENSION_NAME "VK_KHR_copy_commands2"
+#define VK_KHR_SC_PIPELINE_CACHE_FUNCTIONALITY_SPEC_VERSION 1
+#define VK_EXT_DEPTH_RANGE_UNRESTRICTED_SPEC_VERSION 1
+#define VK_EXT_TEXTURE_COMPRESSION_ASTC_HDR_SPEC_VERSION 1
+#define VK_EXT_ASTC_DECODE_MODE_SPEC_VERSION 1
+#define VK_EXT_DIRECT_MODE_DISPLAY_SPEC_VERSION 1
+#define VK_EXT_DISPLAY_SURFACE_COUNTER_SPEC_VERSION 1
+#define VK_EXT_DISPLAY_CONTROL_SPEC_VERSION 1
+#define VK_EXT_DISCARD_RECTANGLES_SPEC_VERSION 1
+#define VK_EXT_CONSERVATIVE_RASTERIZATION_SPEC_VERSION 1
+#define VK_EXT_DEPTH_CLIP_ENABLE_SPEC_VERSION 1
+#define VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME "VK_EXT_swapchain_colorspace"
+#define VK_EXT_HDR_METADATA_SPEC_VERSION 2
+#define VK_EXT_EXTERNAL_MEMORY_DMA_BUF_SPEC_VERSION 1
+#define VK_EXT_QUEUE_FAMILY_FOREIGN_SPEC_VERSION 1
+#define VK_QUEUE_FAMILY_FOREIGN_EXT (~0U-2)
+#define VK_EXT_SHADER_STENCIL_EXPORT_SPEC_VERSION 1
+#define VK_EXT_SAMPLE_LOCATIONS_SPEC_VERSION 1
+#define VK_EXT_BLEND_OPERATION_ADVANCED_SPEC_VERSION 2
+#define VK_EXT_POST_DEPTH_COVERAGE_SPEC_VERSION 1
+#define VK_EXT_IMAGE_DRM_FORMAT_MODIFIER_SPEC_VERSION 1
+#define VK_EXT_FILTER_CUBIC_SPEC_VERSION 3
+#define VK_EXT_GLOBAL_PRIORITY_SPEC_VERSION 2
+#define VK_EXT_EXTERNAL_MEMORY_HOST_SPEC_VERSION 1
+#define VK_EXT_CALIBRATED_TIMESTAMPS_SPEC_VERSION 1
+#define VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_SPEC_VERSION 3
+#define VK_EXT_PCI_BUS_INFO_SPEC_VERSION 2
+#define VK_EXT_SUBGROUP_SIZE_CONTROL_SPEC_VERSION 2
+#define VK_EXT_SHADER_IMAGE_ATOMIC_INT64_SPEC_VERSION 1
+#define VK_EXT_MEMORY_BUDGET_SPEC_VERSION 1
+#define VK_EXT_FRAGMENT_SHADER_INTERLOCK_SPEC_VERSION 1
+#define VK_EXT_YCBCR_IMAGE_ARRAYS_SPEC_VERSION 1
+#define VK_EXT_HEADLESS_SURFACE_SPEC_VERSION 1
+#define VK_EXT_LINE_RASTERIZATION_SPEC_VERSION 1
+#define VK_EXT_SHADER_ATOMIC_FLOAT_SPEC_VERSION 1
+#define VK_EXT_INDEX_TYPE_UINT8_SPEC_VERSION 1
+#define VK_EXT_EXTENDED_DYNAMIC_STATE_SPEC_VERSION 1
+#define VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_SPEC_VERSION 1
+#define VK_EXT_TEXEL_BUFFER_ALIGNMENT_SPEC_VERSION 1
+#define VK_EXT_ROBUSTNESS_2_SPEC_VERSION 1
+#define VK_EXT_CUSTOM_BORDER_COLOR_SPEC_VERSION 12
+#define VK_EXT_IMAGE_ROBUSTNESS_SPEC_VERSION 1
+#define VK_EXT_4444_FORMATS_SPEC_VERSION 1
diff --git a/external/vulkancts/framework/vulkan/generated/vulkansc/vkConcreteDeviceInterface.inl b/external/vulkancts/framework/vulkan/generated/vulkansc/vkConcreteDeviceInterface.inl
new file mode 100644 (file)
index 0000000..52a17cf
--- /dev/null
@@ -0,0 +1,190 @@
+/* WARNING: This is auto-generated file. Do not modify, since changes will
+ * be lost! Modify the generating script instead.
+ */
+virtual PFN_vkVoidFunction     getDeviceProcAddr                                               (VkDevice device, const char* pName) const;
+virtual void                           destroyDevice                                                   (VkDevice device, const VkAllocationCallbacks* pAllocator) const;
+virtual void                           getDeviceQueue                                                  (VkDevice device, deUint32 queueFamilyIndex, deUint32 queueIndex, VkQueue* pQueue) const;
+virtual VkResult                       queueSubmit                                                             (VkQueue queue, deUint32 submitCount, const VkSubmitInfo* pSubmits, VkFence fence) const;
+virtual VkResult                       queueWaitIdle                                                   (VkQueue queue) const;
+virtual VkResult                       deviceWaitIdle                                                  (VkDevice device) const;
+virtual VkResult                       allocateMemory                                                  (VkDevice device, const VkMemoryAllocateInfo* pAllocateInfo, const VkAllocationCallbacks* pAllocator, VkDeviceMemory* pMemory) const;
+virtual VkResult                       mapMemory                                                               (VkDevice device, VkDeviceMemory memory, VkDeviceSize offset, VkDeviceSize size, VkMemoryMapFlags flags, void** ppData) const;
+virtual void                           unmapMemory                                                             (VkDevice device, VkDeviceMemory memory) const;
+virtual VkResult                       flushMappedMemoryRanges                                 (VkDevice device, deUint32 memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges) const;
+virtual VkResult                       invalidateMappedMemoryRanges                    (VkDevice device, deUint32 memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges) const;
+virtual void                           getDeviceMemoryCommitment                               (VkDevice device, VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes) const;
+virtual VkResult                       bindBufferMemory                                                (VkDevice device, VkBuffer buffer, VkDeviceMemory memory, VkDeviceSize memoryOffset) const;
+virtual VkResult                       bindImageMemory                                                 (VkDevice device, VkImage image, VkDeviceMemory memory, VkDeviceSize memoryOffset) const;
+virtual void                           getBufferMemoryRequirements                             (VkDevice device, VkBuffer buffer, VkMemoryRequirements* pMemoryRequirements) const;
+virtual void                           getImageMemoryRequirements                              (VkDevice device, VkImage image, VkMemoryRequirements* pMemoryRequirements) const;
+virtual void                           getImageSparseMemoryRequirements                (VkDevice device, VkImage image, deUint32* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements* pSparseMemoryRequirements) const;
+virtual VkResult                       queueBindSparse                                                 (VkQueue queue, deUint32 bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence) const;
+virtual VkResult                       createFence                                                             (VkDevice device, const VkFenceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence) const;
+virtual void                           destroyFence                                                    (VkDevice device, VkFence fence, const VkAllocationCallbacks* pAllocator) const;
+virtual VkResult                       resetFences                                                             (VkDevice device, deUint32 fenceCount, const VkFence* pFences) const;
+virtual VkResult                       getFenceStatus                                                  (VkDevice device, VkFence fence) const;
+virtual VkResult                       waitForFences                                                   (VkDevice device, deUint32 fenceCount, const VkFence* pFences, VkBool32 waitAll, deUint64 timeout) const;
+virtual VkResult                       createSemaphore                                                 (VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSemaphore* pSemaphore) const;
+virtual void                           destroySemaphore                                                (VkDevice device, VkSemaphore semaphore, const VkAllocationCallbacks* pAllocator) const;
+virtual VkResult                       createEvent                                                             (VkDevice device, const VkEventCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkEvent* pEvent) const;
+virtual void                           destroyEvent                                                    (VkDevice device, VkEvent event, const VkAllocationCallbacks* pAllocator) const;
+virtual VkResult                       getEventStatus                                                  (VkDevice device, VkEvent event) const;
+virtual VkResult                       setEvent                                                                (VkDevice device, VkEvent event) const;
+virtual VkResult                       resetEvent                                                              (VkDevice device, VkEvent event) const;
+virtual VkResult                       createQueryPool                                                 (VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkQueryPool* pQueryPool) const;
+virtual VkResult                       getQueryPoolResults                                             (VkDevice device, VkQueryPool queryPool, deUint32 firstQuery, deUint32 queryCount, deUintptr dataSize, void* pData, VkDeviceSize stride, VkQueryResultFlags flags) const;
+virtual VkResult                       createBuffer                                                    (VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBuffer* pBuffer) const;
+virtual void                           destroyBuffer                                                   (VkDevice device, VkBuffer buffer, const VkAllocationCallbacks* pAllocator) const;
+virtual VkResult                       createBufferView                                                (VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBufferView* pView) const;
+virtual void                           destroyBufferView                                               (VkDevice device, VkBufferView bufferView, const VkAllocationCallbacks* pAllocator) const;
+virtual VkResult                       createImage                                                             (VkDevice device, const VkImageCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImage* pImage) const;
+virtual void                           destroyImage                                                    (VkDevice device, VkImage image, const VkAllocationCallbacks* pAllocator) const;
+virtual void                           getImageSubresourceLayout                               (VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout) const;
+virtual VkResult                       createImageView                                                 (VkDevice device, const VkImageViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImageView* pView) const;
+virtual void                           destroyImageView                                                (VkDevice device, VkImageView imageView, const VkAllocationCallbacks* pAllocator) const;
+virtual VkResult                       createPipelineCache                                             (VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineCache* pPipelineCache) const;
+virtual void                           destroyPipelineCache                                    (VkDevice device, VkPipelineCache pipelineCache, const VkAllocationCallbacks* pAllocator) const;
+virtual VkResult                       createGraphicsPipelines                                 (VkDevice device, VkPipelineCache pipelineCache, deUint32 createInfoCount, const VkGraphicsPipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines) const;
+virtual VkResult                       createComputePipelines                                  (VkDevice device, VkPipelineCache pipelineCache, deUint32 createInfoCount, const VkComputePipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines) const;
+virtual void                           destroyPipeline                                                 (VkDevice device, VkPipeline pipeline, const VkAllocationCallbacks* pAllocator) const;
+virtual VkResult                       createPipelineLayout                                    (VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineLayout* pPipelineLayout) const;
+virtual void                           destroyPipelineLayout                                   (VkDevice device, VkPipelineLayout pipelineLayout, const VkAllocationCallbacks* pAllocator) const;
+virtual VkResult                       createSampler                                                   (VkDevice device, const VkSamplerCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSampler* pSampler) const;
+virtual void                           destroySampler                                                  (VkDevice device, VkSampler sampler, const VkAllocationCallbacks* pAllocator) const;
+virtual VkResult                       createDescriptorSetLayout                               (VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorSetLayout* pSetLayout) const;
+virtual void                           destroyDescriptorSetLayout                              (VkDevice device, VkDescriptorSetLayout descriptorSetLayout, const VkAllocationCallbacks* pAllocator) const;
+virtual VkResult                       createDescriptorPool                                    (VkDevice device, const VkDescriptorPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorPool* pDescriptorPool) const;
+virtual VkResult                       resetDescriptorPool                                             (VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorPoolResetFlags flags) const;
+virtual VkResult                       allocateDescriptorSets                                  (VkDevice device, const VkDescriptorSetAllocateInfo* pAllocateInfo, VkDescriptorSet* pDescriptorSets) const;
+virtual VkResult                       freeDescriptorSets                                              (VkDevice device, VkDescriptorPool descriptorPool, deUint32 descriptorSetCount, const VkDescriptorSet* pDescriptorSets) const;
+virtual void                           updateDescriptorSets                                    (VkDevice device, deUint32 descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites, deUint32 descriptorCopyCount, const VkCopyDescriptorSet* pDescriptorCopies) const;
+virtual VkResult                       createFramebuffer                                               (VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFramebuffer* pFramebuffer) const;
+virtual void                           destroyFramebuffer                                              (VkDevice device, VkFramebuffer framebuffer, const VkAllocationCallbacks* pAllocator) const;
+virtual VkResult                       createRenderPass                                                (VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass) const;
+virtual void                           destroyRenderPass                                               (VkDevice device, VkRenderPass renderPass, const VkAllocationCallbacks* pAllocator) const;
+virtual void                           getRenderAreaGranularity                                (VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity) const;
+virtual VkResult                       createCommandPool                                               (VkDevice device, const VkCommandPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkCommandPool* pCommandPool) const;
+virtual VkResult                       resetCommandPool                                                (VkDevice device, VkCommandPool commandPool, VkCommandPoolResetFlags flags) const;
+virtual VkResult                       allocateCommandBuffers                                  (VkDevice device, const VkCommandBufferAllocateInfo* pAllocateInfo, VkCommandBuffer* pCommandBuffers) const;
+virtual void                           freeCommandBuffers                                              (VkDevice device, VkCommandPool commandPool, deUint32 commandBufferCount, const VkCommandBuffer* pCommandBuffers) const;
+virtual VkResult                       beginCommandBuffer                                              (VkCommandBuffer commandBuffer, const VkCommandBufferBeginInfo* pBeginInfo) const;
+virtual VkResult                       endCommandBuffer                                                (VkCommandBuffer commandBuffer) const;
+virtual VkResult                       resetCommandBuffer                                              (VkCommandBuffer commandBuffer, VkCommandBufferResetFlags flags) const;
+virtual void                           cmdBindPipeline                                                 (VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline) const;
+virtual void                           cmdSetViewport                                                  (VkCommandBuffer commandBuffer, deUint32 firstViewport, deUint32 viewportCount, const VkViewport* pViewports) const;
+virtual void                           cmdSetScissor                                                   (VkCommandBuffer commandBuffer, deUint32 firstScissor, deUint32 scissorCount, const VkRect2D* pScissors) const;
+virtual void                           cmdSetLineWidth                                                 (VkCommandBuffer commandBuffer, float lineWidth) const;
+virtual void                           cmdSetDepthBias                                                 (VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor) const;
+virtual void                           cmdSetBlendConstants                                    (VkCommandBuffer commandBuffer, const float blendConstants[4]) const;
+virtual void                           cmdSetDepthBounds                                               (VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds) const;
+virtual void                           cmdSetStencilCompareMask                                (VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, deUint32 compareMask) const;
+virtual void                           cmdSetStencilWriteMask                                  (VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, deUint32 writeMask) const;
+virtual void                           cmdSetStencilReference                                  (VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, deUint32 reference) const;
+virtual void                           cmdBindDescriptorSets                                   (VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, deUint32 firstSet, deUint32 descriptorSetCount, const VkDescriptorSet* pDescriptorSets, deUint32 dynamicOffsetCount, const deUint32* pDynamicOffsets) const;
+virtual void                           cmdBindIndexBuffer                                              (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType) const;
+virtual void                           cmdBindVertexBuffers                                    (VkCommandBuffer commandBuffer, deUint32 firstBinding, deUint32 bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets) const;
+virtual void                           cmdDraw                                                                 (VkCommandBuffer commandBuffer, deUint32 vertexCount, deUint32 instanceCount, deUint32 firstVertex, deUint32 firstInstance) const;
+virtual void                           cmdDrawIndexed                                                  (VkCommandBuffer commandBuffer, deUint32 indexCount, deUint32 instanceCount, deUint32 firstIndex, deInt32 vertexOffset, deUint32 firstInstance) const;
+virtual void                           cmdDrawIndirect                                                 (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, deUint32 drawCount, deUint32 stride) const;
+virtual void                           cmdDrawIndexedIndirect                                  (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, deUint32 drawCount, deUint32 stride) const;
+virtual void                           cmdDispatch                                                             (VkCommandBuffer commandBuffer, deUint32 groupCountX, deUint32 groupCountY, deUint32 groupCountZ) const;
+virtual void                           cmdDispatchIndirect                                             (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset) const;
+virtual void                           cmdCopyBuffer                                                   (VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkBuffer dstBuffer, deUint32 regionCount, const VkBufferCopy* pRegions) const;
+virtual void                           cmdCopyImage                                                    (VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, deUint32 regionCount, const VkImageCopy* pRegions) const;
+virtual void                           cmdBlitImage                                                    (VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, deUint32 regionCount, const VkImageBlit* pRegions, VkFilter filter) const;
+virtual void                           cmdCopyBufferToImage                                    (VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkImage dstImage, VkImageLayout dstImageLayout, deUint32 regionCount, const VkBufferImageCopy* pRegions) const;
+virtual void                           cmdCopyImageToBuffer                                    (VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer dstBuffer, deUint32 regionCount, const VkBufferImageCopy* pRegions) const;
+virtual void                           cmdUpdateBuffer                                                 (VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize dataSize, const void* pData) const;
+virtual void                           cmdFillBuffer                                                   (VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize size, deUint32 data) const;
+virtual void                           cmdClearColorImage                                              (VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, deUint32 rangeCount, const VkImageSubresourceRange* pRanges) const;
+virtual void                           cmdClearDepthStencilImage                               (VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, deUint32 rangeCount, const VkImageSubresourceRange* pRanges) const;
+virtual void                           cmdClearAttachments                                             (VkCommandBuffer commandBuffer, deUint32 attachmentCount, const VkClearAttachment* pAttachments, deUint32 rectCount, const VkClearRect* pRects) const;
+virtual void                           cmdResolveImage                                                 (VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, deUint32 regionCount, const VkImageResolve* pRegions) const;
+virtual void                           cmdSetEvent                                                             (VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask) const;
+virtual void                           cmdResetEvent                                                   (VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask) const;
+virtual void                           cmdWaitEvents                                                   (VkCommandBuffer commandBuffer, deUint32 eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, deUint32 memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, deUint32 bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, deUint32 imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers) const;
+virtual void                           cmdPipelineBarrier                                              (VkCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, deUint32 memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, deUint32 bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, deUint32 imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers) const;
+virtual void                           cmdBeginQuery                                                   (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 query, VkQueryControlFlags flags) const;
+virtual void                           cmdEndQuery                                                             (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 query) const;
+virtual void                           cmdResetQueryPool                                               (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 firstQuery, deUint32 queryCount) const;
+virtual void                           cmdWriteTimestamp                                               (VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, deUint32 query) const;
+virtual void                           cmdCopyQueryPoolResults                                 (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 firstQuery, deUint32 queryCount, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize stride, VkQueryResultFlags flags) const;
+virtual void                           cmdPushConstants                                                (VkCommandBuffer commandBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, deUint32 offset, deUint32 size, const void* pValues) const;
+virtual void                           cmdBeginRenderPass                                              (VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkSubpassContents contents) const;
+virtual void                           cmdNextSubpass                                                  (VkCommandBuffer commandBuffer, VkSubpassContents contents) const;
+virtual void                           cmdEndRenderPass                                                (VkCommandBuffer commandBuffer) const;
+virtual void                           cmdExecuteCommands                                              (VkCommandBuffer commandBuffer, deUint32 commandBufferCount, const VkCommandBuffer* pCommandBuffers) const;
+virtual void                           getCommandPoolMemoryConsumption                 (VkDevice device, VkCommandPool commandPool, VkCommandBuffer commandBuffer, VkCommandPoolMemoryConsumption* pConsumption) const;
+virtual VkResult                       getFaultData                                                    (VkDevice device, VkFaultQueryBehavior faultQueryBehavior, VkBool32* pUnrecordedFaults, deUint32* pFaultCount, VkFaultData* pFaults) const;
+virtual VkResult                       bindBufferMemory2                                               (VkDevice device, deUint32 bindInfoCount, const VkBindBufferMemoryInfo* pBindInfos) const;
+virtual VkResult                       bindImageMemory2                                                (VkDevice device, deUint32 bindInfoCount, const VkBindImageMemoryInfo* pBindInfos) const;
+virtual void                           getDeviceGroupPeerMemoryFeatures                (VkDevice device, deUint32 heapIndex, deUint32 localDeviceIndex, deUint32 remoteDeviceIndex, VkPeerMemoryFeatureFlags* pPeerMemoryFeatures) const;
+virtual void                           cmdSetDeviceMask                                                (VkCommandBuffer commandBuffer, deUint32 deviceMask) const;
+virtual void                           cmdDispatchBase                                                 (VkCommandBuffer commandBuffer, deUint32 baseGroupX, deUint32 baseGroupY, deUint32 baseGroupZ, deUint32 groupCountX, deUint32 groupCountY, deUint32 groupCountZ) const;
+virtual void                           getImageMemoryRequirements2                             (VkDevice device, const VkImageMemoryRequirementsInfo2* pInfo, VkMemoryRequirements2* pMemoryRequirements) const;
+virtual void                           getBufferMemoryRequirements2                    (VkDevice device, const VkBufferMemoryRequirementsInfo2* pInfo, VkMemoryRequirements2* pMemoryRequirements) const;
+virtual void                           getImageSparseMemoryRequirements2               (VkDevice device, const VkImageSparseMemoryRequirementsInfo2* pInfo, deUint32* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2* pSparseMemoryRequirements) const;
+virtual void                           getDeviceQueue2                                                 (VkDevice device, const VkDeviceQueueInfo2* pQueueInfo, VkQueue* pQueue) const;
+virtual VkResult                       createSamplerYcbcrConversion                    (VkDevice device, const VkSamplerYcbcrConversionCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSamplerYcbcrConversion* pYcbcrConversion) const;
+virtual void                           destroySamplerYcbcrConversion                   (VkDevice device, VkSamplerYcbcrConversion ycbcrConversion, const VkAllocationCallbacks* pAllocator) const;
+virtual void                           getDescriptorSetLayoutSupport                   (VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, VkDescriptorSetLayoutSupport* pSupport) const;
+virtual void                           cmdDrawIndirectCount                                    (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, deUint32 maxDrawCount, deUint32 stride) const;
+virtual void                           cmdDrawIndexedIndirectCount                             (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, deUint32 maxDrawCount, deUint32 stride) const;
+virtual VkResult                       createRenderPass2                                               (VkDevice device, const VkRenderPassCreateInfo2* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass) const;
+virtual void                           cmdBeginRenderPass2                                             (VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, const VkSubpassBeginInfo* pSubpassBeginInfo) const;
+virtual void                           cmdNextSubpass2                                                 (VkCommandBuffer commandBuffer, const VkSubpassBeginInfo* pSubpassBeginInfo, const VkSubpassEndInfo* pSubpassEndInfo) const;
+virtual void                           cmdEndRenderPass2                                               (VkCommandBuffer commandBuffer, const VkSubpassEndInfo* pSubpassEndInfo) const;
+virtual void                           resetQueryPool                                                  (VkDevice device, VkQueryPool queryPool, deUint32 firstQuery, deUint32 queryCount) const;
+virtual VkResult                       getSemaphoreCounterValue                                (VkDevice device, VkSemaphore semaphore, deUint64* pValue) const;
+virtual VkResult                       waitSemaphores                                                  (VkDevice device, const VkSemaphoreWaitInfo* pWaitInfo, deUint64 timeout) const;
+virtual VkResult                       signalSemaphore                                                 (VkDevice device, const VkSemaphoreSignalInfo* pSignalInfo) const;
+virtual VkDeviceAddress                getBufferDeviceAddress                                  (VkDevice device, const VkBufferDeviceAddressInfo* pInfo) const;
+virtual uint64_t                       getBufferOpaqueCaptureAddress                   (VkDevice device, const VkBufferDeviceAddressInfo* pInfo) const;
+virtual uint64_t                       getDeviceMemoryOpaqueCaptureAddress             (VkDevice device, const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo) const;
+virtual VkResult                       createSwapchainKHR                                              (VkDevice device, const VkSwapchainCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSwapchainKHR* pSwapchain) const;
+virtual VkResult                       getSwapchainImagesKHR                                   (VkDevice device, VkSwapchainKHR swapchain, deUint32* pSwapchainImageCount, VkImage* pSwapchainImages) const;
+virtual VkResult                       acquireNextImageKHR                                             (VkDevice device, VkSwapchainKHR swapchain, deUint64 timeout, VkSemaphore semaphore, VkFence fence, deUint32* pImageIndex) const;
+virtual VkResult                       queuePresentKHR                                                 (VkQueue queue, const VkPresentInfoKHR* pPresentInfo) const;
+virtual VkResult                       getDeviceGroupPresentCapabilitiesKHR    (VkDevice device, VkDeviceGroupPresentCapabilitiesKHR* pDeviceGroupPresentCapabilities) const;
+virtual VkResult                       getDeviceGroupSurfacePresentModesKHR    (VkDevice device, VkSurfaceKHR surface, VkDeviceGroupPresentModeFlagsKHR* pModes) const;
+virtual VkResult                       acquireNextImage2KHR                                    (VkDevice device, const VkAcquireNextImageInfoKHR* pAcquireInfo, deUint32* pImageIndex) const;
+virtual VkResult                       createSharedSwapchainsKHR                               (VkDevice device, deUint32 swapchainCount, const VkSwapchainCreateInfoKHR* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkSwapchainKHR* pSwapchains) const;
+virtual VkResult                       getMemoryFdKHR                                                  (VkDevice device, const VkMemoryGetFdInfoKHR* pGetFdInfo, int* pFd) const;
+virtual VkResult                       getMemoryFdPropertiesKHR                                (VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, int fd, VkMemoryFdPropertiesKHR* pMemoryFdProperties) const;
+virtual VkResult                       importSemaphoreFdKHR                                    (VkDevice device, const VkImportSemaphoreFdInfoKHR* pImportSemaphoreFdInfo) const;
+virtual VkResult                       getSemaphoreFdKHR                                               (VkDevice device, const VkSemaphoreGetFdInfoKHR* pGetFdInfo, int* pFd) const;
+virtual VkResult                       getSwapchainStatusKHR                                   (VkDevice device, VkSwapchainKHR swapchain) const;
+virtual VkResult                       importFenceFdKHR                                                (VkDevice device, const VkImportFenceFdInfoKHR* pImportFenceFdInfo) const;
+virtual VkResult                       getFenceFdKHR                                                   (VkDevice device, const VkFenceGetFdInfoKHR* pGetFdInfo, int* pFd) const;
+virtual void                           cmdSetFragmentShadingRateKHR                    (VkCommandBuffer commandBuffer, const VkExtent2D* pFragmentSize, const VkFragmentShadingRateCombinerOpKHR combinerOps[2]) const;
+virtual VkResult                       getFaultDataKHR                                                 (VkDevice device, VkFaultQueryBehavior faultQueryBehavior, VkBool32* pUnrecordedFaults, deUint32* pFaultCount, VkFaultData* pFaults) const;
+virtual void                           cmdRefreshObjectsKHR                                    (VkCommandBuffer commandBuffer, const VkRefreshObjectListKHR* pRefreshObjects) const;
+virtual void                           cmdCopyBuffer2KHR                                               (VkCommandBuffer commandBuffer, const VkCopyBufferInfo2KHR* pCopyBufferInfo) const;
+virtual void                           cmdCopyImage2KHR                                                (VkCommandBuffer commandBuffer, const VkCopyImageInfo2KHR* pCopyImageInfo) const;
+virtual void                           cmdCopyBufferToImage2KHR                                (VkCommandBuffer commandBuffer, const VkCopyBufferToImageInfo2KHR* pCopyBufferToImageInfo) const;
+virtual void                           cmdCopyImageToBuffer2KHR                                (VkCommandBuffer commandBuffer, const VkCopyImageToBufferInfo2KHR* pCopyImageToBufferInfo) const;
+virtual void                           cmdBlitImage2KHR                                                (VkCommandBuffer commandBuffer, const VkBlitImageInfo2KHR* pBlitImageInfo) const;
+virtual void                           cmdResolveImage2KHR                                             (VkCommandBuffer commandBuffer, const VkResolveImageInfo2KHR* pResolveImageInfo) const;
+virtual VkResult                       displayPowerControlEXT                                  (VkDevice device, VkDisplayKHR display, const VkDisplayPowerInfoEXT* pDisplayPowerInfo) const;
+virtual VkResult                       registerDeviceEventEXT                                  (VkDevice device, const VkDeviceEventInfoEXT* pDeviceEventInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence) const;
+virtual VkResult                       registerDisplayEventEXT                                 (VkDevice device, VkDisplayKHR display, const VkDisplayEventInfoEXT* pDisplayEventInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence) const;
+virtual VkResult                       getSwapchainCounterEXT                                  (VkDevice device, VkSwapchainKHR swapchain, VkSurfaceCounterFlagBitsEXT counter, deUint64* pCounterValue) const;
+virtual void                           cmdSetDiscardRectangleEXT                               (VkCommandBuffer commandBuffer, deUint32 firstDiscardRectangle, deUint32 discardRectangleCount, const VkRect2D* pDiscardRectangles) const;
+virtual void                           setHdrMetadataEXT                                               (VkDevice device, deUint32 swapchainCount, const VkSwapchainKHR* pSwapchains, const VkHdrMetadataEXT* pMetadata) const;
+virtual void                           cmdSetSampleLocationsEXT                                (VkCommandBuffer commandBuffer, const VkSampleLocationsInfoEXT* pSampleLocationsInfo) const;
+virtual VkResult                       getImageDrmFormatModifierPropertiesEXT  (VkDevice device, VkImage image, VkImageDrmFormatModifierPropertiesEXT* pProperties) const;
+virtual VkResult                       getMemoryHostPointerPropertiesEXT               (VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, const void* pHostPointer, VkMemoryHostPointerPropertiesEXT* pMemoryHostPointerProperties) const;
+virtual VkResult                       getCalibratedTimestampsEXT                              (VkDevice device, deUint32 timestampCount, const VkCalibratedTimestampInfoEXT* pTimestampInfos, deUint64* pTimestamps, deUint64* pMaxDeviation) const;
+virtual void                           cmdSetLineStippleEXT                                    (VkCommandBuffer commandBuffer, deUint32 lineStippleFactor, deUint16 lineStipplePattern) const;
+virtual void                           cmdSetCullModeEXT                                               (VkCommandBuffer commandBuffer, VkCullModeFlags cullMode) const;
+virtual void                           cmdSetFrontFaceEXT                                              (VkCommandBuffer commandBuffer, VkFrontFace frontFace) const;
+virtual void                           cmdSetPrimitiveTopologyEXT                              (VkCommandBuffer commandBuffer, VkPrimitiveTopology primitiveTopology) const;
+virtual void                           cmdSetViewportWithCountEXT                              (VkCommandBuffer commandBuffer, deUint32 viewportCount, const VkViewport* pViewports) const;
+virtual void                           cmdSetScissorWithCountEXT                               (VkCommandBuffer commandBuffer, deUint32 scissorCount, const VkRect2D* pScissors) const;
+virtual void                           cmdBindVertexBuffers2EXT                                (VkCommandBuffer commandBuffer, deUint32 firstBinding, deUint32 bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets, const VkDeviceSize* pSizes, const VkDeviceSize* pStrides) const;
+virtual void                           cmdSetDepthTestEnableEXT                                (VkCommandBuffer commandBuffer, VkBool32 depthTestEnable) const;
+virtual void                           cmdSetDepthWriteEnableEXT                               (VkCommandBuffer commandBuffer, VkBool32 depthWriteEnable) const;
+virtual void                           cmdSetDepthCompareOpEXT                                 (VkCommandBuffer commandBuffer, VkCompareOp depthCompareOp) const;
+virtual void                           cmdSetDepthBoundsTestEnableEXT                  (VkCommandBuffer commandBuffer, VkBool32 depthBoundsTestEnable) const;
+virtual void                           cmdSetStencilTestEnableEXT                              (VkCommandBuffer commandBuffer, VkBool32 stencilTestEnable) const;
+virtual void                           cmdSetStencilOpEXT                                              (VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, VkStencilOp failOp, VkStencilOp passOp, VkStencilOp depthFailOp, VkCompareOp compareOp) const;
diff --git a/external/vulkancts/framework/vulkan/generated/vulkansc/vkConcreteInstanceInterface.inl b/external/vulkancts/framework/vulkan/generated/vulkansc/vkConcreteInstanceInterface.inl
new file mode 100644 (file)
index 0000000..aa82737
--- /dev/null
@@ -0,0 +1,52 @@
+/* WARNING: This is auto-generated file. Do not modify, since changes will
+ * be lost! Modify the generating script instead.
+ */
+virtual void           destroyInstance                                                                 (VkInstance instance, const VkAllocationCallbacks* pAllocator) const;
+virtual VkResult       enumeratePhysicalDevices                                                (VkInstance instance, deUint32* pPhysicalDeviceCount, VkPhysicalDevice* pPhysicalDevices) const;
+virtual void           getPhysicalDeviceFeatures                                               (VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures* pFeatures) const;
+virtual void           getPhysicalDeviceFormatProperties                               (VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties* pFormatProperties) const;
+virtual VkResult       getPhysicalDeviceImageFormatProperties                  (VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkImageFormatProperties* pImageFormatProperties) const;
+virtual void           getPhysicalDeviceProperties                                             (VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties* pProperties) const;
+virtual void           getPhysicalDeviceQueueFamilyProperties                  (VkPhysicalDevice physicalDevice, deUint32* pQueueFamilyPropertyCount, VkQueueFamilyProperties* pQueueFamilyProperties) const;
+virtual void           getPhysicalDeviceMemoryProperties                               (VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties* pMemoryProperties) const;
+virtual VkResult       createDevice                                                                    (VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDevice* pDevice) const;
+virtual VkResult       enumerateDeviceExtensionProperties                              (VkPhysicalDevice physicalDevice, const char* pLayerName, deUint32* pPropertyCount, VkExtensionProperties* pProperties) const;
+virtual VkResult       enumerateDeviceLayerProperties                                  (VkPhysicalDevice physicalDevice, deUint32* pPropertyCount, VkLayerProperties* pProperties) const;
+virtual void           getPhysicalDeviceSparseImageFormatProperties    (VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkSampleCountFlagBits samples, VkImageUsageFlags usage, VkImageTiling tiling, deUint32* pPropertyCount, VkSparseImageFormatProperties* pProperties) const;
+virtual VkResult       enumeratePhysicalDeviceGroups                                   (VkInstance instance, deUint32* pPhysicalDeviceGroupCount, VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties) const;
+virtual void           getPhysicalDeviceFeatures2                                              (VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures2* pFeatures) const;
+virtual void           getPhysicalDeviceProperties2                                    (VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties2* pProperties) const;
+virtual void           getPhysicalDeviceFormatProperties2                              (VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties2* pFormatProperties) const;
+virtual VkResult       getPhysicalDeviceImageFormatProperties2                 (VkPhysicalDevice physicalDevice, const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo, VkImageFormatProperties2* pImageFormatProperties) const;
+virtual void           getPhysicalDeviceQueueFamilyProperties2                 (VkPhysicalDevice physicalDevice, deUint32* pQueueFamilyPropertyCount, VkQueueFamilyProperties2* pQueueFamilyProperties) const;
+virtual void           getPhysicalDeviceMemoryProperties2                              (VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties2* pMemoryProperties) const;
+virtual void           getPhysicalDeviceSparseImageFormatProperties2   (VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo, deUint32* pPropertyCount, VkSparseImageFormatProperties2* pProperties) const;
+virtual void           getPhysicalDeviceExternalBufferProperties               (VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo, VkExternalBufferProperties* pExternalBufferProperties) const;
+virtual void           getPhysicalDeviceExternalFenceProperties                (VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo, VkExternalFenceProperties* pExternalFenceProperties) const;
+virtual void           getPhysicalDeviceExternalSemaphoreProperties    (VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo, VkExternalSemaphoreProperties* pExternalSemaphoreProperties) const;
+virtual void           destroySurfaceKHR                                                               (VkInstance instance, VkSurfaceKHR surface, const VkAllocationCallbacks* pAllocator) const;
+virtual VkResult       getPhysicalDeviceSurfaceSupportKHR                              (VkPhysicalDevice physicalDevice, deUint32 queueFamilyIndex, VkSurfaceKHR surface, VkBool32* pSupported) const;
+virtual VkResult       getPhysicalDeviceSurfaceCapabilitiesKHR                 (VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, VkSurfaceCapabilitiesKHR* pSurfaceCapabilities) const;
+virtual VkResult       getPhysicalDeviceSurfaceFormatsKHR                              (VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, deUint32* pSurfaceFormatCount, VkSurfaceFormatKHR* pSurfaceFormats) const;
+virtual VkResult       getPhysicalDeviceSurfacePresentModesKHR                 (VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, deUint32* pPresentModeCount, VkPresentModeKHR* pPresentModes) const;
+virtual VkResult       getPhysicalDevicePresentRectanglesKHR                   (VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, deUint32* pRectCount, VkRect2D* pRects) const;
+virtual VkResult       getPhysicalDeviceDisplayPropertiesKHR                   (VkPhysicalDevice physicalDevice, deUint32* pPropertyCount, VkDisplayPropertiesKHR* pProperties) const;
+virtual VkResult       getPhysicalDeviceDisplayPlanePropertiesKHR              (VkPhysicalDevice physicalDevice, deUint32* pPropertyCount, VkDisplayPlanePropertiesKHR* pProperties) const;
+virtual VkResult       getDisplayPlaneSupportedDisplaysKHR                             (VkPhysicalDevice physicalDevice, deUint32 planeIndex, deUint32* pDisplayCount, VkDisplayKHR* pDisplays) const;
+virtual VkResult       getDisplayModePropertiesKHR                                             (VkPhysicalDevice physicalDevice, VkDisplayKHR display, deUint32* pPropertyCount, VkDisplayModePropertiesKHR* pProperties) const;
+virtual VkResult       createDisplayModeKHR                                                    (VkPhysicalDevice physicalDevice, VkDisplayKHR display, const VkDisplayModeCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDisplayModeKHR* pMode) const;
+virtual VkResult       getDisplayPlaneCapabilitiesKHR                                  (VkPhysicalDevice physicalDevice, VkDisplayModeKHR mode, deUint32 planeIndex, VkDisplayPlaneCapabilitiesKHR* pCapabilities) const;
+virtual VkResult       createDisplayPlaneSurfaceKHR                                    (VkInstance instance, const VkDisplaySurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface) const;
+virtual VkResult       getPhysicalDeviceSurfaceCapabilities2KHR                (VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, VkSurfaceCapabilities2KHR* pSurfaceCapabilities) const;
+virtual VkResult       getPhysicalDeviceSurfaceFormats2KHR                             (VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, deUint32* pSurfaceFormatCount, VkSurfaceFormat2KHR* pSurfaceFormats) const;
+virtual VkResult       getPhysicalDeviceDisplayProperties2KHR                  (VkPhysicalDevice physicalDevice, deUint32* pPropertyCount, VkDisplayProperties2KHR* pProperties) const;
+virtual VkResult       getPhysicalDeviceDisplayPlaneProperties2KHR             (VkPhysicalDevice physicalDevice, deUint32* pPropertyCount, VkDisplayPlaneProperties2KHR* pProperties) const;
+virtual VkResult       getDisplayModeProperties2KHR                                    (VkPhysicalDevice physicalDevice, VkDisplayKHR display, deUint32* pPropertyCount, VkDisplayModeProperties2KHR* pProperties) const;
+virtual VkResult       getDisplayPlaneCapabilities2KHR                                 (VkPhysicalDevice physicalDevice, const VkDisplayPlaneInfo2KHR* pDisplayPlaneInfo, VkDisplayPlaneCapabilities2KHR* pCapabilities) const;
+virtual VkResult       getPhysicalDeviceFragmentShadingRatesKHR                (VkPhysicalDevice physicalDevice, deUint32* pFragmentShadingRateCount, VkPhysicalDeviceFragmentShadingRateKHR* pFragmentShadingRates) const;
+virtual VkResult       getPhysicalDeviceRefreshableObjectTypesKHR              (VkPhysicalDevice physicalDevice, deUint32* pRefreshableObjectCount, VkObjectType* pRefreshableObjectTypes) const;
+virtual VkResult       releaseDisplayEXT                                                               (VkPhysicalDevice physicalDevice, VkDisplayKHR display) const;
+virtual VkResult       getPhysicalDeviceSurfaceCapabilities2EXT                (VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, VkSurfaceCapabilities2EXT* pSurfaceCapabilities) const;
+virtual void           getPhysicalDeviceMultisamplePropertiesEXT               (VkPhysicalDevice physicalDevice, VkSampleCountFlagBits samples, VkMultisamplePropertiesEXT* pMultisampleProperties) const;
+virtual VkResult       getPhysicalDeviceCalibrateableTimeDomainsEXT    (VkPhysicalDevice physicalDevice, deUint32* pTimeDomainCount, VkTimeDomainEXT* pTimeDomains) const;
+virtual VkResult       createHeadlessSurfaceEXT                                                (VkInstance instance, const VkHeadlessSurfaceCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface) const;
diff --git a/external/vulkancts/framework/vulkan/generated/vulkansc/vkConcretePlatformInterface.inl b/external/vulkancts/framework/vulkan/generated/vulkansc/vkConcretePlatformInterface.inl
new file mode 100644 (file)
index 0000000..d68dc22
--- /dev/null
@@ -0,0 +1,8 @@
+/* WARNING: This is auto-generated file. Do not modify, since changes will
+ * be lost! Modify the generating script instead.
+ */
+virtual VkResult                       createInstance                                                  (const VkInstanceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkInstance* pInstance) const;
+virtual PFN_vkVoidFunction     getInstanceProcAddr                                             (VkInstance instance, const char* pName) const;
+virtual VkResult                       enumerateInstanceExtensionProperties    (const char* pLayerName, deUint32* pPropertyCount, VkExtensionProperties* pProperties) const;
+virtual VkResult                       enumerateInstanceLayerProperties                (deUint32* pPropertyCount, VkLayerProperties* pProperties) const;
+virtual VkResult                       enumerateInstanceVersion                                (deUint32* pApiVersion) const;
diff --git a/external/vulkancts/framework/vulkan/generated/vulkansc/vkCoreFunctionalities.inl b/external/vulkancts/framework/vulkan/generated/vulkansc/vkCoreFunctionalities.inl
new file mode 100644 (file)
index 0000000..618aae1
--- /dev/null
@@ -0,0 +1,606 @@
+/* WARNING: This is auto-generated file. Do not modify, since changes will
+ * be lost! Modify the generating script instead.
+ */
+
+enum FunctionOrigin
+{
+       FUNCTIONORIGIN_PLATFORM         = 0,
+       FUNCTIONORIGIN_INSTANCE,
+       FUNCTIONORIGIN_DEVICE
+};
+
+typedef ::std::pair<const char*, FunctionOrigin> FunctionInfo;
+typedef ::std::vector<FunctionInfo> FunctionInfosList;
+typedef ::std::map<deUint32, FunctionInfosList> ApisMap;
+
+void initApisMap (ApisMap& apis)
+{
+       apis.clear();
+       apis.insert(::std::pair<deUint32, FunctionInfosList>(VK_API_VERSION_1_0, FunctionInfosList()));
+       apis.insert(::std::pair<deUint32, FunctionInfosList>(VKSC_API_VERSION_1_0, FunctionInfosList()));
+       apis.insert(::std::pair<deUint32, FunctionInfosList>(VK_API_VERSION_1_1, FunctionInfosList()));
+       apis.insert(::std::pair<deUint32, FunctionInfosList>(VK_API_VERSION_1_2, FunctionInfosList()));
+
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCreateInstance",                                                                     FUNCTIONORIGIN_PLATFORM));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkDestroyInstance",                                                            FUNCTIONORIGIN_INSTANCE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkEnumeratePhysicalDevices",                                           FUNCTIONORIGIN_INSTANCE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkGetPhysicalDeviceFeatures",                                          FUNCTIONORIGIN_INSTANCE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkGetPhysicalDeviceFormatProperties",                          FUNCTIONORIGIN_INSTANCE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkGetPhysicalDeviceImageFormatProperties",                     FUNCTIONORIGIN_INSTANCE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkGetPhysicalDeviceProperties",                                        FUNCTIONORIGIN_INSTANCE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkGetPhysicalDeviceQueueFamilyProperties",                     FUNCTIONORIGIN_INSTANCE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkGetPhysicalDeviceMemoryProperties",                          FUNCTIONORIGIN_INSTANCE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkGetInstanceProcAddr",                                                        FUNCTIONORIGIN_PLATFORM));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkGetDeviceProcAddr",                                                          FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCreateDevice",                                                                       FUNCTIONORIGIN_INSTANCE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkDestroyDevice",                                                                      FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkEnumerateInstanceExtensionProperties",                       FUNCTIONORIGIN_PLATFORM));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkEnumerateDeviceExtensionProperties",                         FUNCTIONORIGIN_INSTANCE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkEnumerateInstanceLayerProperties",                           FUNCTIONORIGIN_PLATFORM));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkEnumerateDeviceLayerProperties",                                     FUNCTIONORIGIN_INSTANCE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkGetDeviceQueue",                                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkQueueSubmit",                                                                        FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkQueueWaitIdle",                                                                      FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkDeviceWaitIdle",                                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkAllocateMemory",                                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkMapMemory",                                                                          FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkUnmapMemory",                                                                        FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkFlushMappedMemoryRanges",                                            FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkInvalidateMappedMemoryRanges",                                       FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkGetDeviceMemoryCommitment",                                          FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkBindBufferMemory",                                                           FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkBindImageMemory",                                                            FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkGetBufferMemoryRequirements",                                        FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkGetImageMemoryRequirements",                                         FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkGetImageSparseMemoryRequirements",                           FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkGetPhysicalDeviceSparseImageFormatProperties",       FUNCTIONORIGIN_INSTANCE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkQueueBindSparse",                                                            FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCreateFence",                                                                        FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkDestroyFence",                                                                       FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkResetFences",                                                                        FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkGetFenceStatus",                                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkWaitForFences",                                                                      FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCreateSemaphore",                                                            FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkDestroySemaphore",                                                           FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCreateEvent",                                                                        FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkDestroyEvent",                                                                       FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkGetEventStatus",                                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkSetEvent",                                                                           FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkResetEvent",                                                                         FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCreateQueryPool",                                                            FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkGetQueryPoolResults",                                                        FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCreateBuffer",                                                                       FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkDestroyBuffer",                                                                      FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCreateBufferView",                                                           FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkDestroyBufferView",                                                          FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCreateImage",                                                                        FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkDestroyImage",                                                                       FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkGetImageSubresourceLayout",                                          FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCreateImageView",                                                            FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkDestroyImageView",                                                           FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCreatePipelineCache",                                                        FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkDestroyPipelineCache",                                                       FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCreateGraphicsPipelines",                                            FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCreateComputePipelines",                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkDestroyPipeline",                                                            FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCreatePipelineLayout",                                                       FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkDestroyPipelineLayout",                                                      FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCreateSampler",                                                                      FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkDestroySampler",                                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCreateDescriptorSetLayout",                                          FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkDestroyDescriptorSetLayout",                                         FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCreateDescriptorPool",                                                       FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkResetDescriptorPool",                                                        FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkAllocateDescriptorSets",                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkFreeDescriptorSets",                                                         FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkUpdateDescriptorSets",                                                       FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCreateFramebuffer",                                                          FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkDestroyFramebuffer",                                                         FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCreateRenderPass",                                                           FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkDestroyRenderPass",                                                          FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkGetRenderAreaGranularity",                                           FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCreateCommandPool",                                                          FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkResetCommandPool",                                                           FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkAllocateCommandBuffers",                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkFreeCommandBuffers",                                                         FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkBeginCommandBuffer",                                                         FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkEndCommandBuffer",                                                           FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkResetCommandBuffer",                                                         FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCmdBindPipeline",                                                            FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCmdSetViewport",                                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCmdSetScissor",                                                                      FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCmdSetLineWidth",                                                            FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCmdSetDepthBias",                                                            FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCmdSetBlendConstants",                                                       FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCmdSetDepthBounds",                                                          FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCmdSetStencilCompareMask",                                           FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCmdSetStencilWriteMask",                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCmdSetStencilReference",                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCmdBindDescriptorSets",                                                      FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCmdBindIndexBuffer",                                                         FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCmdBindVertexBuffers",                                                       FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCmdDraw",                                                                            FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCmdDrawIndexed",                                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCmdDrawIndirect",                                                            FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCmdDrawIndexedIndirect",                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCmdDispatch",                                                                        FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCmdDispatchIndirect",                                                        FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCmdCopyBuffer",                                                                      FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCmdCopyImage",                                                                       FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCmdBlitImage",                                                                       FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCmdCopyBufferToImage",                                                       FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCmdCopyImageToBuffer",                                                       FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCmdUpdateBuffer",                                                            FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCmdFillBuffer",                                                                      FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCmdClearColorImage",                                                         FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCmdClearDepthStencilImage",                                          FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCmdClearAttachments",                                                        FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCmdResolveImage",                                                            FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCmdSetEvent",                                                                        FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCmdResetEvent",                                                                      FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCmdWaitEvents",                                                                      FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCmdPipelineBarrier",                                                         FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCmdBeginQuery",                                                                      FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCmdEndQuery",                                                                        FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCmdResetQueryPool",                                                          FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCmdWriteTimestamp",                                                          FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCmdCopyQueryPoolResults",                                            FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCmdPushConstants",                                                           FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCmdBeginRenderPass",                                                         FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCmdNextSubpass",                                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCmdEndRenderPass",                                                           FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_0].push_back(FunctionInfo("vkCmdExecuteCommands",                                                         FUNCTIONORIGIN_DEVICE));
+
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCreateInstance",                                                           FUNCTIONORIGIN_PLATFORM));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkDestroyInstance",                                                          FUNCTIONORIGIN_INSTANCE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkEnumeratePhysicalDevices",                                         FUNCTIONORIGIN_INSTANCE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkGetPhysicalDeviceFeatures",                                        FUNCTIONORIGIN_INSTANCE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkGetPhysicalDeviceFormatProperties",                        FUNCTIONORIGIN_INSTANCE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkGetPhysicalDeviceImageFormatProperties",           FUNCTIONORIGIN_INSTANCE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkGetPhysicalDeviceProperties",                                      FUNCTIONORIGIN_INSTANCE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkGetPhysicalDeviceQueueFamilyProperties",           FUNCTIONORIGIN_INSTANCE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkGetPhysicalDeviceMemoryProperties",                        FUNCTIONORIGIN_INSTANCE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkGetInstanceProcAddr",                                                      FUNCTIONORIGIN_PLATFORM));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkGetDeviceProcAddr",                                                        FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCreateDevice",                                                                     FUNCTIONORIGIN_INSTANCE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkDestroyDevice",                                                            FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkEnumerateInstanceExtensionProperties",                     FUNCTIONORIGIN_PLATFORM));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkEnumerateDeviceExtensionProperties",                       FUNCTIONORIGIN_INSTANCE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkEnumerateInstanceLayerProperties",                         FUNCTIONORIGIN_PLATFORM));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkEnumerateDeviceLayerProperties",                           FUNCTIONORIGIN_INSTANCE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkGetDeviceQueue",                                                           FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkQueueSubmit",                                                                      FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkQueueWaitIdle",                                                            FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkDeviceWaitIdle",                                                           FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkAllocateMemory",                                                           FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkMapMemory",                                                                        FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkUnmapMemory",                                                                      FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkFlushMappedMemoryRanges",                                          FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkInvalidateMappedMemoryRanges",                                     FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkGetDeviceMemoryCommitment",                                        FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkBindBufferMemory",                                                         FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkBindImageMemory",                                                          FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkGetBufferMemoryRequirements",                                      FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkGetImageMemoryRequirements",                                       FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkGetImageSparseMemoryRequirements",                         FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkGetPhysicalDeviceSparseImageFormatProperties",     FUNCTIONORIGIN_INSTANCE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkQueueBindSparse",                                                          FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCreateFence",                                                                      FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkDestroyFence",                                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkResetFences",                                                                      FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkGetFenceStatus",                                                           FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkWaitForFences",                                                            FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCreateSemaphore",                                                          FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkDestroySemaphore",                                                         FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCreateEvent",                                                                      FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkDestroyEvent",                                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkGetEventStatus",                                                           FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkSetEvent",                                                                         FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkResetEvent",                                                                       FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCreateQueryPool",                                                          FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkGetQueryPoolResults",                                                      FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCreateBuffer",                                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkDestroyBuffer",                                                            FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCreateBufferView",                                                         FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkDestroyBufferView",                                                        FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCreateImage",                                                                      FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkDestroyImage",                                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkGetImageSubresourceLayout",                                        FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCreateImageView",                                                          FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkDestroyImageView",                                                         FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCreatePipelineCache",                                                      FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkDestroyPipelineCache",                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCreateGraphicsPipelines",                                          FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCreateComputePipelines",                                           FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkDestroyPipeline",                                                          FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCreatePipelineLayout",                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkDestroyPipelineLayout",                                            FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCreateSampler",                                                            FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkDestroySampler",                                                           FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCreateDescriptorSetLayout",                                        FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkDestroyDescriptorSetLayout",                                       FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCreateDescriptorPool",                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkResetDescriptorPool",                                                      FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkAllocateDescriptorSets",                                           FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkFreeDescriptorSets",                                                       FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkUpdateDescriptorSets",                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCreateFramebuffer",                                                        FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkDestroyFramebuffer",                                                       FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCreateRenderPass",                                                         FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkDestroyRenderPass",                                                        FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkGetRenderAreaGranularity",                                         FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCreateCommandPool",                                                        FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkResetCommandPool",                                                         FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkAllocateCommandBuffers",                                           FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkFreeCommandBuffers",                                                       FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkBeginCommandBuffer",                                                       FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkEndCommandBuffer",                                                         FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkResetCommandBuffer",                                                       FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCmdBindPipeline",                                                          FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCmdSetViewport",                                                           FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCmdSetScissor",                                                            FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCmdSetLineWidth",                                                          FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCmdSetDepthBias",                                                          FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCmdSetBlendConstants",                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCmdSetDepthBounds",                                                        FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCmdSetStencilCompareMask",                                         FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCmdSetStencilWriteMask",                                           FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCmdSetStencilReference",                                           FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCmdBindDescriptorSets",                                            FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCmdBindIndexBuffer",                                                       FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCmdBindVertexBuffers",                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCmdDraw",                                                                          FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCmdDrawIndexed",                                                           FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCmdDrawIndirect",                                                          FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCmdDrawIndexedIndirect",                                           FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCmdDispatch",                                                                      FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCmdDispatchIndirect",                                                      FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCmdCopyBuffer",                                                            FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCmdCopyImage",                                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCmdBlitImage",                                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCmdCopyBufferToImage",                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCmdCopyImageToBuffer",                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCmdUpdateBuffer",                                                          FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCmdFillBuffer",                                                            FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCmdClearColorImage",                                                       FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCmdClearDepthStencilImage",                                        FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCmdClearAttachments",                                                      FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCmdResolveImage",                                                          FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCmdSetEvent",                                                                      FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCmdResetEvent",                                                            FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCmdWaitEvents",                                                            FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCmdPipelineBarrier",                                                       FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCmdBeginQuery",                                                            FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCmdEndQuery",                                                                      FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCmdResetQueryPool",                                                        FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCmdWriteTimestamp",                                                        FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCmdCopyQueryPoolResults",                                          FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCmdPushConstants",                                                         FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCmdBeginRenderPass",                                                       FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCmdNextSubpass",                                                           FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCmdEndRenderPass",                                                         FUNCTIONORIGIN_DEVICE));
+       apis[VKSC_API_VERSION_1_0].push_back(FunctionInfo("vkCmdExecuteCommands",                                                       FUNCTIONORIGIN_DEVICE));
+
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCreateInstance",                                                                     FUNCTIONORIGIN_PLATFORM));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkDestroyInstance",                                                            FUNCTIONORIGIN_INSTANCE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkEnumeratePhysicalDevices",                                           FUNCTIONORIGIN_INSTANCE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkGetPhysicalDeviceFeatures",                                          FUNCTIONORIGIN_INSTANCE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkGetPhysicalDeviceFormatProperties",                          FUNCTIONORIGIN_INSTANCE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkGetPhysicalDeviceImageFormatProperties",                     FUNCTIONORIGIN_INSTANCE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkGetPhysicalDeviceProperties",                                        FUNCTIONORIGIN_INSTANCE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkGetPhysicalDeviceQueueFamilyProperties",                     FUNCTIONORIGIN_INSTANCE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkGetPhysicalDeviceMemoryProperties",                          FUNCTIONORIGIN_INSTANCE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkGetInstanceProcAddr",                                                        FUNCTIONORIGIN_PLATFORM));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkGetDeviceProcAddr",                                                          FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCreateDevice",                                                                       FUNCTIONORIGIN_INSTANCE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkDestroyDevice",                                                                      FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkEnumerateInstanceExtensionProperties",                       FUNCTIONORIGIN_PLATFORM));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkEnumerateDeviceExtensionProperties",                         FUNCTIONORIGIN_INSTANCE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkEnumerateInstanceLayerProperties",                           FUNCTIONORIGIN_PLATFORM));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkEnumerateDeviceLayerProperties",                                     FUNCTIONORIGIN_INSTANCE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkGetDeviceQueue",                                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkQueueSubmit",                                                                        FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkQueueWaitIdle",                                                                      FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkDeviceWaitIdle",                                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkAllocateMemory",                                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkMapMemory",                                                                          FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkUnmapMemory",                                                                        FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkFlushMappedMemoryRanges",                                            FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkInvalidateMappedMemoryRanges",                                       FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkGetDeviceMemoryCommitment",                                          FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkBindBufferMemory",                                                           FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkBindImageMemory",                                                            FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkGetBufferMemoryRequirements",                                        FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkGetImageMemoryRequirements",                                         FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkGetImageSparseMemoryRequirements",                           FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkGetPhysicalDeviceSparseImageFormatProperties",       FUNCTIONORIGIN_INSTANCE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkQueueBindSparse",                                                            FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCreateFence",                                                                        FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkDestroyFence",                                                                       FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkResetFences",                                                                        FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkGetFenceStatus",                                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkWaitForFences",                                                                      FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCreateSemaphore",                                                            FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkDestroySemaphore",                                                           FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCreateEvent",                                                                        FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkDestroyEvent",                                                                       FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkGetEventStatus",                                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkSetEvent",                                                                           FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkResetEvent",                                                                         FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCreateQueryPool",                                                            FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkGetQueryPoolResults",                                                        FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCreateBuffer",                                                                       FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkDestroyBuffer",                                                                      FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCreateBufferView",                                                           FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkDestroyBufferView",                                                          FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCreateImage",                                                                        FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkDestroyImage",                                                                       FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkGetImageSubresourceLayout",                                          FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCreateImageView",                                                            FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkDestroyImageView",                                                           FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCreatePipelineCache",                                                        FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkDestroyPipelineCache",                                                       FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCreateGraphicsPipelines",                                            FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCreateComputePipelines",                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkDestroyPipeline",                                                            FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCreatePipelineLayout",                                                       FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkDestroyPipelineLayout",                                                      FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCreateSampler",                                                                      FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkDestroySampler",                                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCreateDescriptorSetLayout",                                          FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkDestroyDescriptorSetLayout",                                         FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCreateDescriptorPool",                                                       FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkResetDescriptorPool",                                                        FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkAllocateDescriptorSets",                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkFreeDescriptorSets",                                                         FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkUpdateDescriptorSets",                                                       FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCreateFramebuffer",                                                          FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkDestroyFramebuffer",                                                         FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCreateRenderPass",                                                           FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkDestroyRenderPass",                                                          FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkGetRenderAreaGranularity",                                           FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCreateCommandPool",                                                          FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkResetCommandPool",                                                           FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkAllocateCommandBuffers",                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkFreeCommandBuffers",                                                         FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkBeginCommandBuffer",                                                         FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkEndCommandBuffer",                                                           FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkResetCommandBuffer",                                                         FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCmdBindPipeline",                                                            FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCmdSetViewport",                                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCmdSetScissor",                                                                      FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCmdSetLineWidth",                                                            FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCmdSetDepthBias",                                                            FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCmdSetBlendConstants",                                                       FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCmdSetDepthBounds",                                                          FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCmdSetStencilCompareMask",                                           FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCmdSetStencilWriteMask",                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCmdSetStencilReference",                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCmdBindDescriptorSets",                                                      FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCmdBindIndexBuffer",                                                         FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCmdBindVertexBuffers",                                                       FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCmdDraw",                                                                            FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCmdDrawIndexed",                                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCmdDrawIndirect",                                                            FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCmdDrawIndexedIndirect",                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCmdDispatch",                                                                        FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCmdDispatchIndirect",                                                        FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCmdCopyBuffer",                                                                      FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCmdCopyImage",                                                                       FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCmdBlitImage",                                                                       FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCmdCopyBufferToImage",                                                       FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCmdCopyImageToBuffer",                                                       FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCmdUpdateBuffer",                                                            FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCmdFillBuffer",                                                                      FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCmdClearColorImage",                                                         FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCmdClearDepthStencilImage",                                          FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCmdClearAttachments",                                                        FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCmdResolveImage",                                                            FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCmdSetEvent",                                                                        FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCmdResetEvent",                                                                      FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCmdWaitEvents",                                                                      FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCmdPipelineBarrier",                                                         FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCmdBeginQuery",                                                                      FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCmdEndQuery",                                                                        FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCmdResetQueryPool",                                                          FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCmdWriteTimestamp",                                                          FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCmdCopyQueryPoolResults",                                            FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCmdPushConstants",                                                           FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCmdBeginRenderPass",                                                         FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCmdNextSubpass",                                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCmdEndRenderPass",                                                           FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCmdExecuteCommands",                                                         FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkEnumerateInstanceVersion",                                           FUNCTIONORIGIN_PLATFORM));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkBindBufferMemory2",                                                          FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkBindImageMemory2",                                                           FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkGetDeviceGroupPeerMemoryFeatures",                           FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCmdSetDeviceMask",                                                           FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCmdDispatchBase",                                                            FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkEnumeratePhysicalDeviceGroups",                                      FUNCTIONORIGIN_INSTANCE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkGetImageMemoryRequirements2",                                        FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkGetBufferMemoryRequirements2",                                       FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkGetImageSparseMemoryRequirements2",                          FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkGetPhysicalDeviceFeatures2",                                         FUNCTIONORIGIN_INSTANCE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkGetPhysicalDeviceProperties2",                                       FUNCTIONORIGIN_INSTANCE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkGetPhysicalDeviceFormatProperties2",                         FUNCTIONORIGIN_INSTANCE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkGetPhysicalDeviceImageFormatProperties2",            FUNCTIONORIGIN_INSTANCE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkGetPhysicalDeviceQueueFamilyProperties2",            FUNCTIONORIGIN_INSTANCE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkGetPhysicalDeviceMemoryProperties2",                         FUNCTIONORIGIN_INSTANCE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkGetPhysicalDeviceSparseImageFormatProperties2",      FUNCTIONORIGIN_INSTANCE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkGetDeviceQueue2",                                                            FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkCreateSamplerYcbcrConversion",                                       FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkDestroySamplerYcbcrConversion",                                      FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkGetPhysicalDeviceExternalBufferProperties",          FUNCTIONORIGIN_INSTANCE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkGetPhysicalDeviceExternalFenceProperties",           FUNCTIONORIGIN_INSTANCE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkGetPhysicalDeviceExternalSemaphoreProperties",       FUNCTIONORIGIN_INSTANCE));
+       apis[VK_API_VERSION_1_1].push_back(FunctionInfo("vkGetDescriptorSetLayoutSupport",                                      FUNCTIONORIGIN_DEVICE));
+
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCreateInstance",                                                                     FUNCTIONORIGIN_PLATFORM));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkDestroyInstance",                                                            FUNCTIONORIGIN_INSTANCE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkEnumeratePhysicalDevices",                                           FUNCTIONORIGIN_INSTANCE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkGetPhysicalDeviceFeatures",                                          FUNCTIONORIGIN_INSTANCE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkGetPhysicalDeviceFormatProperties",                          FUNCTIONORIGIN_INSTANCE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkGetPhysicalDeviceImageFormatProperties",                     FUNCTIONORIGIN_INSTANCE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkGetPhysicalDeviceProperties",                                        FUNCTIONORIGIN_INSTANCE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkGetPhysicalDeviceQueueFamilyProperties",                     FUNCTIONORIGIN_INSTANCE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkGetPhysicalDeviceMemoryProperties",                          FUNCTIONORIGIN_INSTANCE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkGetInstanceProcAddr",                                                        FUNCTIONORIGIN_PLATFORM));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkGetDeviceProcAddr",                                                          FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCreateDevice",                                                                       FUNCTIONORIGIN_INSTANCE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkDestroyDevice",                                                                      FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkEnumerateInstanceExtensionProperties",                       FUNCTIONORIGIN_PLATFORM));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkEnumerateDeviceExtensionProperties",                         FUNCTIONORIGIN_INSTANCE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkEnumerateInstanceLayerProperties",                           FUNCTIONORIGIN_PLATFORM));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkEnumerateDeviceLayerProperties",                                     FUNCTIONORIGIN_INSTANCE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkGetDeviceQueue",                                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkQueueSubmit",                                                                        FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkQueueWaitIdle",                                                                      FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkDeviceWaitIdle",                                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkAllocateMemory",                                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkMapMemory",                                                                          FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkUnmapMemory",                                                                        FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkFlushMappedMemoryRanges",                                            FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkInvalidateMappedMemoryRanges",                                       FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkGetDeviceMemoryCommitment",                                          FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkBindBufferMemory",                                                           FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkBindImageMemory",                                                            FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkGetBufferMemoryRequirements",                                        FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkGetImageMemoryRequirements",                                         FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkGetImageSparseMemoryRequirements",                           FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkGetPhysicalDeviceSparseImageFormatProperties",       FUNCTIONORIGIN_INSTANCE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkQueueBindSparse",                                                            FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCreateFence",                                                                        FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkDestroyFence",                                                                       FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkResetFences",                                                                        FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkGetFenceStatus",                                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkWaitForFences",                                                                      FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCreateSemaphore",                                                            FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkDestroySemaphore",                                                           FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCreateEvent",                                                                        FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkDestroyEvent",                                                                       FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkGetEventStatus",                                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkSetEvent",                                                                           FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkResetEvent",                                                                         FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCreateQueryPool",                                                            FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkGetQueryPoolResults",                                                        FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCreateBuffer",                                                                       FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkDestroyBuffer",                                                                      FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCreateBufferView",                                                           FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkDestroyBufferView",                                                          FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCreateImage",                                                                        FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkDestroyImage",                                                                       FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkGetImageSubresourceLayout",                                          FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCreateImageView",                                                            FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkDestroyImageView",                                                           FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCreatePipelineCache",                                                        FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkDestroyPipelineCache",                                                       FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCreateGraphicsPipelines",                                            FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCreateComputePipelines",                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkDestroyPipeline",                                                            FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCreatePipelineLayout",                                                       FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkDestroyPipelineLayout",                                                      FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCreateSampler",                                                                      FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkDestroySampler",                                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCreateDescriptorSetLayout",                                          FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkDestroyDescriptorSetLayout",                                         FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCreateDescriptorPool",                                                       FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkResetDescriptorPool",                                                        FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkAllocateDescriptorSets",                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkFreeDescriptorSets",                                                         FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkUpdateDescriptorSets",                                                       FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCreateFramebuffer",                                                          FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkDestroyFramebuffer",                                                         FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCreateRenderPass",                                                           FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkDestroyRenderPass",                                                          FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkGetRenderAreaGranularity",                                           FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCreateCommandPool",                                                          FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkResetCommandPool",                                                           FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkAllocateCommandBuffers",                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkFreeCommandBuffers",                                                         FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkBeginCommandBuffer",                                                         FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkEndCommandBuffer",                                                           FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkResetCommandBuffer",                                                         FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCmdBindPipeline",                                                            FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCmdSetViewport",                                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCmdSetScissor",                                                                      FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCmdSetLineWidth",                                                            FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCmdSetDepthBias",                                                            FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCmdSetBlendConstants",                                                       FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCmdSetDepthBounds",                                                          FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCmdSetStencilCompareMask",                                           FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCmdSetStencilWriteMask",                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCmdSetStencilReference",                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCmdBindDescriptorSets",                                                      FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCmdBindIndexBuffer",                                                         FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCmdBindVertexBuffers",                                                       FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCmdDraw",                                                                            FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCmdDrawIndexed",                                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCmdDrawIndirect",                                                            FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCmdDrawIndexedIndirect",                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCmdDispatch",                                                                        FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCmdDispatchIndirect",                                                        FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCmdCopyBuffer",                                                                      FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCmdCopyImage",                                                                       FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCmdBlitImage",                                                                       FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCmdCopyBufferToImage",                                                       FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCmdCopyImageToBuffer",                                                       FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCmdUpdateBuffer",                                                            FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCmdFillBuffer",                                                                      FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCmdClearColorImage",                                                         FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCmdClearDepthStencilImage",                                          FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCmdClearAttachments",                                                        FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCmdResolveImage",                                                            FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCmdSetEvent",                                                                        FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCmdResetEvent",                                                                      FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCmdWaitEvents",                                                                      FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCmdPipelineBarrier",                                                         FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCmdBeginQuery",                                                                      FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCmdEndQuery",                                                                        FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCmdResetQueryPool",                                                          FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCmdWriteTimestamp",                                                          FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCmdCopyQueryPoolResults",                                            FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCmdPushConstants",                                                           FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCmdBeginRenderPass",                                                         FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCmdNextSubpass",                                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCmdEndRenderPass",                                                           FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCmdExecuteCommands",                                                         FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkEnumerateInstanceVersion",                                           FUNCTIONORIGIN_PLATFORM));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkBindBufferMemory2",                                                          FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkBindImageMemory2",                                                           FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkGetDeviceGroupPeerMemoryFeatures",                           FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCmdSetDeviceMask",                                                           FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCmdDispatchBase",                                                            FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkEnumeratePhysicalDeviceGroups",                                      FUNCTIONORIGIN_INSTANCE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkGetImageMemoryRequirements2",                                        FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkGetBufferMemoryRequirements2",                                       FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkGetImageSparseMemoryRequirements2",                          FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkGetPhysicalDeviceFeatures2",                                         FUNCTIONORIGIN_INSTANCE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkGetPhysicalDeviceProperties2",                                       FUNCTIONORIGIN_INSTANCE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkGetPhysicalDeviceFormatProperties2",                         FUNCTIONORIGIN_INSTANCE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkGetPhysicalDeviceImageFormatProperties2",            FUNCTIONORIGIN_INSTANCE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkGetPhysicalDeviceQueueFamilyProperties2",            FUNCTIONORIGIN_INSTANCE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkGetPhysicalDeviceMemoryProperties2",                         FUNCTIONORIGIN_INSTANCE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkGetPhysicalDeviceSparseImageFormatProperties2",      FUNCTIONORIGIN_INSTANCE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkGetDeviceQueue2",                                                            FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCreateSamplerYcbcrConversion",                                       FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkDestroySamplerYcbcrConversion",                                      FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkGetPhysicalDeviceExternalBufferProperties",          FUNCTIONORIGIN_INSTANCE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkGetPhysicalDeviceExternalFenceProperties",           FUNCTIONORIGIN_INSTANCE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkGetPhysicalDeviceExternalSemaphoreProperties",       FUNCTIONORIGIN_INSTANCE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkGetDescriptorSetLayoutSupport",                                      FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCmdDrawIndirectCount",                                                       FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCmdDrawIndexedIndirectCount",                                        FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCreateRenderPass2",                                                          FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCmdBeginRenderPass2",                                                        FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCmdNextSubpass2",                                                            FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkCmdEndRenderPass2",                                                          FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkResetQueryPool",                                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkGetSemaphoreCounterValue",                                           FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkWaitSemaphores",                                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkSignalSemaphore",                                                            FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkGetBufferDeviceAddress",                                                     FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkGetBufferOpaqueCaptureAddress",                                      FUNCTIONORIGIN_DEVICE));
+       apis[VK_API_VERSION_1_2].push_back(FunctionInfo("vkGetDeviceMemoryOpaqueCaptureAddress",                        FUNCTIONORIGIN_DEVICE));
+
+}
+
diff --git a/external/vulkancts/framework/vulkan/generated/vulkansc/vkDeviceDriverImpl.inl b/external/vulkancts/framework/vulkan/generated/vulkansc/vkDeviceDriverImpl.inl
new file mode 100644 (file)
index 0000000..5fd22b1
--- /dev/null
@@ -0,0 +1,938 @@
+/* WARNING: This is auto-generated file. Do not modify, since changes will
+ * be lost! Modify the generating script instead.
+ */
+
+PFN_vkVoidFunction DeviceDriver::getDeviceProcAddr (VkDevice device, const char* pName) const
+{
+       return m_vk.getDeviceProcAddr(device, pName);
+}
+
+void DeviceDriver::destroyDevice (VkDevice device, const VkAllocationCallbacks* pAllocator) const
+{
+       m_vk.destroyDevice(device, pAllocator);
+}
+
+void DeviceDriver::getDeviceQueue (VkDevice device, deUint32 queueFamilyIndex, deUint32 queueIndex, VkQueue* pQueue) const
+{
+       m_vk.getDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
+}
+
+VkResult DeviceDriver::queueSubmit (VkQueue queue, deUint32 submitCount, const VkSubmitInfo* pSubmits, VkFence fence) const
+{
+       return m_vk.queueSubmit(queue, submitCount, pSubmits, fence);
+}
+
+VkResult DeviceDriver::queueWaitIdle (VkQueue queue) const
+{
+       return m_vk.queueWaitIdle(queue);
+}
+
+VkResult DeviceDriver::deviceWaitIdle (VkDevice device) const
+{
+       return m_vk.deviceWaitIdle(device);
+}
+
+VkResult DeviceDriver::allocateMemory (VkDevice device, const VkMemoryAllocateInfo* pAllocateInfo, const VkAllocationCallbacks* pAllocator, VkDeviceMemory* pMemory) const
+{
+       return m_vk.allocateMemory(device, pAllocateInfo, pAllocator, pMemory);
+}
+
+VkResult DeviceDriver::mapMemory (VkDevice device, VkDeviceMemory memory, VkDeviceSize offset, VkDeviceSize size, VkMemoryMapFlags flags, void** ppData) const
+{
+       return m_vk.mapMemory(device, memory, offset, size, flags, ppData);
+}
+
+void DeviceDriver::unmapMemory (VkDevice device, VkDeviceMemory memory) const
+{
+       m_vk.unmapMemory(device, memory);
+}
+
+VkResult DeviceDriver::flushMappedMemoryRanges (VkDevice device, deUint32 memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges) const
+{
+       return m_vk.flushMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
+}
+
+VkResult DeviceDriver::invalidateMappedMemoryRanges (VkDevice device, deUint32 memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges) const
+{
+       return m_vk.invalidateMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
+}
+
+void DeviceDriver::getDeviceMemoryCommitment (VkDevice device, VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes) const
+{
+       m_vk.getDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
+}
+
+VkResult DeviceDriver::bindBufferMemory (VkDevice device, VkBuffer buffer, VkDeviceMemory memory, VkDeviceSize memoryOffset) const
+{
+       return m_vk.bindBufferMemory(device, buffer, memory, memoryOffset);
+}
+
+VkResult DeviceDriver::bindImageMemory (VkDevice device, VkImage image, VkDeviceMemory memory, VkDeviceSize memoryOffset) const
+{
+       return m_vk.bindImageMemory(device, image, memory, memoryOffset);
+}
+
+void DeviceDriver::getBufferMemoryRequirements (VkDevice device, VkBuffer buffer, VkMemoryRequirements* pMemoryRequirements) const
+{
+       m_vk.getBufferMemoryRequirements(device, buffer, pMemoryRequirements);
+}
+
+void DeviceDriver::getImageMemoryRequirements (VkDevice device, VkImage image, VkMemoryRequirements* pMemoryRequirements) const
+{
+       m_vk.getImageMemoryRequirements(device, image, pMemoryRequirements);
+}
+
+void DeviceDriver::getImageSparseMemoryRequirements (VkDevice device, VkImage image, deUint32* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements* pSparseMemoryRequirements) const
+{
+       m_vk.getImageSparseMemoryRequirements(device, image, pSparseMemoryRequirementCount, pSparseMemoryRequirements);
+}
+
+VkResult DeviceDriver::queueBindSparse (VkQueue queue, deUint32 bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence) const
+{
+       return m_vk.queueBindSparse(queue, bindInfoCount, pBindInfo, fence);
+}
+
+VkResult DeviceDriver::createFence (VkDevice device, const VkFenceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence) const
+{
+       return m_vk.createFence(device, pCreateInfo, pAllocator, pFence);
+}
+
+void DeviceDriver::destroyFence (VkDevice device, VkFence fence, const VkAllocationCallbacks* pAllocator) const
+{
+       m_vk.destroyFence(device, fence, pAllocator);
+}
+
+VkResult DeviceDriver::resetFences (VkDevice device, deUint32 fenceCount, const VkFence* pFences) const
+{
+       return m_vk.resetFences(device, fenceCount, pFences);
+}
+
+VkResult DeviceDriver::getFenceStatus (VkDevice device, VkFence fence) const
+{
+       return m_vk.getFenceStatus(device, fence);
+}
+
+VkResult DeviceDriver::waitForFences (VkDevice device, deUint32 fenceCount, const VkFence* pFences, VkBool32 waitAll, deUint64 timeout) const
+{
+       return m_vk.waitForFences(device, fenceCount, pFences, waitAll, timeout);
+}
+
+VkResult DeviceDriver::createSemaphore (VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSemaphore* pSemaphore) const
+{
+       return m_vk.createSemaphore(device, pCreateInfo, pAllocator, pSemaphore);
+}
+
+void DeviceDriver::destroySemaphore (VkDevice device, VkSemaphore semaphore, const VkAllocationCallbacks* pAllocator) const
+{
+       m_vk.destroySemaphore(device, semaphore, pAllocator);
+}
+
+VkResult DeviceDriver::createEvent (VkDevice device, const VkEventCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkEvent* pEvent) const
+{
+       return m_vk.createEvent(device, pCreateInfo, pAllocator, pEvent);
+}
+
+void DeviceDriver::destroyEvent (VkDevice device, VkEvent event, const VkAllocationCallbacks* pAllocator) const
+{
+       m_vk.destroyEvent(device, event, pAllocator);
+}
+
+VkResult DeviceDriver::getEventStatus (VkDevice device, VkEvent event) const
+{
+       return m_vk.getEventStatus(device, event);
+}
+
+VkResult DeviceDriver::setEvent (VkDevice device, VkEvent event) const
+{
+       return m_vk.setEvent(device, event);
+}
+
+VkResult DeviceDriver::resetEvent (VkDevice device, VkEvent event) const
+{
+       return m_vk.resetEvent(device, event);
+}
+
+VkResult DeviceDriver::createQueryPool (VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkQueryPool* pQueryPool) const
+{
+       return m_vk.createQueryPool(device, pCreateInfo, pAllocator, pQueryPool);
+}
+
+VkResult DeviceDriver::getQueryPoolResults (VkDevice device, VkQueryPool queryPool, deUint32 firstQuery, deUint32 queryCount, deUintptr dataSize, void* pData, VkDeviceSize stride, VkQueryResultFlags flags) const
+{
+       return m_vk.getQueryPoolResults(device, queryPool, firstQuery, queryCount, dataSize, pData, stride, flags);
+}
+
+VkResult DeviceDriver::createBuffer (VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBuffer* pBuffer) const
+{
+       return m_vk.createBuffer(device, pCreateInfo, pAllocator, pBuffer);
+}
+
+void DeviceDriver::destroyBuffer (VkDevice device, VkBuffer buffer, const VkAllocationCallbacks* pAllocator) const
+{
+       m_vk.destroyBuffer(device, buffer, pAllocator);
+}
+
+VkResult DeviceDriver::createBufferView (VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBufferView* pView) const
+{
+       return m_vk.createBufferView(device, pCreateInfo, pAllocator, pView);
+}
+
+void DeviceDriver::destroyBufferView (VkDevice device, VkBufferView bufferView, const VkAllocationCallbacks* pAllocator) const
+{
+       m_vk.destroyBufferView(device, bufferView, pAllocator);
+}
+
+VkResult DeviceDriver::createImage (VkDevice device, const VkImageCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImage* pImage) const
+{
+       return m_vk.createImage(device, pCreateInfo, pAllocator, pImage);
+}
+
+void DeviceDriver::destroyImage (VkDevice device, VkImage image, const VkAllocationCallbacks* pAllocator) const
+{
+       m_vk.destroyImage(device, image, pAllocator);
+}
+
+void DeviceDriver::getImageSubresourceLayout (VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout) const
+{
+       m_vk.getImageSubresourceLayout(device, image, pSubresource, pLayout);
+}
+
+VkResult DeviceDriver::createImageView (VkDevice device, const VkImageViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImageView* pView) const
+{
+       return m_vk.createImageView(device, pCreateInfo, pAllocator, pView);
+}
+
+void DeviceDriver::destroyImageView (VkDevice device, VkImageView imageView, const VkAllocationCallbacks* pAllocator) const
+{
+       m_vk.destroyImageView(device, imageView, pAllocator);
+}
+
+VkResult DeviceDriver::createPipelineCache (VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineCache* pPipelineCache) const
+{
+       return m_vk.createPipelineCache(device, pCreateInfo, pAllocator, pPipelineCache);
+}
+
+void DeviceDriver::destroyPipelineCache (VkDevice device, VkPipelineCache pipelineCache, const VkAllocationCallbacks* pAllocator) const
+{
+       m_vk.destroyPipelineCache(device, pipelineCache, pAllocator);
+}
+
+VkResult DeviceDriver::createGraphicsPipelines (VkDevice device, VkPipelineCache pipelineCache, deUint32 createInfoCount, const VkGraphicsPipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines) const
+{
+       return m_vk.createGraphicsPipelines(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines);
+}
+
+VkResult DeviceDriver::createComputePipelines (VkDevice device, VkPipelineCache pipelineCache, deUint32 createInfoCount, const VkComputePipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines) const
+{
+       return m_vk.createComputePipelines(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines);
+}
+
+void DeviceDriver::destroyPipeline (VkDevice device, VkPipeline pipeline, const VkAllocationCallbacks* pAllocator) const
+{
+       m_vk.destroyPipeline(device, pipeline, pAllocator);
+}
+
+VkResult DeviceDriver::createPipelineLayout (VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineLayout* pPipelineLayout) const
+{
+       return m_vk.createPipelineLayout(device, pCreateInfo, pAllocator, pPipelineLayout);
+}
+
+void DeviceDriver::destroyPipelineLayout (VkDevice device, VkPipelineLayout pipelineLayout, const VkAllocationCallbacks* pAllocator) const
+{
+       m_vk.destroyPipelineLayout(device, pipelineLayout, pAllocator);
+}
+
+VkResult DeviceDriver::createSampler (VkDevice device, const VkSamplerCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSampler* pSampler) const
+{
+       return m_vk.createSampler(device, pCreateInfo, pAllocator, pSampler);
+}
+
+void DeviceDriver::destroySampler (VkDevice device, VkSampler sampler, const VkAllocationCallbacks* pAllocator) const
+{
+       m_vk.destroySampler(device, sampler, pAllocator);
+}
+
+VkResult DeviceDriver::createDescriptorSetLayout (VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorSetLayout* pSetLayout) const
+{
+       return m_vk.createDescriptorSetLayout(device, pCreateInfo, pAllocator, pSetLayout);
+}
+
+void DeviceDriver::destroyDescriptorSetLayout (VkDevice device, VkDescriptorSetLayout descriptorSetLayout, const VkAllocationCallbacks* pAllocator) const
+{
+       m_vk.destroyDescriptorSetLayout(device, descriptorSetLayout, pAllocator);
+}
+
+VkResult DeviceDriver::createDescriptorPool (VkDevice device, const VkDescriptorPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorPool* pDescriptorPool) const
+{
+       return m_vk.createDescriptorPool(device, pCreateInfo, pAllocator, pDescriptorPool);
+}
+
+VkResult DeviceDriver::resetDescriptorPool (VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorPoolResetFlags flags) const
+{
+       return m_vk.resetDescriptorPool(device, descriptorPool, flags);
+}
+
+VkResult DeviceDriver::allocateDescriptorSets (VkDevice device, const VkDescriptorSetAllocateInfo* pAllocateInfo, VkDescriptorSet* pDescriptorSets) const
+{
+       return m_vk.allocateDescriptorSets(device, pAllocateInfo, pDescriptorSets);
+}
+
+VkResult DeviceDriver::freeDescriptorSets (VkDevice device, VkDescriptorPool descriptorPool, deUint32 descriptorSetCount, const VkDescriptorSet* pDescriptorSets) const
+{
+       return m_vk.freeDescriptorSets(device, descriptorPool, descriptorSetCount, pDescriptorSets);
+}
+
+void DeviceDriver::updateDescriptorSets (VkDevice device, deUint32 descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites, deUint32 descriptorCopyCount, const VkCopyDescriptorSet* pDescriptorCopies) const
+{
+       m_vk.updateDescriptorSets(device, descriptorWriteCount, pDescriptorWrites, descriptorCopyCount, pDescriptorCopies);
+}
+
+VkResult DeviceDriver::createFramebuffer (VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFramebuffer* pFramebuffer) const
+{
+       return m_vk.createFramebuffer(device, pCreateInfo, pAllocator, pFramebuffer);
+}
+
+void DeviceDriver::destroyFramebuffer (VkDevice device, VkFramebuffer framebuffer, const VkAllocationCallbacks* pAllocator) const
+{
+       m_vk.destroyFramebuffer(device, framebuffer, pAllocator);
+}
+
+VkResult DeviceDriver::createRenderPass (VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass) const
+{
+       return m_vk.createRenderPass(device, pCreateInfo, pAllocator, pRenderPass);
+}
+
+void DeviceDriver::destroyRenderPass (VkDevice device, VkRenderPass renderPass, const VkAllocationCallbacks* pAllocator) const
+{
+       m_vk.destroyRenderPass(device, renderPass, pAllocator);
+}
+
+void DeviceDriver::getRenderAreaGranularity (VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity) const
+{
+       m_vk.getRenderAreaGranularity(device, renderPass, pGranularity);
+}
+
+VkResult DeviceDriver::createCommandPool (VkDevice device, const VkCommandPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkCommandPool* pCommandPool) const
+{
+       return m_vk.createCommandPool(device, pCreateInfo, pAllocator, pCommandPool);
+}
+
+VkResult DeviceDriver::resetCommandPool (VkDevice device, VkCommandPool commandPool, VkCommandPoolResetFlags flags) const
+{
+       return m_vk.resetCommandPool(device, commandPool, flags);
+}
+
+VkResult DeviceDriver::allocateCommandBuffers (VkDevice device, const VkCommandBufferAllocateInfo* pAllocateInfo, VkCommandBuffer* pCommandBuffers) const
+{
+       return m_vk.allocateCommandBuffers(device, pAllocateInfo, pCommandBuffers);
+}
+
+void DeviceDriver::freeCommandBuffers (VkDevice device, VkCommandPool commandPool, deUint32 commandBufferCount, const VkCommandBuffer* pCommandBuffers) const
+{
+       m_vk.freeCommandBuffers(device, commandPool, commandBufferCount, pCommandBuffers);
+}
+
+VkResult DeviceDriver::beginCommandBuffer (VkCommandBuffer commandBuffer, const VkCommandBufferBeginInfo* pBeginInfo) const
+{
+       return m_vk.beginCommandBuffer(commandBuffer, pBeginInfo);
+}
+
+VkResult DeviceDriver::endCommandBuffer (VkCommandBuffer commandBuffer) const
+{
+       return m_vk.endCommandBuffer(commandBuffer);
+}
+
+VkResult DeviceDriver::resetCommandBuffer (VkCommandBuffer commandBuffer, VkCommandBufferResetFlags flags) const
+{
+       return m_vk.resetCommandBuffer(commandBuffer, flags);
+}
+
+void DeviceDriver::cmdBindPipeline (VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline) const
+{
+       m_vk.cmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline);
+}
+
+void DeviceDriver::cmdSetViewport (VkCommandBuffer commandBuffer, deUint32 firstViewport, deUint32 viewportCount, const VkViewport* pViewports) const
+{
+       m_vk.cmdSetViewport(commandBuffer, firstViewport, viewportCount, pViewports);
+}
+
+void DeviceDriver::cmdSetScissor (VkCommandBuffer commandBuffer, deUint32 firstScissor, deUint32 scissorCount, const VkRect2D* pScissors) const
+{
+       m_vk.cmdSetScissor(commandBuffer, firstScissor, scissorCount, pScissors);
+}
+
+void DeviceDriver::cmdSetLineWidth (VkCommandBuffer commandBuffer, float lineWidth) const
+{
+       m_vk.cmdSetLineWidth(commandBuffer, lineWidth);
+}
+
+void DeviceDriver::cmdSetDepthBias (VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor) const
+{
+       m_vk.cmdSetDepthBias(commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor);
+}
+
+void DeviceDriver::cmdSetBlendConstants (VkCommandBuffer commandBuffer, const float blendConstants[4]) const
+{
+       m_vk.cmdSetBlendConstants(commandBuffer, blendConstants);
+}
+
+void DeviceDriver::cmdSetDepthBounds (VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds) const
+{
+       m_vk.cmdSetDepthBounds(commandBuffer, minDepthBounds, maxDepthBounds);
+}
+
+void DeviceDriver::cmdSetStencilCompareMask (VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, deUint32 compareMask) const
+{
+       m_vk.cmdSetStencilCompareMask(commandBuffer, faceMask, compareMask);
+}
+
+void DeviceDriver::cmdSetStencilWriteMask (VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, deUint32 writeMask) const
+{
+       m_vk.cmdSetStencilWriteMask(commandBuffer, faceMask, writeMask);
+}
+
+void DeviceDriver::cmdSetStencilReference (VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, deUint32 reference) const
+{
+       m_vk.cmdSetStencilReference(commandBuffer, faceMask, reference);
+}
+
+void DeviceDriver::cmdBindDescriptorSets (VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, deUint32 firstSet, deUint32 descriptorSetCount, const VkDescriptorSet* pDescriptorSets, deUint32 dynamicOffsetCount, const deUint32* pDynamicOffsets) const
+{
+       m_vk.cmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, descriptorSetCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
+}
+
+void DeviceDriver::cmdBindIndexBuffer (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType) const
+{
+       m_vk.cmdBindIndexBuffer(commandBuffer, buffer, offset, indexType);
+}
+
+void DeviceDriver::cmdBindVertexBuffers (VkCommandBuffer commandBuffer, deUint32 firstBinding, deUint32 bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets) const
+{
+       m_vk.cmdBindVertexBuffers(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets);
+}
+
+void DeviceDriver::cmdDraw (VkCommandBuffer commandBuffer, deUint32 vertexCount, deUint32 instanceCount, deUint32 firstVertex, deUint32 firstInstance) const
+{
+       m_vk.cmdDraw(commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
+}
+
+void DeviceDriver::cmdDrawIndexed (VkCommandBuffer commandBuffer, deUint32 indexCount, deUint32 instanceCount, deUint32 firstIndex, deInt32 vertexOffset, deUint32 firstInstance) const
+{
+       m_vk.cmdDrawIndexed(commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
+}
+
+void DeviceDriver::cmdDrawIndirect (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, deUint32 drawCount, deUint32 stride) const
+{
+       m_vk.cmdDrawIndirect(commandBuffer, buffer, offset, drawCount, stride);
+}
+
+void DeviceDriver::cmdDrawIndexedIndirect (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, deUint32 drawCount, deUint32 stride) const
+{
+       m_vk.cmdDrawIndexedIndirect(commandBuffer, buffer, offset, drawCount, stride);
+}
+
+void DeviceDriver::cmdDispatch (VkCommandBuffer commandBuffer, deUint32 groupCountX, deUint32 groupCountY, deUint32 groupCountZ) const
+{
+       m_vk.cmdDispatch(commandBuffer, groupCountX, groupCountY, groupCountZ);
+}
+
+void DeviceDriver::cmdDispatchIndirect (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset) const
+{
+       m_vk.cmdDispatchIndirect(commandBuffer, buffer, offset);
+}
+
+void DeviceDriver::cmdCopyBuffer (VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkBuffer dstBuffer, deUint32 regionCount, const VkBufferCopy* pRegions) const
+{
+       m_vk.cmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions);
+}
+
+void DeviceDriver::cmdCopyImage (VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, deUint32 regionCount, const VkImageCopy* pRegions) const
+{
+       m_vk.cmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
+}
+
+void DeviceDriver::cmdBlitImage (VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, deUint32 regionCount, const VkImageBlit* pRegions, VkFilter filter) const
+{
+       m_vk.cmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter);
+}
+
+void DeviceDriver::cmdCopyBufferToImage (VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkImage dstImage, VkImageLayout dstImageLayout, deUint32 regionCount, const VkBufferImageCopy* pRegions) const
+{
+       m_vk.cmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions);
+}
+
+void DeviceDriver::cmdCopyImageToBuffer (VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer dstBuffer, deUint32 regionCount, const VkBufferImageCopy* pRegions) const
+{
+       m_vk.cmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions);
+}
+
+void DeviceDriver::cmdUpdateBuffer (VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize dataSize, const void* pData) const
+{
+       m_vk.cmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize, pData);
+}
+
+void DeviceDriver::cmdFillBuffer (VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize size, deUint32 data) const
+{
+       m_vk.cmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data);
+}
+
+void DeviceDriver::cmdClearColorImage (VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, deUint32 rangeCount, const VkImageSubresourceRange* pRanges) const
+{
+       m_vk.cmdClearColorImage(commandBuffer, image, imageLayout, pColor, rangeCount, pRanges);
+}
+
+void DeviceDriver::cmdClearDepthStencilImage (VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, deUint32 rangeCount, const VkImageSubresourceRange* pRanges) const
+{
+       m_vk.cmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
+}
+
+void DeviceDriver::cmdClearAttachments (VkCommandBuffer commandBuffer, deUint32 attachmentCount, const VkClearAttachment* pAttachments, deUint32 rectCount, const VkClearRect* pRects) const
+{
+       m_vk.cmdClearAttachments(commandBuffer, attachmentCount, pAttachments, rectCount, pRects);
+}
+
+void DeviceDriver::cmdResolveImage (VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, deUint32 regionCount, const VkImageResolve* pRegions) const
+{
+       m_vk.cmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
+}
+
+void DeviceDriver::cmdSetEvent (VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask) const
+{
+       m_vk.cmdSetEvent(commandBuffer, event, stageMask);
+}
+
+void DeviceDriver::cmdResetEvent (VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask) const
+{
+       m_vk.cmdResetEvent(commandBuffer, event, stageMask);
+}
+
+void DeviceDriver::cmdWaitEvents (VkCommandBuffer commandBuffer, deUint32 eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, deUint32 memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, deUint32 bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, deUint32 imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers) const
+{
+       m_vk.cmdWaitEvents(commandBuffer, eventCount, pEvents, srcStageMask, dstStageMask, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
+}
+
+void DeviceDriver::cmdPipelineBarrier (VkCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, deUint32 memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, deUint32 bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, deUint32 imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers) const
+{
+       m_vk.cmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
+}
+
+void DeviceDriver::cmdBeginQuery (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 query, VkQueryControlFlags flags) const
+{
+       m_vk.cmdBeginQuery(commandBuffer, queryPool, query, flags);
+}
+
+void DeviceDriver::cmdEndQuery (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 query) const
+{
+       m_vk.cmdEndQuery(commandBuffer, queryPool, query);
+}
+
+void DeviceDriver::cmdResetQueryPool (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 firstQuery, deUint32 queryCount) const
+{
+       m_vk.cmdResetQueryPool(commandBuffer, queryPool, firstQuery, queryCount);
+}
+
+void DeviceDriver::cmdWriteTimestamp (VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, deUint32 query) const
+{
+       m_vk.cmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, query);
+}
+
+void DeviceDriver::cmdCopyQueryPoolResults (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 firstQuery, deUint32 queryCount, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize stride, VkQueryResultFlags flags) const
+{
+       m_vk.cmdCopyQueryPoolResults(commandBuffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags);
+}
+
+void DeviceDriver::cmdPushConstants (VkCommandBuffer commandBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, deUint32 offset, deUint32 size, const void* pValues) const
+{
+       m_vk.cmdPushConstants(commandBuffer, layout, stageFlags, offset, size, pValues);
+}
+
+void DeviceDriver::cmdBeginRenderPass (VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkSubpassContents contents) const
+{
+       m_vk.cmdBeginRenderPass(commandBuffer, pRenderPassBegin, contents);
+}
+
+void DeviceDriver::cmdNextSubpass (VkCommandBuffer commandBuffer, VkSubpassContents contents) const
+{
+       m_vk.cmdNextSubpass(commandBuffer, contents);
+}
+
+void DeviceDriver::cmdEndRenderPass (VkCommandBuffer commandBuffer) const
+{
+       m_vk.cmdEndRenderPass(commandBuffer);
+}
+
+void DeviceDriver::cmdExecuteCommands (VkCommandBuffer commandBuffer, deUint32 commandBufferCount, const VkCommandBuffer* pCommandBuffers) const
+{
+       m_vk.cmdExecuteCommands(commandBuffer, commandBufferCount, pCommandBuffers);
+}
+
+void DeviceDriver::getCommandPoolMemoryConsumption (VkDevice device, VkCommandPool commandPool, VkCommandBuffer commandBuffer, VkCommandPoolMemoryConsumption* pConsumption) const
+{
+       m_vk.getCommandPoolMemoryConsumption(device, commandPool, commandBuffer, pConsumption);
+}
+
+VkResult DeviceDriver::getFaultData (VkDevice device, VkFaultQueryBehavior faultQueryBehavior, VkBool32* pUnrecordedFaults, deUint32* pFaultCount, VkFaultData* pFaults) const
+{
+       return m_vk.getFaultData(device, faultQueryBehavior, pUnrecordedFaults, pFaultCount, pFaults);
+}
+
+VkResult DeviceDriver::bindBufferMemory2 (VkDevice device, deUint32 bindInfoCount, const VkBindBufferMemoryInfo* pBindInfos) const
+{
+       return m_vk.bindBufferMemory2(device, bindInfoCount, pBindInfos);
+}
+
+VkResult DeviceDriver::bindImageMemory2 (VkDevice device, deUint32 bindInfoCount, const VkBindImageMemoryInfo* pBindInfos) const
+{
+       return m_vk.bindImageMemory2(device, bindInfoCount, pBindInfos);
+}
+
+void DeviceDriver::getDeviceGroupPeerMemoryFeatures (VkDevice device, deUint32 heapIndex, deUint32 localDeviceIndex, deUint32 remoteDeviceIndex, VkPeerMemoryFeatureFlags* pPeerMemoryFeatures) const
+{
+       m_vk.getDeviceGroupPeerMemoryFeatures(device, heapIndex, localDeviceIndex, remoteDeviceIndex, pPeerMemoryFeatures);
+}
+
+void DeviceDriver::cmdSetDeviceMask (VkCommandBuffer commandBuffer, deUint32 deviceMask) const
+{
+       m_vk.cmdSetDeviceMask(commandBuffer, deviceMask);
+}
+
+void DeviceDriver::cmdDispatchBase (VkCommandBuffer commandBuffer, deUint32 baseGroupX, deUint32 baseGroupY, deUint32 baseGroupZ, deUint32 groupCountX, deUint32 groupCountY, deUint32 groupCountZ) const
+{
+       m_vk.cmdDispatchBase(commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ);
+}
+
+void DeviceDriver::getImageMemoryRequirements2 (VkDevice device, const VkImageMemoryRequirementsInfo2* pInfo, VkMemoryRequirements2* pMemoryRequirements) const
+{
+       m_vk.getImageMemoryRequirements2(device, pInfo, pMemoryRequirements);
+}
+
+void DeviceDriver::getBufferMemoryRequirements2 (VkDevice device, const VkBufferMemoryRequirementsInfo2* pInfo, VkMemoryRequirements2* pMemoryRequirements) const
+{
+       m_vk.getBufferMemoryRequirements2(device, pInfo, pMemoryRequirements);
+}
+
+void DeviceDriver::getImageSparseMemoryRequirements2 (VkDevice device, const VkImageSparseMemoryRequirementsInfo2* pInfo, deUint32* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2* pSparseMemoryRequirements) const
+{
+       m_vk.getImageSparseMemoryRequirements2(device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements);
+}
+
+void DeviceDriver::getDeviceQueue2 (VkDevice device, const VkDeviceQueueInfo2* pQueueInfo, VkQueue* pQueue) const
+{
+       m_vk.getDeviceQueue2(device, pQueueInfo, pQueue);
+}
+
+VkResult DeviceDriver::createSamplerYcbcrConversion (VkDevice device, const VkSamplerYcbcrConversionCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSamplerYcbcrConversion* pYcbcrConversion) const
+{
+       return m_vk.createSamplerYcbcrConversion(device, pCreateInfo, pAllocator, pYcbcrConversion);
+}
+
+void DeviceDriver::destroySamplerYcbcrConversion (VkDevice device, VkSamplerYcbcrConversion ycbcrConversion, const VkAllocationCallbacks* pAllocator) const
+{
+       m_vk.destroySamplerYcbcrConversion(device, ycbcrConversion, pAllocator);
+}
+
+void DeviceDriver::getDescriptorSetLayoutSupport (VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, VkDescriptorSetLayoutSupport* pSupport) const
+{
+       m_vk.getDescriptorSetLayoutSupport(device, pCreateInfo, pSupport);
+}
+
+void DeviceDriver::cmdDrawIndirectCount (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, deUint32 maxDrawCount, deUint32 stride) const
+{
+       m_vk.cmdDrawIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
+}
+
+void DeviceDriver::cmdDrawIndexedIndirectCount (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, deUint32 maxDrawCount, deUint32 stride) const
+{
+       m_vk.cmdDrawIndexedIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
+}
+
+VkResult DeviceDriver::createRenderPass2 (VkDevice device, const VkRenderPassCreateInfo2* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass) const
+{
+       return m_vk.createRenderPass2(device, pCreateInfo, pAllocator, pRenderPass);
+}
+
+void DeviceDriver::cmdBeginRenderPass2 (VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, const VkSubpassBeginInfo* pSubpassBeginInfo) const
+{
+       m_vk.cmdBeginRenderPass2(commandBuffer, pRenderPassBegin, pSubpassBeginInfo);
+}
+
+void DeviceDriver::cmdNextSubpass2 (VkCommandBuffer commandBuffer, const VkSubpassBeginInfo* pSubpassBeginInfo, const VkSubpassEndInfo* pSubpassEndInfo) const
+{
+       m_vk.cmdNextSubpass2(commandBuffer, pSubpassBeginInfo, pSubpassEndInfo);
+}
+
+void DeviceDriver::cmdEndRenderPass2 (VkCommandBuffer commandBuffer, const VkSubpassEndInfo* pSubpassEndInfo) const
+{
+       m_vk.cmdEndRenderPass2(commandBuffer, pSubpassEndInfo);
+}
+
+void DeviceDriver::resetQueryPool (VkDevice device, VkQueryPool queryPool, deUint32 firstQuery, deUint32 queryCount) const
+{
+       m_vk.resetQueryPool(device, queryPool, firstQuery, queryCount);
+}
+
+VkResult DeviceDriver::getSemaphoreCounterValue (VkDevice device, VkSemaphore semaphore, deUint64* pValue) const
+{
+       return m_vk.getSemaphoreCounterValue(device, semaphore, pValue);
+}
+
+VkResult DeviceDriver::waitSemaphores (VkDevice device, const VkSemaphoreWaitInfo* pWaitInfo, deUint64 timeout) const
+{
+       return m_vk.waitSemaphores(device, pWaitInfo, timeout);
+}
+
+VkResult DeviceDriver::signalSemaphore (VkDevice device, const VkSemaphoreSignalInfo* pSignalInfo) const
+{
+       return m_vk.signalSemaphore(device, pSignalInfo);
+}
+
+VkDeviceAddress DeviceDriver::getBufferDeviceAddress (VkDevice device, const VkBufferDeviceAddressInfo* pInfo) const
+{
+       return m_vk.getBufferDeviceAddress(device, pInfo);
+}
+
+uint64_t DeviceDriver::getBufferOpaqueCaptureAddress (VkDevice device, const VkBufferDeviceAddressInfo* pInfo) const
+{
+       return m_vk.getBufferOpaqueCaptureAddress(device, pInfo);
+}
+
+uint64_t DeviceDriver::getDeviceMemoryOpaqueCaptureAddress (VkDevice device, const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo) const
+{
+       return m_vk.getDeviceMemoryOpaqueCaptureAddress(device, pInfo);
+}
+
+VkResult DeviceDriver::createSwapchainKHR (VkDevice device, const VkSwapchainCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSwapchainKHR* pSwapchain) const
+{
+       return m_vk.createSwapchainKHR(device, pCreateInfo, pAllocator, pSwapchain);
+}
+
+VkResult DeviceDriver::getSwapchainImagesKHR (VkDevice device, VkSwapchainKHR swapchain, deUint32* pSwapchainImageCount, VkImage* pSwapchainImages) const
+{
+       return m_vk.getSwapchainImagesKHR(device, swapchain, pSwapchainImageCount, pSwapchainImages);
+}
+
+VkResult DeviceDriver::acquireNextImageKHR (VkDevice device, VkSwapchainKHR swapchain, deUint64 timeout, VkSemaphore semaphore, VkFence fence, deUint32* pImageIndex) const
+{
+       return m_vk.acquireNextImageKHR(device, swapchain, timeout, semaphore, fence, pImageIndex);
+}
+
+VkResult DeviceDriver::queuePresentKHR (VkQueue queue, const VkPresentInfoKHR* pPresentInfo) const
+{
+       return m_vk.queuePresentKHR(queue, pPresentInfo);
+}
+
+VkResult DeviceDriver::getDeviceGroupPresentCapabilitiesKHR (VkDevice device, VkDeviceGroupPresentCapabilitiesKHR* pDeviceGroupPresentCapabilities) const
+{
+       return m_vk.getDeviceGroupPresentCapabilitiesKHR(device, pDeviceGroupPresentCapabilities);
+}
+
+VkResult DeviceDriver::getDeviceGroupSurfacePresentModesKHR (VkDevice device, VkSurfaceKHR surface, VkDeviceGroupPresentModeFlagsKHR* pModes) const
+{
+       return m_vk.getDeviceGroupSurfacePresentModesKHR(device, surface, pModes);
+}
+
+VkResult DeviceDriver::acquireNextImage2KHR (VkDevice device, const VkAcquireNextImageInfoKHR* pAcquireInfo, deUint32* pImageIndex) const
+{
+       return m_vk.acquireNextImage2KHR(device, pAcquireInfo, pImageIndex);
+}
+
+VkResult DeviceDriver::createSharedSwapchainsKHR (VkDevice device, deUint32 swapchainCount, const VkSwapchainCreateInfoKHR* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkSwapchainKHR* pSwapchains) const
+{
+       return m_vk.createSharedSwapchainsKHR(device, swapchainCount, pCreateInfos, pAllocator, pSwapchains);
+}
+
+VkResult DeviceDriver::getMemoryFdKHR (VkDevice device, const VkMemoryGetFdInfoKHR* pGetFdInfo, int* pFd) const
+{
+       return m_vk.getMemoryFdKHR(device, pGetFdInfo, pFd);
+}
+
+VkResult DeviceDriver::getMemoryFdPropertiesKHR (VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, int fd, VkMemoryFdPropertiesKHR* pMemoryFdProperties) const
+{
+       return m_vk.getMemoryFdPropertiesKHR(device, handleType, fd, pMemoryFdProperties);
+}
+
+VkResult DeviceDriver::importSemaphoreFdKHR (VkDevice device, const VkImportSemaphoreFdInfoKHR* pImportSemaphoreFdInfo) const
+{
+       return m_vk.importSemaphoreFdKHR(device, pImportSemaphoreFdInfo);
+}
+
+VkResult DeviceDriver::getSemaphoreFdKHR (VkDevice device, const VkSemaphoreGetFdInfoKHR* pGetFdInfo, int* pFd) const
+{
+       return m_vk.getSemaphoreFdKHR(device, pGetFdInfo, pFd);
+}
+
+VkResult DeviceDriver::getSwapchainStatusKHR (VkDevice device, VkSwapchainKHR swapchain) const
+{
+       return m_vk.getSwapchainStatusKHR(device, swapchain);
+}
+
+VkResult DeviceDriver::importFenceFdKHR (VkDevice device, const VkImportFenceFdInfoKHR* pImportFenceFdInfo) const
+{
+       return m_vk.importFenceFdKHR(device, pImportFenceFdInfo);
+}
+
+VkResult DeviceDriver::getFenceFdKHR (VkDevice device, const VkFenceGetFdInfoKHR* pGetFdInfo, int* pFd) const
+{
+       return m_vk.getFenceFdKHR(device, pGetFdInfo, pFd);
+}
+
+void DeviceDriver::cmdSetFragmentShadingRateKHR (VkCommandBuffer commandBuffer, const VkExtent2D* pFragmentSize, const VkFragmentShadingRateCombinerOpKHR combinerOps[2]) const
+{
+       m_vk.cmdSetFragmentShadingRateKHR(commandBuffer, pFragmentSize, combinerOps);
+}
+
+VkResult DeviceDriver::getFaultDataKHR (VkDevice device, VkFaultQueryBehavior faultQueryBehavior, VkBool32* pUnrecordedFaults, deUint32* pFaultCount, VkFaultData* pFaults) const
+{
+       return m_vk.getFaultDataKHR(device, faultQueryBehavior, pUnrecordedFaults, pFaultCount, pFaults);
+}
+
+void DeviceDriver::cmdRefreshObjectsKHR (VkCommandBuffer commandBuffer, const VkRefreshObjectListKHR* pRefreshObjects) const
+{
+       m_vk.cmdRefreshObjectsKHR(commandBuffer, pRefreshObjects);
+}
+
+void DeviceDriver::cmdCopyBuffer2KHR (VkCommandBuffer commandBuffer, const VkCopyBufferInfo2KHR* pCopyBufferInfo) const
+{
+       m_vk.cmdCopyBuffer2KHR(commandBuffer, pCopyBufferInfo);
+}
+
+void DeviceDriver::cmdCopyImage2KHR (VkCommandBuffer commandBuffer, const VkCopyImageInfo2KHR* pCopyImageInfo) const
+{
+       m_vk.cmdCopyImage2KHR(commandBuffer, pCopyImageInfo);
+}
+
+void DeviceDriver::cmdCopyBufferToImage2KHR (VkCommandBuffer commandBuffer, const VkCopyBufferToImageInfo2KHR* pCopyBufferToImageInfo) const
+{
+       m_vk.cmdCopyBufferToImage2KHR(commandBuffer, pCopyBufferToImageInfo);
+}
+
+void DeviceDriver::cmdCopyImageToBuffer2KHR (VkCommandBuffer commandBuffer, const VkCopyImageToBufferInfo2KHR* pCopyImageToBufferInfo) const
+{
+       m_vk.cmdCopyImageToBuffer2KHR(commandBuffer, pCopyImageToBufferInfo);
+}
+
+void DeviceDriver::cmdBlitImage2KHR (VkCommandBuffer commandBuffer, const VkBlitImageInfo2KHR* pBlitImageInfo) const
+{
+       m_vk.cmdBlitImage2KHR(commandBuffer, pBlitImageInfo);
+}
+
+void DeviceDriver::cmdResolveImage2KHR (VkCommandBuffer commandBuffer, const VkResolveImageInfo2KHR* pResolveImageInfo) const
+{
+       m_vk.cmdResolveImage2KHR(commandBuffer, pResolveImageInfo);
+}
+
+VkResult DeviceDriver::displayPowerControlEXT (VkDevice device, VkDisplayKHR display, const VkDisplayPowerInfoEXT* pDisplayPowerInfo) const
+{
+       return m_vk.displayPowerControlEXT(device, display, pDisplayPowerInfo);
+}
+
+VkResult DeviceDriver::registerDeviceEventEXT (VkDevice device, const VkDeviceEventInfoEXT* pDeviceEventInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence) const
+{
+       return m_vk.registerDeviceEventEXT(device, pDeviceEventInfo, pAllocator, pFence);
+}
+
+VkResult DeviceDriver::registerDisplayEventEXT (VkDevice device, VkDisplayKHR display, const VkDisplayEventInfoEXT* pDisplayEventInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence) const
+{
+       return m_vk.registerDisplayEventEXT(device, display, pDisplayEventInfo, pAllocator, pFence);
+}
+
+VkResult DeviceDriver::getSwapchainCounterEXT (VkDevice device, VkSwapchainKHR swapchain, VkSurfaceCounterFlagBitsEXT counter, deUint64* pCounterValue) const
+{
+       return m_vk.getSwapchainCounterEXT(device, swapchain, counter, pCounterValue);
+}
+
+void DeviceDriver::cmdSetDiscardRectangleEXT (VkCommandBuffer commandBuffer, deUint32 firstDiscardRectangle, deUint32 discardRectangleCount, const VkRect2D* pDiscardRectangles) const
+{
+       m_vk.cmdSetDiscardRectangleEXT(commandBuffer, firstDiscardRectangle, discardRectangleCount, pDiscardRectangles);
+}
+
+void DeviceDriver::setHdrMetadataEXT (VkDevice device, deUint32 swapchainCount, const VkSwapchainKHR* pSwapchains, const VkHdrMetadataEXT* pMetadata) const
+{
+       m_vk.setHdrMetadataEXT(device, swapchainCount, pSwapchains, pMetadata);
+}
+
+void DeviceDriver::cmdSetSampleLocationsEXT (VkCommandBuffer commandBuffer, const VkSampleLocationsInfoEXT* pSampleLocationsInfo) const
+{
+       m_vk.cmdSetSampleLocationsEXT(commandBuffer, pSampleLocationsInfo);
+}
+
+VkResult DeviceDriver::getImageDrmFormatModifierPropertiesEXT (VkDevice device, VkImage image, VkImageDrmFormatModifierPropertiesEXT* pProperties) const
+{
+       return m_vk.getImageDrmFormatModifierPropertiesEXT(device, image, pProperties);
+}
+
+VkResult DeviceDriver::getMemoryHostPointerPropertiesEXT (VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, const void* pHostPointer, VkMemoryHostPointerPropertiesEXT* pMemoryHostPointerProperties) const
+{
+       return m_vk.getMemoryHostPointerPropertiesEXT(device, handleType, pHostPointer, pMemoryHostPointerProperties);
+}
+
+VkResult DeviceDriver::getCalibratedTimestampsEXT (VkDevice device, deUint32 timestampCount, const VkCalibratedTimestampInfoEXT* pTimestampInfos, deUint64* pTimestamps, deUint64* pMaxDeviation) const
+{
+       return m_vk.getCalibratedTimestampsEXT(device, timestampCount, pTimestampInfos, pTimestamps, pMaxDeviation);
+}
+
+void DeviceDriver::cmdSetLineStippleEXT (VkCommandBuffer commandBuffer, deUint32 lineStippleFactor, deUint16 lineStipplePattern) const
+{
+       m_vk.cmdSetLineStippleEXT(commandBuffer, lineStippleFactor, lineStipplePattern);
+}
+
+void DeviceDriver::cmdSetCullModeEXT (VkCommandBuffer commandBuffer, VkCullModeFlags cullMode) const
+{
+       m_vk.cmdSetCullModeEXT(commandBuffer, cullMode);
+}
+
+void DeviceDriver::cmdSetFrontFaceEXT (VkCommandBuffer commandBuffer, VkFrontFace frontFace) const
+{
+       m_vk.cmdSetFrontFaceEXT(commandBuffer, frontFace);
+}
+
+void DeviceDriver::cmdSetPrimitiveTopologyEXT (VkCommandBuffer commandBuffer, VkPrimitiveTopology primitiveTopology) const
+{
+       m_vk.cmdSetPrimitiveTopologyEXT(commandBuffer, primitiveTopology);
+}
+
+void DeviceDriver::cmdSetViewportWithCountEXT (VkCommandBuffer commandBuffer, deUint32 viewportCount, const VkViewport* pViewports) const
+{
+       m_vk.cmdSetViewportWithCountEXT(commandBuffer, viewportCount, pViewports);
+}
+
+void DeviceDriver::cmdSetScissorWithCountEXT (VkCommandBuffer commandBuffer, deUint32 scissorCount, const VkRect2D* pScissors) const
+{
+       m_vk.cmdSetScissorWithCountEXT(commandBuffer, scissorCount, pScissors);
+}
+
+void DeviceDriver::cmdBindVertexBuffers2EXT (VkCommandBuffer commandBuffer, deUint32 firstBinding, deUint32 bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets, const VkDeviceSize* pSizes, const VkDeviceSize* pStrides) const
+{
+       m_vk.cmdBindVertexBuffers2EXT(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets, pSizes, pStrides);
+}
+
+void DeviceDriver::cmdSetDepthTestEnableEXT (VkCommandBuffer commandBuffer, VkBool32 depthTestEnable) const
+{
+       m_vk.cmdSetDepthTestEnableEXT(commandBuffer, depthTestEnable);
+}
+
+void DeviceDriver::cmdSetDepthWriteEnableEXT (VkCommandBuffer commandBuffer, VkBool32 depthWriteEnable) const
+{
+       m_vk.cmdSetDepthWriteEnableEXT(commandBuffer, depthWriteEnable);
+}
+
+void DeviceDriver::cmdSetDepthCompareOpEXT (VkCommandBuffer commandBuffer, VkCompareOp depthCompareOp) const
+{
+       m_vk.cmdSetDepthCompareOpEXT(commandBuffer, depthCompareOp);
+}
+
+void DeviceDriver::cmdSetDepthBoundsTestEnableEXT (VkCommandBuffer commandBuffer, VkBool32 depthBoundsTestEnable) const
+{
+       m_vk.cmdSetDepthBoundsTestEnableEXT(commandBuffer, depthBoundsTestEnable);
+}
+
+void DeviceDriver::cmdSetStencilTestEnableEXT (VkCommandBuffer commandBuffer, VkBool32 stencilTestEnable) const
+{
+       m_vk.cmdSetStencilTestEnableEXT(commandBuffer, stencilTestEnable);
+}
+
+void DeviceDriver::cmdSetStencilOpEXT (VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, VkStencilOp failOp, VkStencilOp passOp, VkStencilOp depthFailOp, VkCompareOp compareOp) const
+{
+       m_vk.cmdSetStencilOpEXT(commandBuffer, faceMask, failOp, passOp, depthFailOp, compareOp);
+}
diff --git a/external/vulkancts/framework/vulkan/generated/vulkansc/vkDeviceExtensions.inl b/external/vulkancts/framework/vulkan/generated/vulkansc/vkDeviceExtensions.inl
new file mode 100644 (file)
index 0000000..0f0b099
--- /dev/null
@@ -0,0 +1,74 @@
+/* WARNING: This is auto-generated file. Do not modify, since changes will
+ * be lost! Modify the generating script instead.
+ */
+static const char* s_allowedDeviceKhrExtensions[] =
+{
+       "VK_KHR_swapchain",
+       "VK_KHR_swapchain_mutable_format",
+       "VK_KHR_display_swapchain",
+       "VK_KHR_sampler_mirror_clamp_to_edge",
+       "VK_KHR_multiview",
+       "VK_KHR_device_group",
+       "VK_KHR_shader_draw_parameters",
+       "VK_KHR_maintenance1",
+       "VK_KHR_external_memory",
+       "VK_KHR_external_memory_win32",
+       "VK_KHR_external_memory_fd",
+       "VK_KHR_win32_keyed_mutex",
+       "VK_KHR_external_semaphore",
+       "VK_KHR_external_semaphore_win32",
+       "VK_KHR_external_semaphore_fd",
+       "VK_KHR_push_descriptor",
+       "VK_KHR_shader_float16_int8",
+       "VK_KHR_16bit_storage",
+       "VK_KHR_incremental_present",
+       "VK_KHR_8bit_storage",
+       "VK_KHR_descriptor_update_template",
+       "VK_KHR_create_renderpass2",
+       "VK_KHR_shared_presentable_image",
+       "VK_KHR_external_fence",
+       "VK_KHR_external_fence_win32",
+       "VK_KHR_external_fence_fd",
+       "VK_KHR_maintenance2",
+       "VK_KHR_variable_pointers",
+       "VK_KHR_dedicated_allocation",
+       "VK_KHR_storage_buffer_storage_class",
+       "VK_KHR_relaxed_block_layout",
+       "VK_KHR_get_memory_requirements2",
+       "VK_KHR_image_format_list",
+       "VK_KHR_sampler_ycbcr_conversion",
+       "VK_KHR_bind_memory2",
+       "VK_KHR_maintenance3",
+       "VK_KHR_driver_properties",
+       "VK_KHR_shader_float_controls",
+       "VK_KHR_depth_stencil_resolve",
+       "VK_KHR_draw_indirect_count",
+       "VK_KHR_shader_atomic_int64",
+       "VK_KHR_vulkan_memory_model",
+       "VK_KHR_uniform_buffer_standard_layout",
+       "VK_KHR_imageless_framebuffer",
+       "VK_KHR_shader_subgroup_extended_types",
+       "VK_EXT_sampler_filter_minmax",
+       "VK_EXT_shader_viewport_index_layer",
+       "VK_EXT_descriptor_indexing",
+       "VK_EXT_scalar_block_layout",
+       "VK_KHR_buffer_device_address",
+       "VK_EXT_host_query_reset",
+       "VK_KHR_separate_depth_stencil_layouts",
+       "VK_KHR_timeline_semaphore",
+       "VK_KHR_spirv_1_4",
+       "VK_EXT_separate_stencil_usage",
+       "VK_KHR_pipeline_executable_properties",
+       "VK_KHR_shader_clock",
+       "VK_KHR_performance_query",
+       "VK_KHR_shader_non_semantic_info",
+       "VK_KHR_copy_commands2",
+       "VK_KHR_shader_terminate_invocation",
+       "VK_KHR_ray_tracing_pipeline",
+       "VK_KHR_ray_query",
+       "VK_KHR_acceleration_structure",
+       "VK_KHR_pipeline_library",
+       "VK_KHR_deferred_host_operations",
+       "VK_KHR_fragment_shading_rate",
+};
+
diff --git a/external/vulkancts/framework/vulkan/generated/vulkansc/vkDeviceFeatures.inl b/external/vulkancts/framework/vulkan/generated/vulkansc/vkDeviceFeatures.inl
new file mode 100644 (file)
index 0000000..eba9fe0
--- /dev/null
@@ -0,0 +1,311 @@
+/* WARNING: This is auto-generated file. Do not modify, since changes will
+ * be lost! Modify the generating script instead.
+ */
+#include "vkDeviceFeatures.hpp"
+
+namespace vk
+{
+#define DECL_16BIT_STORAGE_EXTENSION_NAME "not_existent_feature"
+#define VK_EXT_4444_FORMATS_EXTENSION_NAME "VK_EXT_4444_formats"
+#define DECL_8BIT_STORAGE_EXTENSION_NAME "not_existent_feature"
+#define VK_EXT_ASTC_DECODE_MODE_EXTENSION_NAME "VK_EXT_astc_decode_mode"
+#define VK_EXT_BLEND_OPERATION_ADVANCED_EXTENSION_NAME "VK_EXT_blend_operation_advanced"
+#define DECL_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME "not_existent_feature"
+#define VK_EXT_CUSTOM_BORDER_COLOR_EXTENSION_NAME "VK_EXT_custom_border_color"
+#define VK_EXT_DEPTH_CLIP_ENABLE_EXTENSION_NAME "VK_EXT_depth_clip_enable"
+#define DECL_DESCRIPTOR_INDEXING_EXTENSION_NAME "not_existent_feature"
+#define VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME "VK_EXT_extended_dynamic_state"
+#define VK_EXT_FRAGMENT_SHADER_INTERLOCK_EXTENSION_NAME "VK_EXT_fragment_shader_interlock"
+#define VK_KHR_FRAGMENT_SHADING_RATE_EXTENSION_NAME "VK_KHR_fragment_shading_rate"
+#define DECL_HOST_QUERY_RESET_EXTENSION_NAME "not_existent_feature"
+#define DECL_IMAGELESS_FRAMEBUFFER_EXTENSION_NAME "not_existent_feature"
+#define VK_EXT_IMAGE_ROBUSTNESS_EXTENSION_NAME "VK_EXT_image_robustness"
+#define VK_EXT_INDEX_TYPE_UINT8_EXTENSION_NAME "VK_EXT_index_type_uint8"
+#define VK_EXT_LINE_RASTERIZATION_EXTENSION_NAME "VK_EXT_line_rasterization"
+#define DECL_MULTIVIEW_EXTENSION_NAME "not_existent_feature"
+#define VK_KHR_PIPELINE_IDENTIFIER_EXTENSION_NAME "VK_KHR_pipeline_identifier"
+#define DECL_PROTECTED_MEMORY_EXTENSION_NAME "not_existent_feature"
+#define VK_EXT_ROBUSTNESS_2_EXTENSION_NAME "VK_EXT_robustness2"
+#define DECL_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME "not_existent_feature"
+#define DECL_SCALAR_BLOCK_LAYOUT_EXTENSION_NAME "not_existent_feature"
+#define DECL_SEPARATE_DEPTH_STENCIL_LAYOUTS_EXTENSION_NAME "not_existent_feature"
+#define VK_EXT_SHADER_ATOMIC_FLOAT_EXTENSION_NAME "VK_EXT_shader_atomic_float"
+#define DECL_SHADER_ATOMIC_INT64_EXTENSION_NAME "not_existent_feature"
+#define VK_KHR_SHADER_CLOCK_EXTENSION_NAME "VK_KHR_shader_clock"
+#define VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME "VK_EXT_shader_demote_to_helper_invocation"
+#define DECL_SHADER_DRAW_PARAMETERS_EXTENSION_NAME "not_existent_feature"
+#define DECL_SHADER_FLOAT16_INT8_EXTENSION_NAME "not_existent_feature"
+#define VK_EXT_SHADER_IMAGE_ATOMIC_INT64_EXTENSION_NAME "VK_EXT_shader_image_atomic_int64"
+#define DECL_SHADER_SUBGROUP_EXTENDED_TYPES_EXTENSION_NAME "not_existent_feature"
+#define VK_KHR_SHADER_TERMINATE_INVOCATION_EXTENSION_NAME "VK_KHR_shader_terminate_invocation"
+#define VK_EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME "VK_EXT_subgroup_size_control"
+#define VK_EXT_TEXEL_BUFFER_ALIGNMENT_EXTENSION_NAME "VK_EXT_texel_buffer_alignment"
+#define VK_EXT_TEXTURE_COMPRESSION_ASTC_HDR_EXTENSION_NAME "VK_EXT_texture_compression_astc_hdr"
+#define DECL_TIMELINE_SEMAPHORE_EXTENSION_NAME "not_existent_feature"
+#define DECL_UNIFORM_BUFFER_STANDARD_LAYOUT_EXTENSION_NAME "not_existent_feature"
+#define DECL_VARIABLE_POINTERS_EXTENSION_NAME "not_existent_feature"
+#define VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME "VK_EXT_vertex_attribute_divisor"
+#define DECL_VULKAN_MEMORY_MODEL_EXTENSION_NAME "not_existent_feature"
+#define DECL_VULKAN_SC_1_0_EXTENSION_NAME "not_existent_feature"
+#define VK_EXT_YCBCR_IMAGE_ARRAYS_EXTENSION_NAME "VK_EXT_ycbcr_image_arrays"
+
+
+template<> void initFeatureFromBlob<VkPhysicalDevice16BitStorageFeatures>(VkPhysicalDevice16BitStorageFeatures& featureType, const AllFeaturesBlobs& allFeaturesBlobs)
+{
+       featureType.storageBuffer16BitAccess = allFeaturesBlobs.vk11.storageBuffer16BitAccess;
+       featureType.uniformAndStorageBuffer16BitAccess = allFeaturesBlobs.vk11.uniformAndStorageBuffer16BitAccess;
+       featureType.storagePushConstant16 = allFeaturesBlobs.vk11.storagePushConstant16;
+       featureType.storageInputOutput16 = allFeaturesBlobs.vk11.storageInputOutput16;
+}
+template<> void initFeatureFromBlob<VkPhysicalDeviceMultiviewFeatures>(VkPhysicalDeviceMultiviewFeatures& featureType, const AllFeaturesBlobs& allFeaturesBlobs)
+{
+       featureType.multiview = allFeaturesBlobs.vk11.multiview;
+       featureType.multiviewGeometryShader = allFeaturesBlobs.vk11.multiviewGeometryShader;
+       featureType.multiviewTessellationShader = allFeaturesBlobs.vk11.multiviewTessellationShader;
+}
+template<> void initFeatureFromBlob<VkPhysicalDeviceVariablePointersFeatures>(VkPhysicalDeviceVariablePointersFeatures& featureType, const AllFeaturesBlobs& allFeaturesBlobs)
+{
+       featureType.variablePointersStorageBuffer = allFeaturesBlobs.vk11.variablePointersStorageBuffer;
+       featureType.variablePointers = allFeaturesBlobs.vk11.variablePointers;
+}
+template<> void initFeatureFromBlob<VkPhysicalDeviceProtectedMemoryFeatures>(VkPhysicalDeviceProtectedMemoryFeatures& featureType, const AllFeaturesBlobs& allFeaturesBlobs)
+{
+       featureType.protectedMemory = allFeaturesBlobs.vk11.protectedMemory;
+}
+template<> void initFeatureFromBlob<VkPhysicalDeviceSamplerYcbcrConversionFeatures>(VkPhysicalDeviceSamplerYcbcrConversionFeatures& featureType, const AllFeaturesBlobs& allFeaturesBlobs)
+{
+       featureType.samplerYcbcrConversion = allFeaturesBlobs.vk11.samplerYcbcrConversion;
+}
+template<> void initFeatureFromBlob<VkPhysicalDeviceShaderDrawParametersFeatures>(VkPhysicalDeviceShaderDrawParametersFeatures& featureType, const AllFeaturesBlobs& allFeaturesBlobs)
+{
+       featureType.shaderDrawParameters = allFeaturesBlobs.vk11.shaderDrawParameters;
+}
+template<> void initFeatureFromBlob<VkPhysicalDevice8BitStorageFeatures>(VkPhysicalDevice8BitStorageFeatures& featureType, const AllFeaturesBlobs& allFeaturesBlobs)
+{
+       featureType.storageBuffer8BitAccess = allFeaturesBlobs.vk12.storageBuffer8BitAccess;
+       featureType.uniformAndStorageBuffer8BitAccess = allFeaturesBlobs.vk12.uniformAndStorageBuffer8BitAccess;
+       featureType.storagePushConstant8 = allFeaturesBlobs.vk12.storagePushConstant8;
+}
+template<> void initFeatureFromBlob<VkPhysicalDeviceShaderAtomicInt64Features>(VkPhysicalDeviceShaderAtomicInt64Features& featureType, const AllFeaturesBlobs& allFeaturesBlobs)
+{
+       featureType.shaderBufferInt64Atomics = allFeaturesBlobs.vk12.shaderBufferInt64Atomics;
+       featureType.shaderSharedInt64Atomics = allFeaturesBlobs.vk12.shaderSharedInt64Atomics;
+}
+template<> void initFeatureFromBlob<VkPhysicalDeviceShaderFloat16Int8Features>(VkPhysicalDeviceShaderFloat16Int8Features& featureType, const AllFeaturesBlobs& allFeaturesBlobs)
+{
+       featureType.shaderFloat16 = allFeaturesBlobs.vk12.shaderFloat16;
+       featureType.shaderInt8 = allFeaturesBlobs.vk12.shaderInt8;
+}
+template<> void initFeatureFromBlob<VkPhysicalDeviceDescriptorIndexingFeatures>(VkPhysicalDeviceDescriptorIndexingFeatures& featureType, const AllFeaturesBlobs& allFeaturesBlobs)
+{
+       featureType.shaderInputAttachmentArrayDynamicIndexing = allFeaturesBlobs.vk12.shaderInputAttachmentArrayDynamicIndexing;
+       featureType.shaderUniformTexelBufferArrayDynamicIndexing = allFeaturesBlobs.vk12.shaderUniformTexelBufferArrayDynamicIndexing;
+       featureType.shaderStorageTexelBufferArrayDynamicIndexing = allFeaturesBlobs.vk12.shaderStorageTexelBufferArrayDynamicIndexing;
+       featureType.shaderUniformBufferArrayNonUniformIndexing = allFeaturesBlobs.vk12.shaderUniformBufferArrayNonUniformIndexing;
+       featureType.shaderSampledImageArrayNonUniformIndexing = allFeaturesBlobs.vk12.shaderSampledImageArrayNonUniformIndexing;
+       featureType.shaderStorageBufferArrayNonUniformIndexing = allFeaturesBlobs.vk12.shaderStorageBufferArrayNonUniformIndexing;
+       featureType.shaderStorageImageArrayNonUniformIndexing = allFeaturesBlobs.vk12.shaderStorageImageArrayNonUniformIndexing;
+       featureType.shaderInputAttachmentArrayNonUniformIndexing = allFeaturesBlobs.vk12.shaderInputAttachmentArrayNonUniformIndexing;
+       featureType.shaderUniformTexelBufferArrayNonUniformIndexing = allFeaturesBlobs.vk12.shaderUniformTexelBufferArrayNonUniformIndexing;
+       featureType.shaderStorageTexelBufferArrayNonUniformIndexing = allFeaturesBlobs.vk12.shaderStorageTexelBufferArrayNonUniformIndexing;
+       featureType.descriptorBindingUniformBufferUpdateAfterBind = allFeaturesBlobs.vk12.descriptorBindingUniformBufferUpdateAfterBind;
+       featureType.descriptorBindingSampledImageUpdateAfterBind = allFeaturesBlobs.vk12.descriptorBindingSampledImageUpdateAfterBind;
+       featureType.descriptorBindingStorageImageUpdateAfterBind = allFeaturesBlobs.vk12.descriptorBindingStorageImageUpdateAfterBind;
+       featureType.descriptorBindingStorageBufferUpdateAfterBind = allFeaturesBlobs.vk12.descriptorBindingStorageBufferUpdateAfterBind;
+       featureType.descriptorBindingUniformTexelBufferUpdateAfterBind = allFeaturesBlobs.vk12.descriptorBindingUniformTexelBufferUpdateAfterBind;
+       featureType.descriptorBindingStorageTexelBufferUpdateAfterBind = allFeaturesBlobs.vk12.descriptorBindingStorageTexelBufferUpdateAfterBind;
+       featureType.descriptorBindingUpdateUnusedWhilePending = allFeaturesBlobs.vk12.descriptorBindingUpdateUnusedWhilePending;
+       featureType.descriptorBindingPartiallyBound = allFeaturesBlobs.vk12.descriptorBindingPartiallyBound;
+       featureType.descriptorBindingVariableDescriptorCount = allFeaturesBlobs.vk12.descriptorBindingVariableDescriptorCount;
+       featureType.runtimeDescriptorArray = allFeaturesBlobs.vk12.runtimeDescriptorArray;
+}
+template<> void initFeatureFromBlob<VkPhysicalDeviceScalarBlockLayoutFeatures>(VkPhysicalDeviceScalarBlockLayoutFeatures& featureType, const AllFeaturesBlobs& allFeaturesBlobs)
+{
+       featureType.scalarBlockLayout = allFeaturesBlobs.vk12.scalarBlockLayout;
+}
+template<> void initFeatureFromBlob<VkPhysicalDeviceVulkanMemoryModelFeatures>(VkPhysicalDeviceVulkanMemoryModelFeatures& featureType, const AllFeaturesBlobs& allFeaturesBlobs)
+{
+       featureType.vulkanMemoryModel = allFeaturesBlobs.vk12.vulkanMemoryModel;
+       featureType.vulkanMemoryModelDeviceScope = allFeaturesBlobs.vk12.vulkanMemoryModelDeviceScope;
+       featureType.vulkanMemoryModelAvailabilityVisibilityChains = allFeaturesBlobs.vk12.vulkanMemoryModelAvailabilityVisibilityChains;
+}
+template<> void initFeatureFromBlob<VkPhysicalDeviceImagelessFramebufferFeatures>(VkPhysicalDeviceImagelessFramebufferFeatures& featureType, const AllFeaturesBlobs& allFeaturesBlobs)
+{
+       featureType.imagelessFramebuffer = allFeaturesBlobs.vk12.imagelessFramebuffer;
+}
+template<> void initFeatureFromBlob<VkPhysicalDeviceUniformBufferStandardLayoutFeatures>(VkPhysicalDeviceUniformBufferStandardLayoutFeatures& featureType, const AllFeaturesBlobs& allFeaturesBlobs)
+{
+       featureType.uniformBufferStandardLayout = allFeaturesBlobs.vk12.uniformBufferStandardLayout;
+}
+template<> void initFeatureFromBlob<VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures>(VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures& featureType, const AllFeaturesBlobs& allFeaturesBlobs)
+{
+       featureType.shaderSubgroupExtendedTypes = allFeaturesBlobs.vk12.shaderSubgroupExtendedTypes;
+}
+template<> void initFeatureFromBlob<VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures>(VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures& featureType, const AllFeaturesBlobs& allFeaturesBlobs)
+{
+       featureType.separateDepthStencilLayouts = allFeaturesBlobs.vk12.separateDepthStencilLayouts;
+}
+template<> void initFeatureFromBlob<VkPhysicalDeviceHostQueryResetFeatures>(VkPhysicalDeviceHostQueryResetFeatures& featureType, const AllFeaturesBlobs& allFeaturesBlobs)
+{
+       featureType.hostQueryReset = allFeaturesBlobs.vk12.hostQueryReset;
+}
+template<> void initFeatureFromBlob<VkPhysicalDeviceTimelineSemaphoreFeatures>(VkPhysicalDeviceTimelineSemaphoreFeatures& featureType, const AllFeaturesBlobs& allFeaturesBlobs)
+{
+       featureType.timelineSemaphore = allFeaturesBlobs.vk12.timelineSemaphore;
+}
+template<> void initFeatureFromBlob<VkPhysicalDeviceBufferDeviceAddressFeatures>(VkPhysicalDeviceBufferDeviceAddressFeatures& featureType, const AllFeaturesBlobs& allFeaturesBlobs)
+{
+       featureType.bufferDeviceAddress = allFeaturesBlobs.vk12.bufferDeviceAddress;
+       featureType.bufferDeviceAddressCaptureReplay = allFeaturesBlobs.vk12.bufferDeviceAddressCaptureReplay;
+       featureType.bufferDeviceAddressMultiDevice = allFeaturesBlobs.vk12.bufferDeviceAddressMultiDevice;
+}
+
+// generic template is not enough for some compilers
+template<> void initFeatureFromBlob<VkPhysicalDeviceVulkanSC10Features>(VkPhysicalDeviceVulkanSC10Features&, const AllFeaturesBlobs&) {}
+template<> void initFeatureFromBlob<VkPhysicalDevicePipelineIdentifierFeatures>(VkPhysicalDevicePipelineIdentifierFeatures&, const AllFeaturesBlobs&) {}
+template<> void initFeatureFromBlob<VkPhysicalDeviceShaderClockFeaturesKHR>(VkPhysicalDeviceShaderClockFeaturesKHR&, const AllFeaturesBlobs&) {}
+template<> void initFeatureFromBlob<VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR>(VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR&, const AllFeaturesBlobs&) {}
+template<> void initFeatureFromBlob<VkPhysicalDeviceFragmentShadingRateFeaturesKHR>(VkPhysicalDeviceFragmentShadingRateFeaturesKHR&, const AllFeaturesBlobs&) {}
+template<> void initFeatureFromBlob<VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT>(VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT&, const AllFeaturesBlobs&) {}
+template<> void initFeatureFromBlob<VkPhysicalDeviceASTCDecodeFeaturesEXT>(VkPhysicalDeviceASTCDecodeFeaturesEXT&, const AllFeaturesBlobs&) {}
+template<> void initFeatureFromBlob<VkPhysicalDeviceDepthClipEnableFeaturesEXT>(VkPhysicalDeviceDepthClipEnableFeaturesEXT&, const AllFeaturesBlobs&) {}
+template<> void initFeatureFromBlob<VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT>(VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT&, const AllFeaturesBlobs&) {}
+template<> void initFeatureFromBlob<VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT>(VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT&, const AllFeaturesBlobs&) {}
+template<> void initFeatureFromBlob<VkPhysicalDeviceSubgroupSizeControlFeaturesEXT>(VkPhysicalDeviceSubgroupSizeControlFeaturesEXT&, const AllFeaturesBlobs&) {}
+template<> void initFeatureFromBlob<VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT>(VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT&, const AllFeaturesBlobs&) {}
+template<> void initFeatureFromBlob<VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT>(VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT&, const AllFeaturesBlobs&) {}
+template<> void initFeatureFromBlob<VkPhysicalDeviceYcbcrImageArraysFeaturesEXT>(VkPhysicalDeviceYcbcrImageArraysFeaturesEXT&, const AllFeaturesBlobs&) {}
+template<> void initFeatureFromBlob<VkPhysicalDeviceLineRasterizationFeaturesEXT>(VkPhysicalDeviceLineRasterizationFeaturesEXT&, const AllFeaturesBlobs&) {}
+template<> void initFeatureFromBlob<VkPhysicalDeviceShaderAtomicFloatFeaturesEXT>(VkPhysicalDeviceShaderAtomicFloatFeaturesEXT&, const AllFeaturesBlobs&) {}
+template<> void initFeatureFromBlob<VkPhysicalDeviceIndexTypeUint8FeaturesEXT>(VkPhysicalDeviceIndexTypeUint8FeaturesEXT&, const AllFeaturesBlobs&) {}
+template<> void initFeatureFromBlob<VkPhysicalDeviceExtendedDynamicStateFeaturesEXT>(VkPhysicalDeviceExtendedDynamicStateFeaturesEXT&, const AllFeaturesBlobs&) {}
+template<> void initFeatureFromBlob<VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT>(VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT&, const AllFeaturesBlobs&) {}
+template<> void initFeatureFromBlob<VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT>(VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT&, const AllFeaturesBlobs&) {}
+template<> void initFeatureFromBlob<VkPhysicalDeviceRobustness2FeaturesEXT>(VkPhysicalDeviceRobustness2FeaturesEXT&, const AllFeaturesBlobs&) {}
+template<> void initFeatureFromBlob<VkPhysicalDeviceCustomBorderColorFeaturesEXT>(VkPhysicalDeviceCustomBorderColorFeaturesEXT&, const AllFeaturesBlobs&) {}
+template<> void initFeatureFromBlob<VkPhysicalDeviceImageRobustnessFeaturesEXT>(VkPhysicalDeviceImageRobustnessFeaturesEXT&, const AllFeaturesBlobs&) {}
+template<> void initFeatureFromBlob<VkPhysicalDevice4444FormatsFeaturesEXT>(VkPhysicalDevice4444FormatsFeaturesEXT&, const AllFeaturesBlobs&) {}
+
+
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDevice16BitStorageFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES, DECL_16BIT_STORAGE_EXTENSION_NAME, 0, 43}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDevice4444FormatsFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT, VK_EXT_4444_FORMATS_EXTENSION_NAME, VK_EXT_4444_FORMATS_SPEC_VERSION, 42}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDevice8BitStorageFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES, DECL_8BIT_STORAGE_EXTENSION_NAME, 0, 41}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceASTCDecodeFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT, VK_EXT_ASTC_DECODE_MODE_EXTENSION_NAME, VK_EXT_ASTC_DECODE_MODE_SPEC_VERSION, 40}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT, VK_EXT_BLEND_OPERATION_ADVANCED_EXTENSION_NAME, VK_EXT_BLEND_OPERATION_ADVANCED_SPEC_VERSION, 39}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceBufferDeviceAddressFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES, DECL_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME, 0, 38}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceCustomBorderColorFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT, VK_EXT_CUSTOM_BORDER_COLOR_EXTENSION_NAME, VK_EXT_CUSTOM_BORDER_COLOR_SPEC_VERSION, 37}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceDepthClipEnableFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT, VK_EXT_DEPTH_CLIP_ENABLE_EXTENSION_NAME, VK_EXT_DEPTH_CLIP_ENABLE_SPEC_VERSION, 36}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceDescriptorIndexingFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES, DECL_DESCRIPTOR_INDEXING_EXTENSION_NAME, 0, 35}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceExtendedDynamicStateFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT, VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME, VK_EXT_EXTENDED_DYNAMIC_STATE_SPEC_VERSION, 34}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT, VK_EXT_FRAGMENT_SHADER_INTERLOCK_EXTENSION_NAME, VK_EXT_FRAGMENT_SHADER_INTERLOCK_SPEC_VERSION, 33}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceFragmentShadingRateFeaturesKHR>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_FEATURES_KHR, VK_KHR_FRAGMENT_SHADING_RATE_EXTENSION_NAME, VK_KHR_FRAGMENT_SHADING_RATE_SPEC_VERSION, 32}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceHostQueryResetFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES, DECL_HOST_QUERY_RESET_EXTENSION_NAME, 0, 31}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceImagelessFramebufferFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES, DECL_IMAGELESS_FRAMEBUFFER_EXTENSION_NAME, 0, 30}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceImageRobustnessFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT, VK_EXT_IMAGE_ROBUSTNESS_EXTENSION_NAME, VK_EXT_IMAGE_ROBUSTNESS_SPEC_VERSION, 29}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceIndexTypeUint8FeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT, VK_EXT_INDEX_TYPE_UINT8_EXTENSION_NAME, VK_EXT_INDEX_TYPE_UINT8_SPEC_VERSION, 28}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceLineRasterizationFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT, VK_EXT_LINE_RASTERIZATION_EXTENSION_NAME, VK_EXT_LINE_RASTERIZATION_SPEC_VERSION, 27}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceMultiviewFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES, DECL_MULTIVIEW_EXTENSION_NAME, 0, 26}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDevicePipelineIdentifierFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_IDENTIFIER_FEATURES, VK_KHR_PIPELINE_IDENTIFIER_EXTENSION_NAME, VK_KHR_PIPELINE_IDENTIFIER_SPEC_VERSION, 25}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceProtectedMemoryFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES, DECL_PROTECTED_MEMORY_EXTENSION_NAME, 0, 24}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceRobustness2FeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT, VK_EXT_ROBUSTNESS_2_EXTENSION_NAME, VK_EXT_ROBUSTNESS_2_SPEC_VERSION, 23}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceSamplerYcbcrConversionFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES, DECL_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME, 0, 22}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceScalarBlockLayoutFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES, DECL_SCALAR_BLOCK_LAYOUT_EXTENSION_NAME, 0, 21}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES, DECL_SEPARATE_DEPTH_STENCIL_LAYOUTS_EXTENSION_NAME, 0, 20}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderAtomicFloatFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT, VK_EXT_SHADER_ATOMIC_FLOAT_EXTENSION_NAME, VK_EXT_SHADER_ATOMIC_FLOAT_SPEC_VERSION, 19}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderAtomicInt64Features>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES, DECL_SHADER_ATOMIC_INT64_EXTENSION_NAME, 0, 18}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderClockFeaturesKHR>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR, VK_KHR_SHADER_CLOCK_EXTENSION_NAME, VK_KHR_SHADER_CLOCK_SPEC_VERSION, 17}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT, VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME, VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_SPEC_VERSION, 16}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderDrawParametersFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES, DECL_SHADER_DRAW_PARAMETERS_EXTENSION_NAME, 0, 15}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderFloat16Int8Features>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES, DECL_SHADER_FLOAT16_INT8_EXTENSION_NAME, 0, 14}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT, VK_EXT_SHADER_IMAGE_ATOMIC_INT64_EXTENSION_NAME, VK_EXT_SHADER_IMAGE_ATOMIC_INT64_SPEC_VERSION, 13}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES, DECL_SHADER_SUBGROUP_EXTENDED_TYPES_EXTENSION_NAME, 0, 12}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES_KHR, VK_KHR_SHADER_TERMINATE_INVOCATION_EXTENSION_NAME, VK_KHR_SHADER_TERMINATE_INVOCATION_SPEC_VERSION, 11}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceSubgroupSizeControlFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT, VK_EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME, VK_EXT_SUBGROUP_SIZE_CONTROL_SPEC_VERSION, 10}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT, VK_EXT_TEXEL_BUFFER_ALIGNMENT_EXTENSION_NAME, VK_EXT_TEXEL_BUFFER_ALIGNMENT_SPEC_VERSION, 9}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT, VK_EXT_TEXTURE_COMPRESSION_ASTC_HDR_EXTENSION_NAME, VK_EXT_TEXTURE_COMPRESSION_ASTC_HDR_SPEC_VERSION, 8}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceTimelineSemaphoreFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES, DECL_TIMELINE_SEMAPHORE_EXTENSION_NAME, 0, 7}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceUniformBufferStandardLayoutFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES, DECL_UNIFORM_BUFFER_STANDARD_LAYOUT_EXTENSION_NAME, 0, 6}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceVariablePointersFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES, DECL_VARIABLE_POINTERS_EXTENSION_NAME, 0, 5}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT, VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME, VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_SPEC_VERSION, 4}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceVulkanMemoryModelFeatures>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES, DECL_VULKAN_MEMORY_MODEL_EXTENSION_NAME, 0, 3}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceVulkanSC10Features>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_SC_1_0_FEATURES, DECL_VULKAN_SC_1_0_EXTENSION_NAME, 0, 2}; }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceYcbcrImageArraysFeaturesEXT>(void) { return FeatureDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT, VK_EXT_YCBCR_IMAGE_ARRAYS_EXTENSION_NAME, VK_EXT_YCBCR_IMAGE_ARRAYS_SPEC_VERSION, 1}; }
+
+
+static const FeatureStructCreationData featureStructCreationArray[] =
+{
+       { createFeatureStructWrapper<VkPhysicalDevice16BitStorageFeatures>, DECL_16BIT_STORAGE_EXTENSION_NAME, 0 },
+       { createFeatureStructWrapper<VkPhysicalDevice4444FormatsFeaturesEXT>, VK_EXT_4444_FORMATS_EXTENSION_NAME, VK_EXT_4444_FORMATS_SPEC_VERSION },
+       { createFeatureStructWrapper<VkPhysicalDevice8BitStorageFeatures>, DECL_8BIT_STORAGE_EXTENSION_NAME, 0 },
+       { createFeatureStructWrapper<VkPhysicalDeviceASTCDecodeFeaturesEXT>, VK_EXT_ASTC_DECODE_MODE_EXTENSION_NAME, VK_EXT_ASTC_DECODE_MODE_SPEC_VERSION },
+       { createFeatureStructWrapper<VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT>, VK_EXT_BLEND_OPERATION_ADVANCED_EXTENSION_NAME, VK_EXT_BLEND_OPERATION_ADVANCED_SPEC_VERSION },
+       { createFeatureStructWrapper<VkPhysicalDeviceBufferDeviceAddressFeatures>, DECL_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME, 0 },
+       { createFeatureStructWrapper<VkPhysicalDeviceCustomBorderColorFeaturesEXT>, VK_EXT_CUSTOM_BORDER_COLOR_EXTENSION_NAME, VK_EXT_CUSTOM_BORDER_COLOR_SPEC_VERSION },
+       { createFeatureStructWrapper<VkPhysicalDeviceDepthClipEnableFeaturesEXT>, VK_EXT_DEPTH_CLIP_ENABLE_EXTENSION_NAME, VK_EXT_DEPTH_CLIP_ENABLE_SPEC_VERSION },
+       { createFeatureStructWrapper<VkPhysicalDeviceDescriptorIndexingFeatures>, DECL_DESCRIPTOR_INDEXING_EXTENSION_NAME, 0 },
+       { createFeatureStructWrapper<VkPhysicalDeviceExtendedDynamicStateFeaturesEXT>, VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME, VK_EXT_EXTENDED_DYNAMIC_STATE_SPEC_VERSION },
+       { createFeatureStructWrapper<VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT>, VK_EXT_FRAGMENT_SHADER_INTERLOCK_EXTENSION_NAME, VK_EXT_FRAGMENT_SHADER_INTERLOCK_SPEC_VERSION },
+       { createFeatureStructWrapper<VkPhysicalDeviceFragmentShadingRateFeaturesKHR>, VK_KHR_FRAGMENT_SHADING_RATE_EXTENSION_NAME, VK_KHR_FRAGMENT_SHADING_RATE_SPEC_VERSION },
+       { createFeatureStructWrapper<VkPhysicalDeviceHostQueryResetFeatures>, DECL_HOST_QUERY_RESET_EXTENSION_NAME, 0 },
+       { createFeatureStructWrapper<VkPhysicalDeviceImagelessFramebufferFeatures>, DECL_IMAGELESS_FRAMEBUFFER_EXTENSION_NAME, 0 },
+       { createFeatureStructWrapper<VkPhysicalDeviceImageRobustnessFeaturesEXT>, VK_EXT_IMAGE_ROBUSTNESS_EXTENSION_NAME, VK_EXT_IMAGE_ROBUSTNESS_SPEC_VERSION },
+       { createFeatureStructWrapper<VkPhysicalDeviceIndexTypeUint8FeaturesEXT>, VK_EXT_INDEX_TYPE_UINT8_EXTENSION_NAME, VK_EXT_INDEX_TYPE_UINT8_SPEC_VERSION },
+       { createFeatureStructWrapper<VkPhysicalDeviceLineRasterizationFeaturesEXT>, VK_EXT_LINE_RASTERIZATION_EXTENSION_NAME, VK_EXT_LINE_RASTERIZATION_SPEC_VERSION },
+       { createFeatureStructWrapper<VkPhysicalDeviceMultiviewFeatures>, DECL_MULTIVIEW_EXTENSION_NAME, 0 },
+       { createFeatureStructWrapper<VkPhysicalDevicePipelineIdentifierFeatures>, VK_KHR_PIPELINE_IDENTIFIER_EXTENSION_NAME, VK_KHR_PIPELINE_IDENTIFIER_SPEC_VERSION },
+       { createFeatureStructWrapper<VkPhysicalDeviceProtectedMemoryFeatures>, DECL_PROTECTED_MEMORY_EXTENSION_NAME, 0 },
+       { createFeatureStructWrapper<VkPhysicalDeviceRobustness2FeaturesEXT>, VK_EXT_ROBUSTNESS_2_EXTENSION_NAME, VK_EXT_ROBUSTNESS_2_SPEC_VERSION },
+       { createFeatureStructWrapper<VkPhysicalDeviceSamplerYcbcrConversionFeatures>, DECL_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME, 0 },
+       { createFeatureStructWrapper<VkPhysicalDeviceScalarBlockLayoutFeatures>, DECL_SCALAR_BLOCK_LAYOUT_EXTENSION_NAME, 0 },
+       { createFeatureStructWrapper<VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures>, DECL_SEPARATE_DEPTH_STENCIL_LAYOUTS_EXTENSION_NAME, 0 },
+       { createFeatureStructWrapper<VkPhysicalDeviceShaderAtomicFloatFeaturesEXT>, VK_EXT_SHADER_ATOMIC_FLOAT_EXTENSION_NAME, VK_EXT_SHADER_ATOMIC_FLOAT_SPEC_VERSION },
+       { createFeatureStructWrapper<VkPhysicalDeviceShaderAtomicInt64Features>, DECL_SHADER_ATOMIC_INT64_EXTENSION_NAME, 0 },
+       { createFeatureStructWrapper<VkPhysicalDeviceShaderClockFeaturesKHR>, VK_KHR_SHADER_CLOCK_EXTENSION_NAME, VK_KHR_SHADER_CLOCK_SPEC_VERSION },
+       { createFeatureStructWrapper<VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT>, VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME, VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_SPEC_VERSION },
+       { createFeatureStructWrapper<VkPhysicalDeviceShaderDrawParametersFeatures>, DECL_SHADER_DRAW_PARAMETERS_EXTENSION_NAME, 0 },
+       { createFeatureStructWrapper<VkPhysicalDeviceShaderFloat16Int8Features>, DECL_SHADER_FLOAT16_INT8_EXTENSION_NAME, 0 },
+       { createFeatureStructWrapper<VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT>, VK_EXT_SHADER_IMAGE_ATOMIC_INT64_EXTENSION_NAME, VK_EXT_SHADER_IMAGE_ATOMIC_INT64_SPEC_VERSION },
+       { createFeatureStructWrapper<VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures>, DECL_SHADER_SUBGROUP_EXTENDED_TYPES_EXTENSION_NAME, 0 },
+       { createFeatureStructWrapper<VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR>, VK_KHR_SHADER_TERMINATE_INVOCATION_EXTENSION_NAME, VK_KHR_SHADER_TERMINATE_INVOCATION_SPEC_VERSION },
+       { createFeatureStructWrapper<VkPhysicalDeviceSubgroupSizeControlFeaturesEXT>, VK_EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME, VK_EXT_SUBGROUP_SIZE_CONTROL_SPEC_VERSION },
+       { createFeatureStructWrapper<VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT>, VK_EXT_TEXEL_BUFFER_ALIGNMENT_EXTENSION_NAME, VK_EXT_TEXEL_BUFFER_ALIGNMENT_SPEC_VERSION },
+       { createFeatureStructWrapper<VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT>, VK_EXT_TEXTURE_COMPRESSION_ASTC_HDR_EXTENSION_NAME, VK_EXT_TEXTURE_COMPRESSION_ASTC_HDR_SPEC_VERSION },
+       { createFeatureStructWrapper<VkPhysicalDeviceTimelineSemaphoreFeatures>, DECL_TIMELINE_SEMAPHORE_EXTENSION_NAME, 0 },
+       { createFeatureStructWrapper<VkPhysicalDeviceUniformBufferStandardLayoutFeatures>, DECL_UNIFORM_BUFFER_STANDARD_LAYOUT_EXTENSION_NAME, 0 },
+       { createFeatureStructWrapper<VkPhysicalDeviceVariablePointersFeatures>, DECL_VARIABLE_POINTERS_EXTENSION_NAME, 0 },
+       { createFeatureStructWrapper<VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT>, VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME, VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_SPEC_VERSION },
+       { createFeatureStructWrapper<VkPhysicalDeviceVulkanMemoryModelFeatures>, DECL_VULKAN_MEMORY_MODEL_EXTENSION_NAME, 0 },
+       { createFeatureStructWrapper<VkPhysicalDeviceVulkanSC10Features>, DECL_VULKAN_SC_1_0_EXTENSION_NAME, 0 },
+       { createFeatureStructWrapper<VkPhysicalDeviceYcbcrImageArraysFeaturesEXT>, VK_EXT_YCBCR_IMAGE_ARRAYS_EXTENSION_NAME, VK_EXT_YCBCR_IMAGE_ARRAYS_SPEC_VERSION },
+};
+
+bool isPartOfBlobFeatures (VkStructureType sType)
+{
+       const std::vector<VkStructureType> sTypeVect =  {
+               // Vulkan11
+               VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES,
+               VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES,
+               VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES,
+               VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES,
+               VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES,
+               VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES,
+               // Vulkan12
+               VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES,
+               VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES,
+               VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES,
+               VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES,
+               VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES,
+               VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES,
+               VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES,
+               VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES,
+               VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES,
+               VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES,
+               VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES,
+               VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES,
+               VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES,
+       };
+       return de::contains(sTypeVect.begin(), sTypeVect.end(), sType);
+}
+
+} // vk
+
diff --git a/external/vulkancts/framework/vulkan/generated/vulkansc/vkDeviceFeatures2.inl b/external/vulkancts/framework/vulkan/generated/vulkansc/vkDeviceFeatures2.inl
new file mode 100644 (file)
index 0000000..18f6d8f
--- /dev/null
@@ -0,0 +1,202 @@
+/* WARNING: This is auto-generated file. Do not modify, since changes will
+ * be lost! Modify the generating script instead.
+ */
+VkPhysicalDeviceScalarBlockLayoutFeatures                      deviceScalarBlockLayoutFeatures[count];
+VkPhysicalDevice16BitStorageFeatures                           device16BitStorageFeatures[count];
+VkPhysicalDeviceMultiviewFeatures                                      deviceMultiviewFeatures[count];
+VkPhysicalDeviceProtectedMemoryFeatures                                deviceProtectedMemoryFeatures[count];
+VkPhysicalDeviceSamplerYcbcrConversionFeatures         deviceSamplerYcbcrConversionFeatures[count];
+VkPhysicalDeviceVariablePointersFeatures                       deviceVariablePointersFeatures[count];
+VkPhysicalDevice8BitStorageFeatures                                    device8BitStorageFeatures[count];
+VkPhysicalDeviceShaderAtomicInt64Features                      deviceShaderAtomicInt64Features[count];
+VkPhysicalDeviceShaderFloat16Int8Features                      deviceShaderFloat16Int8Features[count];
+VkPhysicalDeviceBufferDeviceAddressFeatures                    deviceBufferDeviceAddressFeatures[count];
+VkPhysicalDeviceDescriptorIndexingFeatures                     deviceDescriptorIndexingFeatures[count];
+VkPhysicalDeviceTimelineSemaphoreFeatures                      deviceTimelineSemaphoreFeatures[count];
+
+const bool isScalarBlockLayoutFeatures                 =                                                                                                                                          context.contextSupports(vk::ApiVersion(1, 2, 0));
+const bool is16BitStorageFeatures                              =                                                                                                                                          context.contextSupports(vk::ApiVersion(1, 1, 0));
+const bool isMultiviewFeatures                                 =                                                                                                                                          context.contextSupports(vk::ApiVersion(1, 1, 0));
+const bool isProtectedMemoryFeatures                   =                                                                                                                                          context.contextSupports(vk::ApiVersion(1, 1, 0));
+const bool isSamplerYcbcrConversionFeatures            =                                                                                                                                          context.contextSupports(vk::ApiVersion(1, 1, 0));
+const bool isVariablePointersFeatures                  =                                                                                                                                          context.contextSupports(vk::ApiVersion(1, 1, 0));
+const bool is8BitStorageFeatures                               =                                                                                                                                          context.contextSupports(vk::ApiVersion(1, 2, 0));
+const bool isShaderAtomicInt64Features                 =                                                                                                                                          context.contextSupports(vk::ApiVersion(1, 2, 0));
+const bool isShaderFloat16Int8Features                 =                                                                                                                                          context.contextSupports(vk::ApiVersion(1, 2, 0));
+const bool isBufferDeviceAddressFeatures               =                                                                                                                                          context.contextSupports(vk::ApiVersion(1, 2, 0));
+const bool isDescriptorIndexingFeatures                        =                                                                                                                                          context.contextSupports(vk::ApiVersion(1, 2, 0));
+const bool isTimelineSemaphoreFeatures                 =                                                                                                                                          context.contextSupports(vk::ApiVersion(1, 2, 0));
+
+for (int ndx = 0; ndx < count; ++ndx)
+{
+       deMemset(&deviceScalarBlockLayoutFeatures[ndx],                 0xFF * ndx, sizeof(VkPhysicalDeviceScalarBlockLayoutFeatures));
+       deMemset(&device16BitStorageFeatures[ndx],                              0xFF * ndx, sizeof(VkPhysicalDevice16BitStorageFeatures));
+       deMemset(&deviceMultiviewFeatures[ndx],                                 0xFF * ndx, sizeof(VkPhysicalDeviceMultiviewFeatures));
+       deMemset(&deviceProtectedMemoryFeatures[ndx],                   0xFF * ndx, sizeof(VkPhysicalDeviceProtectedMemoryFeatures));
+       deMemset(&deviceSamplerYcbcrConversionFeatures[ndx],    0xFF * ndx, sizeof(VkPhysicalDeviceSamplerYcbcrConversionFeatures));
+       deMemset(&deviceVariablePointersFeatures[ndx],                  0xFF * ndx, sizeof(VkPhysicalDeviceVariablePointersFeatures));
+       deMemset(&device8BitStorageFeatures[ndx],                               0xFF * ndx, sizeof(VkPhysicalDevice8BitStorageFeatures));
+       deMemset(&deviceShaderAtomicInt64Features[ndx],                 0xFF * ndx, sizeof(VkPhysicalDeviceShaderAtomicInt64Features));
+       deMemset(&deviceShaderFloat16Int8Features[ndx],                 0xFF * ndx, sizeof(VkPhysicalDeviceShaderFloat16Int8Features));
+       deMemset(&deviceBufferDeviceAddressFeatures[ndx],               0xFF * ndx, sizeof(VkPhysicalDeviceBufferDeviceAddressFeatures));
+       deMemset(&deviceDescriptorIndexingFeatures[ndx],                0xFF * ndx, sizeof(VkPhysicalDeviceDescriptorIndexingFeatures));
+       deMemset(&deviceTimelineSemaphoreFeatures[ndx],                 0xFF * ndx, sizeof(VkPhysicalDeviceTimelineSemaphoreFeatures));
+
+       deviceScalarBlockLayoutFeatures[ndx].sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES;
+       deviceScalarBlockLayoutFeatures[ndx].pNext = &device16BitStorageFeatures[ndx];
+
+       device16BitStorageFeatures[ndx].sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES;
+       device16BitStorageFeatures[ndx].pNext = &deviceMultiviewFeatures[ndx];
+
+       deviceMultiviewFeatures[ndx].sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES;
+       deviceMultiviewFeatures[ndx].pNext = &deviceProtectedMemoryFeatures[ndx];
+
+       deviceProtectedMemoryFeatures[ndx].sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES;
+       deviceProtectedMemoryFeatures[ndx].pNext = &deviceSamplerYcbcrConversionFeatures[ndx];
+
+       deviceSamplerYcbcrConversionFeatures[ndx].sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES;
+       deviceSamplerYcbcrConversionFeatures[ndx].pNext = &deviceVariablePointersFeatures[ndx];
+
+       deviceVariablePointersFeatures[ndx].sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES;
+       deviceVariablePointersFeatures[ndx].pNext = &device8BitStorageFeatures[ndx];
+
+       device8BitStorageFeatures[ndx].sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES;
+       device8BitStorageFeatures[ndx].pNext = &deviceShaderAtomicInt64Features[ndx];
+
+       deviceShaderAtomicInt64Features[ndx].sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES;
+       deviceShaderAtomicInt64Features[ndx].pNext = &deviceShaderFloat16Int8Features[ndx];
+
+       deviceShaderFloat16Int8Features[ndx].sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES;
+       deviceShaderFloat16Int8Features[ndx].pNext = &deviceBufferDeviceAddressFeatures[ndx];
+
+       deviceBufferDeviceAddressFeatures[ndx].sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES;
+       deviceBufferDeviceAddressFeatures[ndx].pNext = &deviceDescriptorIndexingFeatures[ndx];
+
+       deviceDescriptorIndexingFeatures[ndx].sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES;
+       deviceDescriptorIndexingFeatures[ndx].pNext = &deviceTimelineSemaphoreFeatures[ndx];
+
+       deviceTimelineSemaphoreFeatures[ndx].sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES;
+       deviceTimelineSemaphoreFeatures[ndx].pNext = DE_NULL;
+
+       deMemset(&extFeatures.features, 0xcd, sizeof(extFeatures.features));
+       extFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
+       extFeatures.pNext = &deviceScalarBlockLayoutFeatures[ndx];
+       vki.getPhysicalDeviceFeatures2(physicalDevice, &extFeatures);
+}
+
+if (isScalarBlockLayoutFeatures)
+       log << TestLog::Message << deviceScalarBlockLayoutFeatures[0] << TestLog::EndMessage;
+if (is16BitStorageFeatures)
+       log << TestLog::Message << device16BitStorageFeatures[0] << TestLog::EndMessage;
+if (isMultiviewFeatures)
+       log << TestLog::Message << deviceMultiviewFeatures[0] << TestLog::EndMessage;
+if (isProtectedMemoryFeatures)
+       log << TestLog::Message << deviceProtectedMemoryFeatures[0] << TestLog::EndMessage;
+if (isSamplerYcbcrConversionFeatures)
+       log << TestLog::Message << deviceSamplerYcbcrConversionFeatures[0] << TestLog::EndMessage;
+if (isVariablePointersFeatures)
+       log << TestLog::Message << deviceVariablePointersFeatures[0] << TestLog::EndMessage;
+if (is8BitStorageFeatures)
+       log << TestLog::Message << device8BitStorageFeatures[0] << TestLog::EndMessage;
+if (isShaderAtomicInt64Features)
+       log << TestLog::Message << deviceShaderAtomicInt64Features[0] << TestLog::EndMessage;
+if (isShaderFloat16Int8Features)
+       log << TestLog::Message << deviceShaderFloat16Int8Features[0] << TestLog::EndMessage;
+if (isBufferDeviceAddressFeatures)
+       log << TestLog::Message << deviceBufferDeviceAddressFeatures[0] << TestLog::EndMessage;
+if (isDescriptorIndexingFeatures)
+       log << TestLog::Message << deviceDescriptorIndexingFeatures[0] << TestLog::EndMessage;
+if (isTimelineSemaphoreFeatures)
+       log << TestLog::Message << deviceTimelineSemaphoreFeatures[0] << TestLog::EndMessage;
+
+if (isScalarBlockLayoutFeatures &&
+       (deviceScalarBlockLayoutFeatures[0].scalarBlockLayout != deviceScalarBlockLayoutFeatures[1].scalarBlockLayout))
+{
+               TCU_FAIL("Mismatch between VkPhysicalDeviceScalarBlockLayoutFeatures");
+}
+if (is16BitStorageFeatures &&
+       (device16BitStorageFeatures[0].storageBuffer16BitAccess != device16BitStorageFeatures[1].storageBuffer16BitAccess ||
+        device16BitStorageFeatures[0].uniformAndStorageBuffer16BitAccess != device16BitStorageFeatures[1].uniformAndStorageBuffer16BitAccess ||
+        device16BitStorageFeatures[0].storagePushConstant16 != device16BitStorageFeatures[1].storagePushConstant16 ||
+        device16BitStorageFeatures[0].storageInputOutput16 != device16BitStorageFeatures[1].storageInputOutput16))
+{
+               TCU_FAIL("Mismatch between VkPhysicalDevice16BitStorageFeatures");
+}
+if (isMultiviewFeatures &&
+       (deviceMultiviewFeatures[0].multiview != deviceMultiviewFeatures[1].multiview ||
+        deviceMultiviewFeatures[0].multiviewGeometryShader != deviceMultiviewFeatures[1].multiviewGeometryShader ||
+        deviceMultiviewFeatures[0].multiviewTessellationShader != deviceMultiviewFeatures[1].multiviewTessellationShader))
+{
+               TCU_FAIL("Mismatch between VkPhysicalDeviceMultiviewFeatures");
+}
+if (isProtectedMemoryFeatures &&
+       (deviceProtectedMemoryFeatures[0].protectedMemory != deviceProtectedMemoryFeatures[1].protectedMemory))
+{
+               TCU_FAIL("Mismatch between VkPhysicalDeviceProtectedMemoryFeatures");
+}
+if (isSamplerYcbcrConversionFeatures &&
+       (deviceSamplerYcbcrConversionFeatures[0].samplerYcbcrConversion != deviceSamplerYcbcrConversionFeatures[1].samplerYcbcrConversion))
+{
+               TCU_FAIL("Mismatch between VkPhysicalDeviceSamplerYcbcrConversionFeatures");
+}
+if (isVariablePointersFeatures &&
+       (deviceVariablePointersFeatures[0].variablePointersStorageBuffer != deviceVariablePointersFeatures[1].variablePointersStorageBuffer ||
+        deviceVariablePointersFeatures[0].variablePointers != deviceVariablePointersFeatures[1].variablePointers))
+{
+               TCU_FAIL("Mismatch between VkPhysicalDeviceVariablePointersFeatures");
+}
+if (is8BitStorageFeatures &&
+       (device8BitStorageFeatures[0].storageBuffer8BitAccess != device8BitStorageFeatures[1].storageBuffer8BitAccess ||
+        device8BitStorageFeatures[0].uniformAndStorageBuffer8BitAccess != device8BitStorageFeatures[1].uniformAndStorageBuffer8BitAccess ||
+        device8BitStorageFeatures[0].storagePushConstant8 != device8BitStorageFeatures[1].storagePushConstant8))
+{
+               TCU_FAIL("Mismatch between VkPhysicalDevice8BitStorageFeatures");
+}
+if (isShaderAtomicInt64Features &&
+       (deviceShaderAtomicInt64Features[0].shaderBufferInt64Atomics != deviceShaderAtomicInt64Features[1].shaderBufferInt64Atomics ||
+        deviceShaderAtomicInt64Features[0].shaderSharedInt64Atomics != deviceShaderAtomicInt64Features[1].shaderSharedInt64Atomics))
+{
+               TCU_FAIL("Mismatch between VkPhysicalDeviceShaderAtomicInt64Features");
+}
+if (isShaderFloat16Int8Features &&
+       (deviceShaderFloat16Int8Features[0].shaderFloat16 != deviceShaderFloat16Int8Features[1].shaderFloat16 ||
+        deviceShaderFloat16Int8Features[0].shaderInt8 != deviceShaderFloat16Int8Features[1].shaderInt8))
+{
+               TCU_FAIL("Mismatch between VkPhysicalDeviceShaderFloat16Int8Features");
+}
+if (isBufferDeviceAddressFeatures &&
+       (deviceBufferDeviceAddressFeatures[0].bufferDeviceAddress != deviceBufferDeviceAddressFeatures[1].bufferDeviceAddress ||
+        deviceBufferDeviceAddressFeatures[0].bufferDeviceAddressCaptureReplay != deviceBufferDeviceAddressFeatures[1].bufferDeviceAddressCaptureReplay ||
+        deviceBufferDeviceAddressFeatures[0].bufferDeviceAddressMultiDevice != deviceBufferDeviceAddressFeatures[1].bufferDeviceAddressMultiDevice))
+{
+               TCU_FAIL("Mismatch between VkPhysicalDeviceBufferDeviceAddressFeatures");
+}
+if (isDescriptorIndexingFeatures &&
+       (deviceDescriptorIndexingFeatures[0].shaderInputAttachmentArrayDynamicIndexing != deviceDescriptorIndexingFeatures[1].shaderInputAttachmentArrayDynamicIndexing ||
+        deviceDescriptorIndexingFeatures[0].shaderUniformTexelBufferArrayDynamicIndexing != deviceDescriptorIndexingFeatures[1].shaderUniformTexelBufferArrayDynamicIndexing ||
+        deviceDescriptorIndexingFeatures[0].shaderStorageTexelBufferArrayDynamicIndexing != deviceDescriptorIndexingFeatures[1].shaderStorageTexelBufferArrayDynamicIndexing ||
+        deviceDescriptorIndexingFeatures[0].shaderUniformBufferArrayNonUniformIndexing != deviceDescriptorIndexingFeatures[1].shaderUniformBufferArrayNonUniformIndexing ||
+        deviceDescriptorIndexingFeatures[0].shaderSampledImageArrayNonUniformIndexing != deviceDescriptorIndexingFeatures[1].shaderSampledImageArrayNonUniformIndexing ||
+        deviceDescriptorIndexingFeatures[0].shaderStorageBufferArrayNonUniformIndexing != deviceDescriptorIndexingFeatures[1].shaderStorageBufferArrayNonUniformIndexing ||
+        deviceDescriptorIndexingFeatures[0].shaderStorageImageArrayNonUniformIndexing != deviceDescriptorIndexingFeatures[1].shaderStorageImageArrayNonUniformIndexing ||
+        deviceDescriptorIndexingFeatures[0].shaderInputAttachmentArrayNonUniformIndexing != deviceDescriptorIndexingFeatures[1].shaderInputAttachmentArrayNonUniformIndexing ||
+        deviceDescriptorIndexingFeatures[0].shaderUniformTexelBufferArrayNonUniformIndexing != deviceDescriptorIndexingFeatures[1].shaderUniformTexelBufferArrayNonUniformIndexing ||
+        deviceDescriptorIndexingFeatures[0].shaderStorageTexelBufferArrayNonUniformIndexing != deviceDescriptorIndexingFeatures[1].shaderStorageTexelBufferArrayNonUniformIndexing ||
+        deviceDescriptorIndexingFeatures[0].descriptorBindingUniformBufferUpdateAfterBind != deviceDescriptorIndexingFeatures[1].descriptorBindingUniformBufferUpdateAfterBind ||
+        deviceDescriptorIndexingFeatures[0].descriptorBindingSampledImageUpdateAfterBind != deviceDescriptorIndexingFeatures[1].descriptorBindingSampledImageUpdateAfterBind ||
+        deviceDescriptorIndexingFeatures[0].descriptorBindingStorageImageUpdateAfterBind != deviceDescriptorIndexingFeatures[1].descriptorBindingStorageImageUpdateAfterBind ||
+        deviceDescriptorIndexingFeatures[0].descriptorBindingStorageBufferUpdateAfterBind != deviceDescriptorIndexingFeatures[1].descriptorBindingStorageBufferUpdateAfterBind ||
+        deviceDescriptorIndexingFeatures[0].descriptorBindingUniformTexelBufferUpdateAfterBind != deviceDescriptorIndexingFeatures[1].descriptorBindingUniformTexelBufferUpdateAfterBind ||
+        deviceDescriptorIndexingFeatures[0].descriptorBindingStorageTexelBufferUpdateAfterBind != deviceDescriptorIndexingFeatures[1].descriptorBindingStorageTexelBufferUpdateAfterBind ||
+        deviceDescriptorIndexingFeatures[0].descriptorBindingUpdateUnusedWhilePending != deviceDescriptorIndexingFeatures[1].descriptorBindingUpdateUnusedWhilePending ||
+        deviceDescriptorIndexingFeatures[0].descriptorBindingPartiallyBound != deviceDescriptorIndexingFeatures[1].descriptorBindingPartiallyBound ||
+        deviceDescriptorIndexingFeatures[0].descriptorBindingVariableDescriptorCount != deviceDescriptorIndexingFeatures[1].descriptorBindingVariableDescriptorCount ||
+        deviceDescriptorIndexingFeatures[0].runtimeDescriptorArray != deviceDescriptorIndexingFeatures[1].runtimeDescriptorArray))
+{
+               TCU_FAIL("Mismatch between VkPhysicalDeviceDescriptorIndexingFeatures");
+}
+if (isTimelineSemaphoreFeatures &&
+       (deviceTimelineSemaphoreFeatures[0].timelineSemaphore != deviceTimelineSemaphoreFeatures[1].timelineSemaphore))
+{
+               TCU_FAIL("Mismatch between VkPhysicalDeviceTimelineSemaphoreFeatures");
+}
diff --git a/external/vulkancts/framework/vulkan/generated/vulkansc/vkDeviceFeaturesForContextDecl.inl b/external/vulkancts/framework/vulkan/generated/vulkansc/vkDeviceFeaturesForContextDecl.inl
new file mode 100644 (file)
index 0000000..4b19270
--- /dev/null
@@ -0,0 +1,46 @@
+/* WARNING: This is auto-generated file. Do not modify, since changes will
+ * be lost! Modify the generating script instead.
+ */
+const vk::VkPhysicalDevice16BitStorageFeatures&                                                        get16BitStorageFeatures                                                 (void) const;
+const vk::VkPhysicalDevice4444FormatsFeaturesEXT&                                              get4444FormatsFeaturesEXT                                               (void) const;
+const vk::VkPhysicalDevice8BitStorageFeatures&                                                 get8BitStorageFeatures                                                  (void) const;
+const vk::VkPhysicalDeviceASTCDecodeFeaturesEXT&                                               getASTCDecodeFeaturesEXT                                                (void) const;
+const vk::VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT&                   getBlendOperationAdvancedFeaturesEXT                    (void) const;
+const vk::VkPhysicalDeviceBufferDeviceAddressFeatures&                                 getBufferDeviceAddressFeatures                                  (void) const;
+const vk::VkPhysicalDeviceCustomBorderColorFeaturesEXT&                                        getCustomBorderColorFeaturesEXT                                 (void) const;
+const vk::VkPhysicalDeviceDepthClipEnableFeaturesEXT&                                  getDepthClipEnableFeaturesEXT                                   (void) const;
+const vk::VkPhysicalDeviceDescriptorIndexingFeatures&                                  getDescriptorIndexingFeatures                                   (void) const;
+const vk::VkPhysicalDeviceExtendedDynamicStateFeaturesEXT&                             getExtendedDynamicStateFeaturesEXT                              (void) const;
+const vk::VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT&                  getFragmentShaderInterlockFeaturesEXT                   (void) const;
+const vk::VkPhysicalDeviceFragmentShadingRateFeaturesKHR&                              getFragmentShadingRateFeatures                                  (void) const;
+const vk::VkPhysicalDeviceHostQueryResetFeatures&                                              getHostQueryResetFeatures                                               (void) const;
+const vk::VkPhysicalDeviceImagelessFramebufferFeatures&                                        getImagelessFramebufferFeatures                                 (void) const;
+const vk::VkPhysicalDeviceImageRobustnessFeaturesEXT&                                  getImageRobustnessFeaturesEXT                                   (void) const;
+const vk::VkPhysicalDeviceIndexTypeUint8FeaturesEXT&                                   getIndexTypeUint8FeaturesEXT                                    (void) const;
+const vk::VkPhysicalDeviceLineRasterizationFeaturesEXT&                                        getLineRasterizationFeaturesEXT                                 (void) const;
+const vk::VkPhysicalDeviceMultiviewFeatures&                                                   getMultiviewFeatures                                                    (void) const;
+const vk::VkPhysicalDevicePipelineIdentifierFeatures&                                  getPipelineIdentifierFeatures                                   (void) const;
+const vk::VkPhysicalDeviceProtectedMemoryFeatures&                                             getProtectedMemoryFeatures                                              (void) const;
+const vk::VkPhysicalDeviceRobustness2FeaturesEXT&                                              getRobustness2FeaturesEXT                                               (void) const;
+const vk::VkPhysicalDeviceSamplerYcbcrConversionFeatures&                              getSamplerYcbcrConversionFeatures                               (void) const;
+const vk::VkPhysicalDeviceScalarBlockLayoutFeatures&                                   getScalarBlockLayoutFeatures                                    (void) const;
+const vk::VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures&                 getSeparateDepthStencilLayoutsFeatures                  (void) const;
+const vk::VkPhysicalDeviceShaderAtomicFloatFeaturesEXT&                                        getShaderAtomicFloatFeaturesEXT                                 (void) const;
+const vk::VkPhysicalDeviceShaderAtomicInt64Features&                                   getShaderAtomicInt64Features                                    (void) const;
+const vk::VkPhysicalDeviceShaderClockFeaturesKHR&                                              getShaderClockFeatures                                                  (void) const;
+const vk::VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT&   getShaderDemoteToHelperInvocationFeaturesEXT    (void) const;
+const vk::VkPhysicalDeviceShaderDrawParametersFeatures&                                        getShaderDrawParametersFeatures                                 (void) const;
+const vk::VkPhysicalDeviceShaderFloat16Int8Features&                                   getShaderFloat16Int8Features                                    (void) const;
+const vk::VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT&                   getShaderImageAtomicInt64FeaturesEXT                    (void) const;
+const vk::VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures&                 getShaderSubgroupExtendedTypesFeatures                  (void) const;
+const vk::VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR&                        getShaderTerminateInvocationFeatures                    (void) const;
+const vk::VkPhysicalDeviceSubgroupSizeControlFeaturesEXT&                              getSubgroupSizeControlFeaturesEXT                               (void) const;
+const vk::VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT&                             getTexelBufferAlignmentFeaturesEXT                              (void) const;
+const vk::VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT&                        getTextureCompressionASTCHDRFeaturesEXT                 (void) const;
+const vk::VkPhysicalDeviceTimelineSemaphoreFeatures&                                   getTimelineSemaphoreFeatures                                    (void) const;
+const vk::VkPhysicalDeviceUniformBufferStandardLayoutFeatures&                 getUniformBufferStandardLayoutFeatures                  (void) const;
+const vk::VkPhysicalDeviceVariablePointersFeatures&                                            getVariablePointersFeatures                                             (void) const;
+const vk::VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT&                   getVertexAttributeDivisorFeaturesEXT                    (void) const;
+const vk::VkPhysicalDeviceVulkanMemoryModelFeatures&                                   getVulkanMemoryModelFeatures                                    (void) const;
+const vk::VkPhysicalDeviceVulkanSC10Features&                                                  getVulkanSC10Features                                                   (void) const;
+const vk::VkPhysicalDeviceYcbcrImageArraysFeaturesEXT&                                 getYcbcrImageArraysFeaturesEXT                                  (void) const;
diff --git a/external/vulkancts/framework/vulkan/generated/vulkansc/vkDeviceFeaturesForContextDefs.inl b/external/vulkancts/framework/vulkan/generated/vulkansc/vkDeviceFeaturesForContextDefs.inl
new file mode 100644 (file)
index 0000000..d5e80be
--- /dev/null
@@ -0,0 +1,46 @@
+/* WARNING: This is auto-generated file. Do not modify, since changes will
+ * be lost! Modify the generating script instead.
+ */
+const vk::VkPhysicalDevice16BitStorageFeatures&                                                        Context::get16BitStorageFeatures                                                (void) const { return m_device->get16BitStorageFeatures();                                              }
+const vk::VkPhysicalDevice4444FormatsFeaturesEXT&                                              Context::get4444FormatsFeaturesEXT                                              (void) const { return m_device->get4444FormatsFeaturesEXT();                                    }
+const vk::VkPhysicalDevice8BitStorageFeatures&                                                 Context::get8BitStorageFeatures                                                 (void) const { return m_device->get8BitStorageFeatures();                                               }
+const vk::VkPhysicalDeviceASTCDecodeFeaturesEXT&                                               Context::getASTCDecodeFeaturesEXT                                               (void) const { return m_device->getASTCDecodeFeaturesEXT();                                             }
+const vk::VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT&                   Context::getBlendOperationAdvancedFeaturesEXT                   (void) const { return m_device->getBlendOperationAdvancedFeaturesEXT();                 }
+const vk::VkPhysicalDeviceBufferDeviceAddressFeatures&                                 Context::getBufferDeviceAddressFeatures                                 (void) const { return m_device->getBufferDeviceAddressFeatures();                               }
+const vk::VkPhysicalDeviceCustomBorderColorFeaturesEXT&                                        Context::getCustomBorderColorFeaturesEXT                                (void) const { return m_device->getCustomBorderColorFeaturesEXT();                              }
+const vk::VkPhysicalDeviceDepthClipEnableFeaturesEXT&                                  Context::getDepthClipEnableFeaturesEXT                                  (void) const { return m_device->getDepthClipEnableFeaturesEXT();                                }
+const vk::VkPhysicalDeviceDescriptorIndexingFeatures&                                  Context::getDescriptorIndexingFeatures                                  (void) const { return m_device->getDescriptorIndexingFeatures();                                }
+const vk::VkPhysicalDeviceExtendedDynamicStateFeaturesEXT&                             Context::getExtendedDynamicStateFeaturesEXT                             (void) const { return m_device->getExtendedDynamicStateFeaturesEXT();                   }
+const vk::VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT&                  Context::getFragmentShaderInterlockFeaturesEXT                  (void) const { return m_device->getFragmentShaderInterlockFeaturesEXT();                }
+const vk::VkPhysicalDeviceFragmentShadingRateFeaturesKHR&                              Context::getFragmentShadingRateFeatures                                 (void) const { return m_device->getFragmentShadingRateFeatures();                               }
+const vk::VkPhysicalDeviceHostQueryResetFeatures&                                              Context::getHostQueryResetFeatures                                              (void) const { return m_device->getHostQueryResetFeatures();                                    }
+const vk::VkPhysicalDeviceImagelessFramebufferFeatures&                                        Context::getImagelessFramebufferFeatures                                (void) const { return m_device->getImagelessFramebufferFeatures();                              }
+const vk::VkPhysicalDeviceImageRobustnessFeaturesEXT&                                  Context::getImageRobustnessFeaturesEXT                                  (void) const { return m_device->getImageRobustnessFeaturesEXT();                                }
+const vk::VkPhysicalDeviceIndexTypeUint8FeaturesEXT&                                   Context::getIndexTypeUint8FeaturesEXT                                   (void) const { return m_device->getIndexTypeUint8FeaturesEXT();                                 }
+const vk::VkPhysicalDeviceLineRasterizationFeaturesEXT&                                        Context::getLineRasterizationFeaturesEXT                                (void) const { return m_device->getLineRasterizationFeaturesEXT();                              }
+const vk::VkPhysicalDeviceMultiviewFeatures&                                                   Context::getMultiviewFeatures                                                   (void) const { return m_device->getMultiviewFeatures();                                                 }
+const vk::VkPhysicalDevicePipelineIdentifierFeatures&                                  Context::getPipelineIdentifierFeatures                                  (void) const { return m_device->getPipelineIdentifierFeatures();                                }
+const vk::VkPhysicalDeviceProtectedMemoryFeatures&                                             Context::getProtectedMemoryFeatures                                             (void) const { return m_device->getProtectedMemoryFeatures();                                   }
+const vk::VkPhysicalDeviceRobustness2FeaturesEXT&                                              Context::getRobustness2FeaturesEXT                                              (void) const { return m_device->getRobustness2FeaturesEXT();                                    }
+const vk::VkPhysicalDeviceSamplerYcbcrConversionFeatures&                              Context::getSamplerYcbcrConversionFeatures                              (void) const { return m_device->getSamplerYcbcrConversionFeatures();                    }
+const vk::VkPhysicalDeviceScalarBlockLayoutFeatures&                                   Context::getScalarBlockLayoutFeatures                                   (void) const { return m_device->getScalarBlockLayoutFeatures();                                 }
+const vk::VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures&                 Context::getSeparateDepthStencilLayoutsFeatures                 (void) const { return m_device->getSeparateDepthStencilLayoutsFeatures();               }
+const vk::VkPhysicalDeviceShaderAtomicFloatFeaturesEXT&                                        Context::getShaderAtomicFloatFeaturesEXT                                (void) const { return m_device->getShaderAtomicFloatFeaturesEXT();                              }
+const vk::VkPhysicalDeviceShaderAtomicInt64Features&                                   Context::getShaderAtomicInt64Features                                   (void) const { return m_device->getShaderAtomicInt64Features();                                 }
+const vk::VkPhysicalDeviceShaderClockFeaturesKHR&                                              Context::getShaderClockFeatures                                                 (void) const { return m_device->getShaderClockFeatures();                                               }
+const vk::VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT&   Context::getShaderDemoteToHelperInvocationFeaturesEXT   (void) const { return m_device->getShaderDemoteToHelperInvocationFeaturesEXT(); }
+const vk::VkPhysicalDeviceShaderDrawParametersFeatures&                                        Context::getShaderDrawParametersFeatures                                (void) const { return m_device->getShaderDrawParametersFeatures();                              }
+const vk::VkPhysicalDeviceShaderFloat16Int8Features&                                   Context::getShaderFloat16Int8Features                                   (void) const { return m_device->getShaderFloat16Int8Features();                                 }
+const vk::VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT&                   Context::getShaderImageAtomicInt64FeaturesEXT                   (void) const { return m_device->getShaderImageAtomicInt64FeaturesEXT();                 }
+const vk::VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures&                 Context::getShaderSubgroupExtendedTypesFeatures                 (void) const { return m_device->getShaderSubgroupExtendedTypesFeatures();               }
+const vk::VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR&                        Context::getShaderTerminateInvocationFeatures                   (void) const { return m_device->getShaderTerminateInvocationFeatures();                 }
+const vk::VkPhysicalDeviceSubgroupSizeControlFeaturesEXT&                              Context::getSubgroupSizeControlFeaturesEXT                              (void) const { return m_device->getSubgroupSizeControlFeaturesEXT();                    }
+const vk::VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT&                             Context::getTexelBufferAlignmentFeaturesEXT                             (void) const { return m_device->getTexelBufferAlignmentFeaturesEXT();                   }
+const vk::VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT&                        Context::getTextureCompressionASTCHDRFeaturesEXT                (void) const { return m_device->getTextureCompressionASTCHDRFeaturesEXT();              }
+const vk::VkPhysicalDeviceTimelineSemaphoreFeatures&                                   Context::getTimelineSemaphoreFeatures                                   (void) const { return m_device->getTimelineSemaphoreFeatures();                                 }
+const vk::VkPhysicalDeviceUniformBufferStandardLayoutFeatures&                 Context::getUniformBufferStandardLayoutFeatures                 (void) const { return m_device->getUniformBufferStandardLayoutFeatures();               }
+const vk::VkPhysicalDeviceVariablePointersFeatures&                                            Context::getVariablePointersFeatures                                    (void) const { return m_device->getVariablePointersFeatures();                                  }
+const vk::VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT&                   Context::getVertexAttributeDivisorFeaturesEXT                   (void) const { return m_device->getVertexAttributeDivisorFeaturesEXT();                 }
+const vk::VkPhysicalDeviceVulkanMemoryModelFeatures&                                   Context::getVulkanMemoryModelFeatures                                   (void) const { return m_device->getVulkanMemoryModelFeatures();                                 }
+const vk::VkPhysicalDeviceVulkanSC10Features&                                                  Context::getVulkanSC10Features                                                  (void) const { return m_device->getVulkanSC10Features();                                                }
+const vk::VkPhysicalDeviceYcbcrImageArraysFeaturesEXT&                                 Context::getYcbcrImageArraysFeaturesEXT                                 (void) const { return m_device->getYcbcrImageArraysFeaturesEXT();                               }
diff --git a/external/vulkancts/framework/vulkan/generated/vulkansc/vkDeviceFeaturesForDefaultDeviceDefs.inl b/external/vulkancts/framework/vulkan/generated/vulkansc/vkDeviceFeaturesForDefaultDeviceDefs.inl
new file mode 100644 (file)
index 0000000..7381c9d
--- /dev/null
@@ -0,0 +1,46 @@
+/* WARNING: This is auto-generated file. Do not modify, since changes will
+ * be lost! Modify the generating script instead.
+ */
+const VkPhysicalDevice16BitStorageFeatures&                                                    get16BitStorageFeatures                                                 (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDevice16BitStorageFeatures>();                                          }
+const VkPhysicalDevice4444FormatsFeaturesEXT&                                          get4444FormatsFeaturesEXT                                               (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDevice4444FormatsFeaturesEXT>();                                        }
+const VkPhysicalDevice8BitStorageFeatures&                                                     get8BitStorageFeatures                                                  (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDevice8BitStorageFeatures>();                                           }
+const VkPhysicalDeviceASTCDecodeFeaturesEXT&                                           getASTCDecodeFeaturesEXT                                                (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceASTCDecodeFeaturesEXT>();                                         }
+const VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT&                       getBlendOperationAdvancedFeaturesEXT                    (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT>();                     }
+const VkPhysicalDeviceBufferDeviceAddressFeatures&                                     getBufferDeviceAddressFeatures                                  (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceBufferDeviceAddressFeatures>();                           }
+const VkPhysicalDeviceCustomBorderColorFeaturesEXT&                                    getCustomBorderColorFeaturesEXT                                 (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceCustomBorderColorFeaturesEXT>();                          }
+const VkPhysicalDeviceDepthClipEnableFeaturesEXT&                                      getDepthClipEnableFeaturesEXT                                   (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceDepthClipEnableFeaturesEXT>();                            }
+const VkPhysicalDeviceDescriptorIndexingFeatures&                                      getDescriptorIndexingFeatures                                   (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceDescriptorIndexingFeatures>();                            }
+const VkPhysicalDeviceExtendedDynamicStateFeaturesEXT&                         getExtendedDynamicStateFeaturesEXT                              (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceExtendedDynamicStateFeaturesEXT>();                       }
+const VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT&                      getFragmentShaderInterlockFeaturesEXT                   (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT>();            }
+const VkPhysicalDeviceFragmentShadingRateFeaturesKHR&                          getFragmentShadingRateFeatures                                  (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceFragmentShadingRateFeaturesKHR>();                        }
+const VkPhysicalDeviceHostQueryResetFeatures&                                          getHostQueryResetFeatures                                               (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceHostQueryResetFeatures>();                                        }
+const VkPhysicalDeviceImagelessFramebufferFeatures&                                    getImagelessFramebufferFeatures                                 (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceImagelessFramebufferFeatures>();                          }
+const VkPhysicalDeviceImageRobustnessFeaturesEXT&                                      getImageRobustnessFeaturesEXT                                   (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceImageRobustnessFeaturesEXT>();                            }
+const VkPhysicalDeviceIndexTypeUint8FeaturesEXT&                                       getIndexTypeUint8FeaturesEXT                                    (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceIndexTypeUint8FeaturesEXT>();                                     }
+const VkPhysicalDeviceLineRasterizationFeaturesEXT&                                    getLineRasterizationFeaturesEXT                                 (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceLineRasterizationFeaturesEXT>();                          }
+const VkPhysicalDeviceMultiviewFeatures&                                                       getMultiviewFeatures                                                    (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceMultiviewFeatures>();                                                     }
+const VkPhysicalDevicePipelineIdentifierFeatures&                                      getPipelineIdentifierFeatures                                   (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDevicePipelineIdentifierFeatures>();                            }
+const VkPhysicalDeviceProtectedMemoryFeatures&                                         getProtectedMemoryFeatures                                              (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceProtectedMemoryFeatures>();                                       }
+const VkPhysicalDeviceRobustness2FeaturesEXT&                                          getRobustness2FeaturesEXT                                               (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceRobustness2FeaturesEXT>();                                        }
+const VkPhysicalDeviceSamplerYcbcrConversionFeatures&                          getSamplerYcbcrConversionFeatures                               (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceSamplerYcbcrConversionFeatures>();                        }
+const VkPhysicalDeviceScalarBlockLayoutFeatures&                                       getScalarBlockLayoutFeatures                                    (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceScalarBlockLayoutFeatures>();                                     }
+const VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures&                     getSeparateDepthStencilLayoutsFeatures                  (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures>();           }
+const VkPhysicalDeviceShaderAtomicFloatFeaturesEXT&                                    getShaderAtomicFloatFeaturesEXT                                 (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderAtomicFloatFeaturesEXT>();                          }
+const VkPhysicalDeviceShaderAtomicInt64Features&                                       getShaderAtomicInt64Features                                    (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderAtomicInt64Features>();                                     }
+const VkPhysicalDeviceShaderClockFeaturesKHR&                                          getShaderClockFeatures                                                  (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderClockFeaturesKHR>();                                        }
+const VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT&       getShaderDemoteToHelperInvocationFeaturesEXT    (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT>();     }
+const VkPhysicalDeviceShaderDrawParametersFeatures&                                    getShaderDrawParametersFeatures                                 (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderDrawParametersFeatures>();                          }
+const VkPhysicalDeviceShaderFloat16Int8Features&                                       getShaderFloat16Int8Features                                    (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderFloat16Int8Features>();                                     }
+const VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT&                       getShaderImageAtomicInt64FeaturesEXT                    (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT>();                     }
+const VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures&                     getShaderSubgroupExtendedTypesFeatures                  (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures>();           }
+const VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR&                    getShaderTerminateInvocationFeatures                    (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR>();          }
+const VkPhysicalDeviceSubgroupSizeControlFeaturesEXT&                          getSubgroupSizeControlFeaturesEXT                               (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceSubgroupSizeControlFeaturesEXT>();                        }
+const VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT&                         getTexelBufferAlignmentFeaturesEXT                              (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT>();                       }
+const VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT&                    getTextureCompressionASTCHDRFeaturesEXT                 (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT>();          }
+const VkPhysicalDeviceTimelineSemaphoreFeatures&                                       getTimelineSemaphoreFeatures                                    (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceTimelineSemaphoreFeatures>();                                     }
+const VkPhysicalDeviceUniformBufferStandardLayoutFeatures&                     getUniformBufferStandardLayoutFeatures                  (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceUniformBufferStandardLayoutFeatures>();           }
+const VkPhysicalDeviceVariablePointersFeatures&                                                getVariablePointersFeatures                                             (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceVariablePointersFeatures>();                                      }
+const VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT&                       getVertexAttributeDivisorFeaturesEXT                    (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT>();                     }
+const VkPhysicalDeviceVulkanMemoryModelFeatures&                                       getVulkanMemoryModelFeatures                                    (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceVulkanMemoryModelFeatures>();                                     }
+const VkPhysicalDeviceVulkanSC10Features&                                                      getVulkanSC10Features                                                   (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceVulkanSC10Features>();                                            }
+const VkPhysicalDeviceYcbcrImageArraysFeaturesEXT&                                     getYcbcrImageArraysFeaturesEXT                                  (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceYcbcrImageArraysFeaturesEXT>();                           }
diff --git a/external/vulkancts/framework/vulkan/generated/vulkansc/vkDeviceFunctionPointers.inl b/external/vulkancts/framework/vulkan/generated/vulkansc/vkDeviceFunctionPointers.inl
new file mode 100644 (file)
index 0000000..e8e6d99
--- /dev/null
@@ -0,0 +1,190 @@
+/* WARNING: This is auto-generated file. Do not modify, since changes will
+ * be lost! Modify the generating script instead.
+ */
+GetDeviceProcAddrFunc                                          getDeviceProcAddr;
+DestroyDeviceFunc                                                      destroyDevice;
+GetDeviceQueueFunc                                                     getDeviceQueue;
+QueueSubmitFunc                                                                queueSubmit;
+QueueWaitIdleFunc                                                      queueWaitIdle;
+DeviceWaitIdleFunc                                                     deviceWaitIdle;
+AllocateMemoryFunc                                                     allocateMemory;
+MapMemoryFunc                                                          mapMemory;
+UnmapMemoryFunc                                                                unmapMemory;
+FlushMappedMemoryRangesFunc                                    flushMappedMemoryRanges;
+InvalidateMappedMemoryRangesFunc                       invalidateMappedMemoryRanges;
+GetDeviceMemoryCommitmentFunc                          getDeviceMemoryCommitment;
+BindBufferMemoryFunc                                           bindBufferMemory;
+BindImageMemoryFunc                                                    bindImageMemory;
+GetBufferMemoryRequirementsFunc                                getBufferMemoryRequirements;
+GetImageMemoryRequirementsFunc                         getImageMemoryRequirements;
+GetImageSparseMemoryRequirementsFunc           getImageSparseMemoryRequirements;
+QueueBindSparseFunc                                                    queueBindSparse;
+CreateFenceFunc                                                                createFence;
+DestroyFenceFunc                                                       destroyFence;
+ResetFencesFunc                                                                resetFences;
+GetFenceStatusFunc                                                     getFenceStatus;
+WaitForFencesFunc                                                      waitForFences;
+CreateSemaphoreFunc                                                    createSemaphore;
+DestroySemaphoreFunc                                           destroySemaphore;
+CreateEventFunc                                                                createEvent;
+DestroyEventFunc                                                       destroyEvent;
+GetEventStatusFunc                                                     getEventStatus;
+SetEventFunc                                                           setEvent;
+ResetEventFunc                                                         resetEvent;
+CreateQueryPoolFunc                                                    createQueryPool;
+GetQueryPoolResultsFunc                                                getQueryPoolResults;
+CreateBufferFunc                                                       createBuffer;
+DestroyBufferFunc                                                      destroyBuffer;
+CreateBufferViewFunc                                           createBufferView;
+DestroyBufferViewFunc                                          destroyBufferView;
+CreateImageFunc                                                                createImage;
+DestroyImageFunc                                                       destroyImage;
+GetImageSubresourceLayoutFunc                          getImageSubresourceLayout;
+CreateImageViewFunc                                                    createImageView;
+DestroyImageViewFunc                                           destroyImageView;
+CreatePipelineCacheFunc                                                createPipelineCache;
+DestroyPipelineCacheFunc                                       destroyPipelineCache;
+CreateGraphicsPipelinesFunc                                    createGraphicsPipelines;
+CreateComputePipelinesFunc                                     createComputePipelines;
+DestroyPipelineFunc                                                    destroyPipeline;
+CreatePipelineLayoutFunc                                       createPipelineLayout;
+DestroyPipelineLayoutFunc                                      destroyPipelineLayout;
+CreateSamplerFunc                                                      createSampler;
+DestroySamplerFunc                                                     destroySampler;
+CreateDescriptorSetLayoutFunc                          createDescriptorSetLayout;
+DestroyDescriptorSetLayoutFunc                         destroyDescriptorSetLayout;
+CreateDescriptorPoolFunc                                       createDescriptorPool;
+ResetDescriptorPoolFunc                                                resetDescriptorPool;
+AllocateDescriptorSetsFunc                                     allocateDescriptorSets;
+FreeDescriptorSetsFunc                                         freeDescriptorSets;
+UpdateDescriptorSetsFunc                                       updateDescriptorSets;
+CreateFramebufferFunc                                          createFramebuffer;
+DestroyFramebufferFunc                                         destroyFramebuffer;
+CreateRenderPassFunc                                           createRenderPass;
+DestroyRenderPassFunc                                          destroyRenderPass;
+GetRenderAreaGranularityFunc                           getRenderAreaGranularity;
+CreateCommandPoolFunc                                          createCommandPool;
+ResetCommandPoolFunc                                           resetCommandPool;
+AllocateCommandBuffersFunc                                     allocateCommandBuffers;
+FreeCommandBuffersFunc                                         freeCommandBuffers;
+BeginCommandBufferFunc                                         beginCommandBuffer;
+EndCommandBufferFunc                                           endCommandBuffer;
+ResetCommandBufferFunc                                         resetCommandBuffer;
+CmdBindPipelineFunc                                                    cmdBindPipeline;
+CmdSetViewportFunc                                                     cmdSetViewport;
+CmdSetScissorFunc                                                      cmdSetScissor;
+CmdSetLineWidthFunc                                                    cmdSetLineWidth;
+CmdSetDepthBiasFunc                                                    cmdSetDepthBias;
+CmdSetBlendConstantsFunc                                       cmdSetBlendConstants;
+CmdSetDepthBoundsFunc                                          cmdSetDepthBounds;
+CmdSetStencilCompareMaskFunc                           cmdSetStencilCompareMask;
+CmdSetStencilWriteMaskFunc                                     cmdSetStencilWriteMask;
+CmdSetStencilReferenceFunc                                     cmdSetStencilReference;
+CmdBindDescriptorSetsFunc                                      cmdBindDescriptorSets;
+CmdBindIndexBufferFunc                                         cmdBindIndexBuffer;
+CmdBindVertexBuffersFunc                                       cmdBindVertexBuffers;
+CmdDrawFunc                                                                    cmdDraw;
+CmdDrawIndexedFunc                                                     cmdDrawIndexed;
+CmdDrawIndirectFunc                                                    cmdDrawIndirect;
+CmdDrawIndexedIndirectFunc                                     cmdDrawIndexedIndirect;
+CmdDispatchFunc                                                                cmdDispatch;
+CmdDispatchIndirectFunc                                                cmdDispatchIndirect;
+CmdCopyBufferFunc                                                      cmdCopyBuffer;
+CmdCopyImageFunc                                                       cmdCopyImage;
+CmdBlitImageFunc                                                       cmdBlitImage;
+CmdCopyBufferToImageFunc                                       cmdCopyBufferToImage;
+CmdCopyImageToBufferFunc                                       cmdCopyImageToBuffer;
+CmdUpdateBufferFunc                                                    cmdUpdateBuffer;
+CmdFillBufferFunc                                                      cmdFillBuffer;
+CmdClearColorImageFunc                                         cmdClearColorImage;
+CmdClearDepthStencilImageFunc                          cmdClearDepthStencilImage;
+CmdClearAttachmentsFunc                                                cmdClearAttachments;
+CmdResolveImageFunc                                                    cmdResolveImage;
+CmdSetEventFunc                                                                cmdSetEvent;
+CmdResetEventFunc                                                      cmdResetEvent;
+CmdWaitEventsFunc                                                      cmdWaitEvents;
+CmdPipelineBarrierFunc                                         cmdPipelineBarrier;
+CmdBeginQueryFunc                                                      cmdBeginQuery;
+CmdEndQueryFunc                                                                cmdEndQuery;
+CmdResetQueryPoolFunc                                          cmdResetQueryPool;
+CmdWriteTimestampFunc                                          cmdWriteTimestamp;
+CmdCopyQueryPoolResultsFunc                                    cmdCopyQueryPoolResults;
+CmdPushConstantsFunc                                           cmdPushConstants;
+CmdBeginRenderPassFunc                                         cmdBeginRenderPass;
+CmdNextSubpassFunc                                                     cmdNextSubpass;
+CmdEndRenderPassFunc                                           cmdEndRenderPass;
+CmdExecuteCommandsFunc                                         cmdExecuteCommands;
+GetCommandPoolMemoryConsumptionFunc                    getCommandPoolMemoryConsumption;
+GetFaultDataFunc                                                       getFaultData;
+BindBufferMemory2Func                                          bindBufferMemory2;
+BindImageMemory2Func                                           bindImageMemory2;
+GetDeviceGroupPeerMemoryFeaturesFunc           getDeviceGroupPeerMemoryFeatures;
+CmdSetDeviceMaskFunc                                           cmdSetDeviceMask;
+CmdDispatchBaseFunc                                                    cmdDispatchBase;
+GetImageMemoryRequirements2Func                                getImageMemoryRequirements2;
+GetBufferMemoryRequirements2Func                       getBufferMemoryRequirements2;
+GetImageSparseMemoryRequirements2Func          getImageSparseMemoryRequirements2;
+GetDeviceQueue2Func                                                    getDeviceQueue2;
+CreateSamplerYcbcrConversionFunc                       createSamplerYcbcrConversion;
+DestroySamplerYcbcrConversionFunc                      destroySamplerYcbcrConversion;
+GetDescriptorSetLayoutSupportFunc                      getDescriptorSetLayoutSupport;
+CmdDrawIndirectCountFunc                                       cmdDrawIndirectCount;
+CmdDrawIndexedIndirectCountFunc                                cmdDrawIndexedIndirectCount;
+CreateRenderPass2Func                                          createRenderPass2;
+CmdBeginRenderPass2Func                                                cmdBeginRenderPass2;
+CmdNextSubpass2Func                                                    cmdNextSubpass2;
+CmdEndRenderPass2Func                                          cmdEndRenderPass2;
+ResetQueryPoolFunc                                                     resetQueryPool;
+GetSemaphoreCounterValueFunc                           getSemaphoreCounterValue;
+WaitSemaphoresFunc                                                     waitSemaphores;
+SignalSemaphoreFunc                                                    signalSemaphore;
+GetBufferDeviceAddressFunc                                     getBufferDeviceAddress;
+GetBufferOpaqueCaptureAddressFunc                      getBufferOpaqueCaptureAddress;
+GetDeviceMemoryOpaqueCaptureAddressFunc                getDeviceMemoryOpaqueCaptureAddress;
+CreateSwapchainKHRFunc                                         createSwapchainKHR;
+GetSwapchainImagesKHRFunc                                      getSwapchainImagesKHR;
+AcquireNextImageKHRFunc                                                acquireNextImageKHR;
+QueuePresentKHRFunc                                                    queuePresentKHR;
+GetDeviceGroupPresentCapabilitiesKHRFunc       getDeviceGroupPresentCapabilitiesKHR;
+GetDeviceGroupSurfacePresentModesKHRFunc       getDeviceGroupSurfacePresentModesKHR;
+AcquireNextImage2KHRFunc                                       acquireNextImage2KHR;
+CreateSharedSwapchainsKHRFunc                          createSharedSwapchainsKHR;
+GetMemoryFdKHRFunc                                                     getMemoryFdKHR;
+GetMemoryFdPropertiesKHRFunc                           getMemoryFdPropertiesKHR;
+ImportSemaphoreFdKHRFunc                                       importSemaphoreFdKHR;
+GetSemaphoreFdKHRFunc                                          getSemaphoreFdKHR;
+GetSwapchainStatusKHRFunc                                      getSwapchainStatusKHR;
+ImportFenceFdKHRFunc                                           importFenceFdKHR;
+GetFenceFdKHRFunc                                                      getFenceFdKHR;
+CmdSetFragmentShadingRateKHRFunc                       cmdSetFragmentShadingRateKHR;
+GetFaultDataKHRFunc                                                    getFaultDataKHR;
+CmdRefreshObjectsKHRFunc                                       cmdRefreshObjectsKHR;
+CmdCopyBuffer2KHRFunc                                          cmdCopyBuffer2KHR;
+CmdCopyImage2KHRFunc                                           cmdCopyImage2KHR;
+CmdCopyBufferToImage2KHRFunc                           cmdCopyBufferToImage2KHR;
+CmdCopyImageToBuffer2KHRFunc                           cmdCopyImageToBuffer2KHR;
+CmdBlitImage2KHRFunc                                           cmdBlitImage2KHR;
+CmdResolveImage2KHRFunc                                                cmdResolveImage2KHR;
+DisplayPowerControlEXTFunc                                     displayPowerControlEXT;
+RegisterDeviceEventEXTFunc                                     registerDeviceEventEXT;
+RegisterDisplayEventEXTFunc                                    registerDisplayEventEXT;
+GetSwapchainCounterEXTFunc                                     getSwapchainCounterEXT;
+CmdSetDiscardRectangleEXTFunc                          cmdSetDiscardRectangleEXT;
+SetHdrMetadataEXTFunc                                          setHdrMetadataEXT;
+CmdSetSampleLocationsEXTFunc                           cmdSetSampleLocationsEXT;
+GetImageDrmFormatModifierPropertiesEXTFunc     getImageDrmFormatModifierPropertiesEXT;
+GetMemoryHostPointerPropertiesEXTFunc          getMemoryHostPointerPropertiesEXT;
+GetCalibratedTimestampsEXTFunc                         getCalibratedTimestampsEXT;
+CmdSetLineStippleEXTFunc                                       cmdSetLineStippleEXT;
+CmdSetCullModeEXTFunc                                          cmdSetCullModeEXT;
+CmdSetFrontFaceEXTFunc                                         cmdSetFrontFaceEXT;
+CmdSetPrimitiveTopologyEXTFunc                         cmdSetPrimitiveTopologyEXT;
+CmdSetViewportWithCountEXTFunc                         cmdSetViewportWithCountEXT;
+CmdSetScissorWithCountEXTFunc                          cmdSetScissorWithCountEXT;
+CmdBindVertexBuffers2EXTFunc                           cmdBindVertexBuffers2EXT;
+CmdSetDepthTestEnableEXTFunc                           cmdSetDepthTestEnableEXT;
+CmdSetDepthWriteEnableEXTFunc                          cmdSetDepthWriteEnableEXT;
+CmdSetDepthCompareOpEXTFunc                                    cmdSetDepthCompareOpEXT;
+CmdSetDepthBoundsTestEnableEXTFunc                     cmdSetDepthBoundsTestEnableEXT;
+CmdSetStencilTestEnableEXTFunc                         cmdSetStencilTestEnableEXT;
+CmdSetStencilOpEXTFunc                                         cmdSetStencilOpEXT;
diff --git a/external/vulkancts/framework/vulkan/generated/vulkansc/vkDeviceProperties.inl b/external/vulkancts/framework/vulkan/generated/vulkansc/vkDeviceProperties.inl
new file mode 100644 (file)
index 0000000..e0494d7
--- /dev/null
@@ -0,0 +1,239 @@
+/* WARNING: This is auto-generated file. Do not modify, since changes will
+ * be lost! Modify the generating script instead.
+ */
+#include "vkDeviceProperties.hpp"
+
+namespace vk
+{
+#define VK_EXT_BLEND_OPERATION_ADVANCED_EXTENSION_NAME "VK_EXT_blend_operation_advanced"
+#define VK_EXT_CONSERVATIVE_RASTERIZATION_EXTENSION_NAME "VK_EXT_conservative_rasterization"
+#define VK_EXT_CUSTOM_BORDER_COLOR_EXTENSION_NAME "VK_EXT_custom_border_color"
+#define DECL_DEPTH_STENCIL_RESOLVE_EXTENSION_NAME "core_property"
+#define DECL_DESCRIPTOR_INDEXING_EXTENSION_NAME "core_property"
+#define VK_EXT_DISCARD_RECTANGLES_EXTENSION_NAME "VK_EXT_discard_rectangles"
+#define DECL_DRIVER_EXTENSION_NAME "core_property"
+#define VK_EXT_EXTERNAL_MEMORY_HOST_EXTENSION_NAME "VK_EXT_external_memory_host"
+#define VK_KHR_FAULT_HANDLING_EXTENSION_NAME "VK_KHR_fault_handling"
+#define DECL_FLOAT_CONTROLS_EXTENSION_NAME "core_property"
+#define VK_KHR_FRAGMENT_SHADING_RATE_EXTENSION_NAME "VK_KHR_fragment_shading_rate"
+#define DECL_ID_EXTENSION_NAME "core_property"
+#define VK_EXT_LINE_RASTERIZATION_EXTENSION_NAME "VK_EXT_line_rasterization"
+#define DECL_MAINTENANCE_3_EXTENSION_NAME "core_property"
+#define DECL_MULTIVIEW_EXTENSION_NAME "core_property"
+#define DECL_POINT_CLIPPING_EXTENSION_NAME "core_property"
+#define DECL_PROTECTED_MEMORY_EXTENSION_NAME "core_property"
+#define VK_EXT_ROBUSTNESS_2_EXTENSION_NAME "VK_EXT_robustness2"
+#define DECL_SAMPLER_FILTER_MINMAX_EXTENSION_NAME "core_property"
+#define VK_EXT_SAMPLE_LOCATIONS_EXTENSION_NAME "VK_EXT_sample_locations"
+#define DECL_SUBGROUP_EXTENSION_NAME "core_property"
+#define VK_EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME "VK_EXT_subgroup_size_control"
+#define VK_EXT_TEXEL_BUFFER_ALIGNMENT_EXTENSION_NAME "VK_EXT_texel_buffer_alignment"
+#define DECL_TIMELINE_SEMAPHORE_EXTENSION_NAME "core_property"
+#define VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME "VK_EXT_vertex_attribute_divisor"
+
+
+template<> void initPropertyFromBlob<VkPhysicalDeviceSubgroupProperties>(VkPhysicalDeviceSubgroupProperties& propertyType, const AllPropertiesBlobs& allPropertiesBlobs)
+{
+       propertyType.subgroupSize = allPropertiesBlobs.vk11.subgroupSize;
+       propertyType.supportedStages = allPropertiesBlobs.vk11.subgroupSupportedStages;
+       propertyType.supportedOperations = allPropertiesBlobs.vk11.subgroupSupportedOperations;
+       propertyType.quadOperationsInAllStages = allPropertiesBlobs.vk11.subgroupQuadOperationsInAllStages;
+}
+template<> void initPropertyFromBlob<VkPhysicalDevicePointClippingProperties>(VkPhysicalDevicePointClippingProperties& propertyType, const AllPropertiesBlobs& allPropertiesBlobs)
+{
+       propertyType.pointClippingBehavior = allPropertiesBlobs.vk11.pointClippingBehavior;
+}
+template<> void initPropertyFromBlob<VkPhysicalDeviceMultiviewProperties>(VkPhysicalDeviceMultiviewProperties& propertyType, const AllPropertiesBlobs& allPropertiesBlobs)
+{
+       propertyType.maxMultiviewViewCount = allPropertiesBlobs.vk11.maxMultiviewViewCount;
+       propertyType.maxMultiviewInstanceIndex = allPropertiesBlobs.vk11.maxMultiviewInstanceIndex;
+}
+template<> void initPropertyFromBlob<VkPhysicalDeviceProtectedMemoryProperties>(VkPhysicalDeviceProtectedMemoryProperties& propertyType, const AllPropertiesBlobs& allPropertiesBlobs)
+{
+       propertyType.protectedNoFault = allPropertiesBlobs.vk11.protectedNoFault;
+}
+template<> void initPropertyFromBlob<VkPhysicalDeviceIDProperties>(VkPhysicalDeviceIDProperties& propertyType, const AllPropertiesBlobs& allPropertiesBlobs)
+{
+       memcpy(propertyType.deviceUUID, allPropertiesBlobs.vk11.deviceUUID, sizeof(deUint8) * VK_UUID_SIZE);
+       memcpy(propertyType.driverUUID, allPropertiesBlobs.vk11.driverUUID, sizeof(deUint8) * VK_UUID_SIZE);
+       memcpy(propertyType.deviceLUID, allPropertiesBlobs.vk11.deviceLUID, sizeof(deUint8) * VK_LUID_SIZE);
+       propertyType.deviceNodeMask = allPropertiesBlobs.vk11.deviceNodeMask;
+       propertyType.deviceLUIDValid = allPropertiesBlobs.vk11.deviceLUIDValid;
+}
+template<> void initPropertyFromBlob<VkPhysicalDeviceMaintenance3Properties>(VkPhysicalDeviceMaintenance3Properties& propertyType, const AllPropertiesBlobs& allPropertiesBlobs)
+{
+       propertyType.maxPerSetDescriptors = allPropertiesBlobs.vk11.maxPerSetDescriptors;
+       propertyType.maxMemoryAllocationSize = allPropertiesBlobs.vk11.maxMemoryAllocationSize;
+}
+template<> void initPropertyFromBlob<VkPhysicalDeviceDriverProperties>(VkPhysicalDeviceDriverProperties& propertyType, const AllPropertiesBlobs& allPropertiesBlobs)
+{
+       propertyType.driverID = allPropertiesBlobs.vk12.driverID;
+       memcpy(propertyType.driverName, allPropertiesBlobs.vk12.driverName, sizeof(char) * VK_MAX_DRIVER_NAME_SIZE);
+       memcpy(propertyType.driverInfo, allPropertiesBlobs.vk12.driverInfo, sizeof(char) * VK_MAX_DRIVER_INFO_SIZE);
+       propertyType.conformanceVersion = allPropertiesBlobs.vk12.conformanceVersion;
+}
+template<> void initPropertyFromBlob<VkPhysicalDeviceFloatControlsProperties>(VkPhysicalDeviceFloatControlsProperties& propertyType, const AllPropertiesBlobs& allPropertiesBlobs)
+{
+       propertyType.denormBehaviorIndependence = allPropertiesBlobs.vk12.denormBehaviorIndependence;
+       propertyType.roundingModeIndependence = allPropertiesBlobs.vk12.roundingModeIndependence;
+       propertyType.shaderSignedZeroInfNanPreserveFloat16 = allPropertiesBlobs.vk12.shaderSignedZeroInfNanPreserveFloat16;
+       propertyType.shaderSignedZeroInfNanPreserveFloat32 = allPropertiesBlobs.vk12.shaderSignedZeroInfNanPreserveFloat32;
+       propertyType.shaderSignedZeroInfNanPreserveFloat64 = allPropertiesBlobs.vk12.shaderSignedZeroInfNanPreserveFloat64;
+       propertyType.shaderDenormPreserveFloat16 = allPropertiesBlobs.vk12.shaderDenormPreserveFloat16;
+       propertyType.shaderDenormPreserveFloat32 = allPropertiesBlobs.vk12.shaderDenormPreserveFloat32;
+       propertyType.shaderDenormPreserveFloat64 = allPropertiesBlobs.vk12.shaderDenormPreserveFloat64;
+       propertyType.shaderDenormFlushToZeroFloat16 = allPropertiesBlobs.vk12.shaderDenormFlushToZeroFloat16;
+       propertyType.shaderDenormFlushToZeroFloat32 = allPropertiesBlobs.vk12.shaderDenormFlushToZeroFloat32;
+       propertyType.shaderDenormFlushToZeroFloat64 = allPropertiesBlobs.vk12.shaderDenormFlushToZeroFloat64;
+       propertyType.shaderRoundingModeRTEFloat16 = allPropertiesBlobs.vk12.shaderRoundingModeRTEFloat16;
+       propertyType.shaderRoundingModeRTEFloat32 = allPropertiesBlobs.vk12.shaderRoundingModeRTEFloat32;
+       propertyType.shaderRoundingModeRTEFloat64 = allPropertiesBlobs.vk12.shaderRoundingModeRTEFloat64;
+       propertyType.shaderRoundingModeRTZFloat16 = allPropertiesBlobs.vk12.shaderRoundingModeRTZFloat16;
+       propertyType.shaderRoundingModeRTZFloat32 = allPropertiesBlobs.vk12.shaderRoundingModeRTZFloat32;
+       propertyType.shaderRoundingModeRTZFloat64 = allPropertiesBlobs.vk12.shaderRoundingModeRTZFloat64;
+}
+template<> void initPropertyFromBlob<VkPhysicalDeviceDescriptorIndexingProperties>(VkPhysicalDeviceDescriptorIndexingProperties& propertyType, const AllPropertiesBlobs& allPropertiesBlobs)
+{
+       propertyType.maxUpdateAfterBindDescriptorsInAllPools = allPropertiesBlobs.vk12.maxUpdateAfterBindDescriptorsInAllPools;
+       propertyType.shaderUniformBufferArrayNonUniformIndexingNative = allPropertiesBlobs.vk12.shaderUniformBufferArrayNonUniformIndexingNative;
+       propertyType.shaderSampledImageArrayNonUniformIndexingNative = allPropertiesBlobs.vk12.shaderSampledImageArrayNonUniformIndexingNative;
+       propertyType.shaderStorageBufferArrayNonUniformIndexingNative = allPropertiesBlobs.vk12.shaderStorageBufferArrayNonUniformIndexingNative;
+       propertyType.shaderStorageImageArrayNonUniformIndexingNative = allPropertiesBlobs.vk12.shaderStorageImageArrayNonUniformIndexingNative;
+       propertyType.shaderInputAttachmentArrayNonUniformIndexingNative = allPropertiesBlobs.vk12.shaderInputAttachmentArrayNonUniformIndexingNative;
+       propertyType.robustBufferAccessUpdateAfterBind = allPropertiesBlobs.vk12.robustBufferAccessUpdateAfterBind;
+       propertyType.quadDivergentImplicitLod = allPropertiesBlobs.vk12.quadDivergentImplicitLod;
+       propertyType.maxPerStageDescriptorUpdateAfterBindSamplers = allPropertiesBlobs.vk12.maxPerStageDescriptorUpdateAfterBindSamplers;
+       propertyType.maxPerStageDescriptorUpdateAfterBindUniformBuffers = allPropertiesBlobs.vk12.maxPerStageDescriptorUpdateAfterBindUniformBuffers;
+       propertyType.maxPerStageDescriptorUpdateAfterBindStorageBuffers = allPropertiesBlobs.vk12.maxPerStageDescriptorUpdateAfterBindStorageBuffers;
+       propertyType.maxPerStageDescriptorUpdateAfterBindSampledImages = allPropertiesBlobs.vk12.maxPerStageDescriptorUpdateAfterBindSampledImages;
+       propertyType.maxPerStageDescriptorUpdateAfterBindStorageImages = allPropertiesBlobs.vk12.maxPerStageDescriptorUpdateAfterBindStorageImages;
+       propertyType.maxPerStageDescriptorUpdateAfterBindInputAttachments = allPropertiesBlobs.vk12.maxPerStageDescriptorUpdateAfterBindInputAttachments;
+       propertyType.maxPerStageUpdateAfterBindResources = allPropertiesBlobs.vk12.maxPerStageUpdateAfterBindResources;
+       propertyType.maxDescriptorSetUpdateAfterBindSamplers = allPropertiesBlobs.vk12.maxDescriptorSetUpdateAfterBindSamplers;
+       propertyType.maxDescriptorSetUpdateAfterBindUniformBuffers = allPropertiesBlobs.vk12.maxDescriptorSetUpdateAfterBindUniformBuffers;
+       propertyType.maxDescriptorSetUpdateAfterBindUniformBuffersDynamic = allPropertiesBlobs.vk12.maxDescriptorSetUpdateAfterBindUniformBuffersDynamic;
+       propertyType.maxDescriptorSetUpdateAfterBindStorageBuffers = allPropertiesBlobs.vk12.maxDescriptorSetUpdateAfterBindStorageBuffers;
+       propertyType.maxDescriptorSetUpdateAfterBindStorageBuffersDynamic = allPropertiesBlobs.vk12.maxDescriptorSetUpdateAfterBindStorageBuffersDynamic;
+       propertyType.maxDescriptorSetUpdateAfterBindSampledImages = allPropertiesBlobs.vk12.maxDescriptorSetUpdateAfterBindSampledImages;
+       propertyType.maxDescriptorSetUpdateAfterBindStorageImages = allPropertiesBlobs.vk12.maxDescriptorSetUpdateAfterBindStorageImages;
+       propertyType.maxDescriptorSetUpdateAfterBindInputAttachments = allPropertiesBlobs.vk12.maxDescriptorSetUpdateAfterBindInputAttachments;
+}
+template<> void initPropertyFromBlob<VkPhysicalDeviceDepthStencilResolveProperties>(VkPhysicalDeviceDepthStencilResolveProperties& propertyType, const AllPropertiesBlobs& allPropertiesBlobs)
+{
+       propertyType.supportedDepthResolveModes = allPropertiesBlobs.vk12.supportedDepthResolveModes;
+       propertyType.supportedStencilResolveModes = allPropertiesBlobs.vk12.supportedStencilResolveModes;
+       propertyType.independentResolveNone = allPropertiesBlobs.vk12.independentResolveNone;
+       propertyType.independentResolve = allPropertiesBlobs.vk12.independentResolve;
+}
+template<> void initPropertyFromBlob<VkPhysicalDeviceSamplerFilterMinmaxProperties>(VkPhysicalDeviceSamplerFilterMinmaxProperties& propertyType, const AllPropertiesBlobs& allPropertiesBlobs)
+{
+       propertyType.filterMinmaxSingleComponentFormats = allPropertiesBlobs.vk12.filterMinmaxSingleComponentFormats;
+       propertyType.filterMinmaxImageComponentMapping = allPropertiesBlobs.vk12.filterMinmaxImageComponentMapping;
+}
+template<> void initPropertyFromBlob<VkPhysicalDeviceTimelineSemaphoreProperties>(VkPhysicalDeviceTimelineSemaphoreProperties& propertyType, const AllPropertiesBlobs& allPropertiesBlobs)
+{
+       propertyType.maxTimelineSemaphoreValueDifference = allPropertiesBlobs.vk12.maxTimelineSemaphoreValueDifference;
+}
+
+// generic template is not enough for some compilers
+template<> void initPropertyFromBlob<VkPhysicalDeviceMemoryProperties>(VkPhysicalDeviceMemoryProperties&, const AllPropertiesBlobs&) {}
+template<> void initPropertyFromBlob<VkPhysicalDeviceSparseProperties>(VkPhysicalDeviceSparseProperties&, const AllPropertiesBlobs&) {}
+template<> void initPropertyFromBlob<VkPhysicalDeviceVulkanSC10Properties>(VkPhysicalDeviceVulkanSC10Properties&, const AllPropertiesBlobs&) {}
+template<> void initPropertyFromBlob<VkPhysicalDeviceFaultHandlingProperties>(VkPhysicalDeviceFaultHandlingProperties&, const AllPropertiesBlobs&) {}
+template<> void initPropertyFromBlob<VkPhysicalDeviceGroupProperties>(VkPhysicalDeviceGroupProperties&, const AllPropertiesBlobs&) {}
+template<> void initPropertyFromBlob<VkPhysicalDeviceMemoryProperties2>(VkPhysicalDeviceMemoryProperties2&, const AllPropertiesBlobs&) {}
+template<> void initPropertyFromBlob<VkPhysicalDeviceFragmentShadingRatePropertiesKHR>(VkPhysicalDeviceFragmentShadingRatePropertiesKHR&, const AllPropertiesBlobs&) {}
+template<> void initPropertyFromBlob<VkPhysicalDeviceDiscardRectanglePropertiesEXT>(VkPhysicalDeviceDiscardRectanglePropertiesEXT&, const AllPropertiesBlobs&) {}
+template<> void initPropertyFromBlob<VkPhysicalDeviceConservativeRasterizationPropertiesEXT>(VkPhysicalDeviceConservativeRasterizationPropertiesEXT&, const AllPropertiesBlobs&) {}
+template<> void initPropertyFromBlob<VkPhysicalDeviceSampleLocationsPropertiesEXT>(VkPhysicalDeviceSampleLocationsPropertiesEXT&, const AllPropertiesBlobs&) {}
+template<> void initPropertyFromBlob<VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT>(VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT&, const AllPropertiesBlobs&) {}
+template<> void initPropertyFromBlob<VkPhysicalDeviceExternalMemoryHostPropertiesEXT>(VkPhysicalDeviceExternalMemoryHostPropertiesEXT&, const AllPropertiesBlobs&) {}
+template<> void initPropertyFromBlob<VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT>(VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT&, const AllPropertiesBlobs&) {}
+template<> void initPropertyFromBlob<VkPhysicalDevicePCIBusInfoPropertiesEXT>(VkPhysicalDevicePCIBusInfoPropertiesEXT&, const AllPropertiesBlobs&) {}
+template<> void initPropertyFromBlob<VkPhysicalDeviceSubgroupSizeControlPropertiesEXT>(VkPhysicalDeviceSubgroupSizeControlPropertiesEXT&, const AllPropertiesBlobs&) {}
+template<> void initPropertyFromBlob<VkPhysicalDeviceMemoryBudgetPropertiesEXT>(VkPhysicalDeviceMemoryBudgetPropertiesEXT&, const AllPropertiesBlobs&) {}
+template<> void initPropertyFromBlob<VkPhysicalDeviceLineRasterizationPropertiesEXT>(VkPhysicalDeviceLineRasterizationPropertiesEXT&, const AllPropertiesBlobs&) {}
+template<> void initPropertyFromBlob<VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT>(VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT&, const AllPropertiesBlobs&) {}
+template<> void initPropertyFromBlob<VkPhysicalDeviceRobustness2PropertiesEXT>(VkPhysicalDeviceRobustness2PropertiesEXT&, const AllPropertiesBlobs&) {}
+template<> void initPropertyFromBlob<VkPhysicalDeviceCustomBorderColorPropertiesEXT>(VkPhysicalDeviceCustomBorderColorPropertiesEXT&, const AllPropertiesBlobs&) {}
+
+
+template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT, VK_EXT_BLEND_OPERATION_ADVANCED_EXTENSION_NAME, VK_EXT_BLEND_OPERATION_ADVANCED_SPEC_VERSION, 25}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceConservativeRasterizationPropertiesEXT>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT, VK_EXT_CONSERVATIVE_RASTERIZATION_EXTENSION_NAME, VK_EXT_CONSERVATIVE_RASTERIZATION_SPEC_VERSION, 24}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceCustomBorderColorPropertiesEXT>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT, VK_EXT_CUSTOM_BORDER_COLOR_EXTENSION_NAME, VK_EXT_CUSTOM_BORDER_COLOR_SPEC_VERSION, 23}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceDepthStencilResolveProperties>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES, DECL_DEPTH_STENCIL_RESOLVE_EXTENSION_NAME, 0, 22}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceDescriptorIndexingProperties>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES, DECL_DESCRIPTOR_INDEXING_EXTENSION_NAME, 0, 21}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceDiscardRectanglePropertiesEXT>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT, VK_EXT_DISCARD_RECTANGLES_EXTENSION_NAME, VK_EXT_DISCARD_RECTANGLES_SPEC_VERSION, 20}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceDriverProperties>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES, DECL_DRIVER_EXTENSION_NAME, 0, 19}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceExternalMemoryHostPropertiesEXT>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT, VK_EXT_EXTERNAL_MEMORY_HOST_EXTENSION_NAME, VK_EXT_EXTERNAL_MEMORY_HOST_SPEC_VERSION, 18}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceFaultHandlingProperties>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FAULT_HANDLING_PROPERTIES, VK_KHR_FAULT_HANDLING_EXTENSION_NAME, VK_KHR_FAULT_HANDLING_SPEC_VERSION, 17}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceFloatControlsProperties>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES, DECL_FLOAT_CONTROLS_EXTENSION_NAME, 0, 16}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceFragmentShadingRatePropertiesKHR>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_PROPERTIES_KHR, VK_KHR_FRAGMENT_SHADING_RATE_EXTENSION_NAME, VK_KHR_FRAGMENT_SHADING_RATE_SPEC_VERSION, 15}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceIDProperties>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES, DECL_ID_EXTENSION_NAME, 0, 14}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceLineRasterizationPropertiesEXT>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT, VK_EXT_LINE_RASTERIZATION_EXTENSION_NAME, VK_EXT_LINE_RASTERIZATION_SPEC_VERSION, 13}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceMaintenance3Properties>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES, DECL_MAINTENANCE_3_EXTENSION_NAME, 0, 12}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceMultiviewProperties>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES, DECL_MULTIVIEW_EXTENSION_NAME, 0, 11}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDevicePointClippingProperties>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES, DECL_POINT_CLIPPING_EXTENSION_NAME, 0, 10}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceProtectedMemoryProperties>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES, DECL_PROTECTED_MEMORY_EXTENSION_NAME, 0, 9}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceRobustness2PropertiesEXT>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT, VK_EXT_ROBUSTNESS_2_EXTENSION_NAME, VK_EXT_ROBUSTNESS_2_SPEC_VERSION, 8}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceSamplerFilterMinmaxProperties>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES, DECL_SAMPLER_FILTER_MINMAX_EXTENSION_NAME, 0, 7}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceSampleLocationsPropertiesEXT>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT, VK_EXT_SAMPLE_LOCATIONS_EXTENSION_NAME, VK_EXT_SAMPLE_LOCATIONS_SPEC_VERSION, 6}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceSubgroupProperties>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES, DECL_SUBGROUP_EXTENSION_NAME, 0, 5}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceSubgroupSizeControlPropertiesEXT>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT, VK_EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME, VK_EXT_SUBGROUP_SIZE_CONTROL_SPEC_VERSION, 4}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT, VK_EXT_TEXEL_BUFFER_ALIGNMENT_EXTENSION_NAME, VK_EXT_TEXEL_BUFFER_ALIGNMENT_SPEC_VERSION, 3}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceTimelineSemaphoreProperties>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES, DECL_TIMELINE_SEMAPHORE_EXTENSION_NAME, 0, 2}; }
+template<> PropertyDesc makePropertyDesc<VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT>(void) { return PropertyDesc{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT, VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME, VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_SPEC_VERSION, 1}; }
+
+
+static const PropertyStructCreationData propertyStructCreationArray[] =
+{
+       { createPropertyStructWrapper<VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT>, VK_EXT_BLEND_OPERATION_ADVANCED_EXTENSION_NAME, VK_EXT_BLEND_OPERATION_ADVANCED_SPEC_VERSION },
+       { createPropertyStructWrapper<VkPhysicalDeviceConservativeRasterizationPropertiesEXT>, VK_EXT_CONSERVATIVE_RASTERIZATION_EXTENSION_NAME, VK_EXT_CONSERVATIVE_RASTERIZATION_SPEC_VERSION },
+       { createPropertyStructWrapper<VkPhysicalDeviceCustomBorderColorPropertiesEXT>, VK_EXT_CUSTOM_BORDER_COLOR_EXTENSION_NAME, VK_EXT_CUSTOM_BORDER_COLOR_SPEC_VERSION },
+       { createPropertyStructWrapper<VkPhysicalDeviceDepthStencilResolveProperties>, DECL_DEPTH_STENCIL_RESOLVE_EXTENSION_NAME, 0 },
+       { createPropertyStructWrapper<VkPhysicalDeviceDescriptorIndexingProperties>, DECL_DESCRIPTOR_INDEXING_EXTENSION_NAME, 0 },
+       { createPropertyStructWrapper<VkPhysicalDeviceDiscardRectanglePropertiesEXT>, VK_EXT_DISCARD_RECTANGLES_EXTENSION_NAME, VK_EXT_DISCARD_RECTANGLES_SPEC_VERSION },
+       { createPropertyStructWrapper<VkPhysicalDeviceDriverProperties>, DECL_DRIVER_EXTENSION_NAME, 0 },
+       { createPropertyStructWrapper<VkPhysicalDeviceExternalMemoryHostPropertiesEXT>, VK_EXT_EXTERNAL_MEMORY_HOST_EXTENSION_NAME, VK_EXT_EXTERNAL_MEMORY_HOST_SPEC_VERSION },
+       { createPropertyStructWrapper<VkPhysicalDeviceFaultHandlingProperties>, VK_KHR_FAULT_HANDLING_EXTENSION_NAME, VK_KHR_FAULT_HANDLING_SPEC_VERSION },
+       { createPropertyStructWrapper<VkPhysicalDeviceFloatControlsProperties>, DECL_FLOAT_CONTROLS_EXTENSION_NAME, 0 },
+       { createPropertyStructWrapper<VkPhysicalDeviceFragmentShadingRatePropertiesKHR>, VK_KHR_FRAGMENT_SHADING_RATE_EXTENSION_NAME, VK_KHR_FRAGMENT_SHADING_RATE_SPEC_VERSION },
+       { createPropertyStructWrapper<VkPhysicalDeviceIDProperties>, DECL_ID_EXTENSION_NAME, 0 },
+       { createPropertyStructWrapper<VkPhysicalDeviceLineRasterizationPropertiesEXT>, VK_EXT_LINE_RASTERIZATION_EXTENSION_NAME, VK_EXT_LINE_RASTERIZATION_SPEC_VERSION },
+       { createPropertyStructWrapper<VkPhysicalDeviceMaintenance3Properties>, DECL_MAINTENANCE_3_EXTENSION_NAME, 0 },
+       { createPropertyStructWrapper<VkPhysicalDeviceMultiviewProperties>, DECL_MULTIVIEW_EXTENSION_NAME, 0 },
+       { createPropertyStructWrapper<VkPhysicalDevicePointClippingProperties>, DECL_POINT_CLIPPING_EXTENSION_NAME, 0 },
+       { createPropertyStructWrapper<VkPhysicalDeviceProtectedMemoryProperties>, DECL_PROTECTED_MEMORY_EXTENSION_NAME, 0 },
+       { createPropertyStructWrapper<VkPhysicalDeviceRobustness2PropertiesEXT>, VK_EXT_ROBUSTNESS_2_EXTENSION_NAME, VK_EXT_ROBUSTNESS_2_SPEC_VERSION },
+       { createPropertyStructWrapper<VkPhysicalDeviceSamplerFilterMinmaxProperties>, DECL_SAMPLER_FILTER_MINMAX_EXTENSION_NAME, 0 },
+       { createPropertyStructWrapper<VkPhysicalDeviceSampleLocationsPropertiesEXT>, VK_EXT_SAMPLE_LOCATIONS_EXTENSION_NAME, VK_EXT_SAMPLE_LOCATIONS_SPEC_VERSION },
+       { createPropertyStructWrapper<VkPhysicalDeviceSubgroupProperties>, DECL_SUBGROUP_EXTENSION_NAME, 0 },
+       { createPropertyStructWrapper<VkPhysicalDeviceSubgroupSizeControlPropertiesEXT>, VK_EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME, VK_EXT_SUBGROUP_SIZE_CONTROL_SPEC_VERSION },
+       { createPropertyStructWrapper<VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT>, VK_EXT_TEXEL_BUFFER_ALIGNMENT_EXTENSION_NAME, VK_EXT_TEXEL_BUFFER_ALIGNMENT_SPEC_VERSION },
+       { createPropertyStructWrapper<VkPhysicalDeviceTimelineSemaphoreProperties>, DECL_TIMELINE_SEMAPHORE_EXTENSION_NAME, 0 },
+       { createPropertyStructWrapper<VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT>, VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME, VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_SPEC_VERSION },
+};
+
+bool isPartOfBlobProperties (VkStructureType sType)
+{
+       const std::vector<VkStructureType> sTypeVect =  {
+               // Vulkan11
+               VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES,
+               VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES,
+               VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES,
+               VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES,
+               VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES,
+               VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES,
+               // Vulkan12
+               VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES,
+               VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES,
+               VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES,
+               VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES,
+               VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES,
+               VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES,
+       };
+       return de::contains(sTypeVect.begin(), sTypeVect.end(), sType);
+}
+
+} // vk
+
diff --git a/external/vulkancts/framework/vulkan/generated/vulkansc/vkDevicePropertiesForContextDecl.inl b/external/vulkancts/framework/vulkan/generated/vulkansc/vkDevicePropertiesForContextDecl.inl
new file mode 100644 (file)
index 0000000..dad5822
--- /dev/null
@@ -0,0 +1,28 @@
+/* WARNING: This is auto-generated file. Do not modify, since changes will
+ * be lost! Modify the generating script instead.
+ */
+const vk::VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT&         getBlendOperationAdvancedPropertiesEXT          (void) const;
+const vk::VkPhysicalDeviceConservativeRasterizationPropertiesEXT&      getConservativeRasterizationPropertiesEXT       (void) const;
+const vk::VkPhysicalDeviceCustomBorderColorPropertiesEXT&                      getCustomBorderColorPropertiesEXT                       (void) const;
+const vk::VkPhysicalDeviceDepthStencilResolveProperties&                       getDepthStencilResolveProperties                        (void) const;
+const vk::VkPhysicalDeviceDescriptorIndexingProperties&                                getDescriptorIndexingProperties                         (void) const;
+const vk::VkPhysicalDeviceDiscardRectanglePropertiesEXT&                       getDiscardRectanglePropertiesEXT                        (void) const;
+const vk::VkPhysicalDeviceDriverProperties&                                                    getDriverProperties                                                     (void) const;
+const vk::VkPhysicalDeviceExternalMemoryHostPropertiesEXT&                     getExternalMemoryHostPropertiesEXT                      (void) const;
+const vk::VkPhysicalDeviceFaultHandlingProperties&                                     getFaultHandlingProperties                                      (void) const;
+const vk::VkPhysicalDeviceFloatControlsProperties&                                     getFloatControlsProperties                                      (void) const;
+const vk::VkPhysicalDeviceFragmentShadingRatePropertiesKHR&                    getFragmentShadingRateProperties                        (void) const;
+const vk::VkPhysicalDeviceIDProperties&                                                                getIDProperties                                                         (void) const;
+const vk::VkPhysicalDeviceLineRasterizationPropertiesEXT&                      getLineRasterizationPropertiesEXT                       (void) const;
+const vk::VkPhysicalDeviceMaintenance3Properties&                                      getMaintenance3Properties                                       (void) const;
+const vk::VkPhysicalDeviceMultiviewProperties&                                         getMultiviewProperties                                          (void) const;
+const vk::VkPhysicalDevicePointClippingProperties&                                     getPointClippingProperties                                      (void) const;
+const vk::VkPhysicalDeviceProtectedMemoryProperties&                           getProtectedMemoryProperties                            (void) const;
+const vk::VkPhysicalDeviceRobustness2PropertiesEXT&                                    getRobustness2PropertiesEXT                                     (void) const;
+const vk::VkPhysicalDeviceSamplerFilterMinmaxProperties&                       getSamplerFilterMinmaxProperties                        (void) const;
+const vk::VkPhysicalDeviceSampleLocationsPropertiesEXT&                                getSampleLocationsPropertiesEXT                         (void) const;
+const vk::VkPhysicalDeviceSubgroupProperties&                                          getSubgroupProperties                                           (void) const;
+const vk::VkPhysicalDeviceSubgroupSizeControlPropertiesEXT&                    getSubgroupSizeControlPropertiesEXT                     (void) const;
+const vk::VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT&           getTexelBufferAlignmentPropertiesEXT            (void) const;
+const vk::VkPhysicalDeviceTimelineSemaphoreProperties&                         getTimelineSemaphoreProperties                          (void) const;
+const vk::VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT&         getVertexAttributeDivisorPropertiesEXT          (void) const;
diff --git a/external/vulkancts/framework/vulkan/generated/vulkansc/vkDevicePropertiesForContextDefs.inl b/external/vulkancts/framework/vulkan/generated/vulkansc/vkDevicePropertiesForContextDefs.inl
new file mode 100644 (file)
index 0000000..311ff43
--- /dev/null
@@ -0,0 +1,28 @@
+/* WARNING: This is auto-generated file. Do not modify, since changes will
+ * be lost! Modify the generating script instead.
+ */
+const vk::VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT&         Context::getBlendOperationAdvancedPropertiesEXT         (void) const { return m_device->getBlendOperationAdvancedPropertiesEXT();               }
+const vk::VkPhysicalDeviceConservativeRasterizationPropertiesEXT&      Context::getConservativeRasterizationPropertiesEXT      (void) const { return m_device->getConservativeRasterizationPropertiesEXT();    }
+const vk::VkPhysicalDeviceCustomBorderColorPropertiesEXT&                      Context::getCustomBorderColorPropertiesEXT                      (void) const { return m_device->getCustomBorderColorPropertiesEXT();                    }
+const vk::VkPhysicalDeviceDepthStencilResolveProperties&                       Context::getDepthStencilResolveProperties                       (void) const { return m_device->getDepthStencilResolveProperties();                             }
+const vk::VkPhysicalDeviceDescriptorIndexingProperties&                                Context::getDescriptorIndexingProperties                        (void) const { return m_device->getDescriptorIndexingProperties();                              }
+const vk::VkPhysicalDeviceDiscardRectanglePropertiesEXT&                       Context::getDiscardRectanglePropertiesEXT                       (void) const { return m_device->getDiscardRectanglePropertiesEXT();                             }
+const vk::VkPhysicalDeviceDriverProperties&                                                    Context::getDriverProperties                                            (void) const { return m_device->getDriverProperties();                                                  }
+const vk::VkPhysicalDeviceExternalMemoryHostPropertiesEXT&                     Context::getExternalMemoryHostPropertiesEXT                     (void) const { return m_device->getExternalMemoryHostPropertiesEXT();                   }
+const vk::VkPhysicalDeviceFaultHandlingProperties&                                     Context::getFaultHandlingProperties                                     (void) const { return m_device->getFaultHandlingProperties();                                   }
+const vk::VkPhysicalDeviceFloatControlsProperties&                                     Context::getFloatControlsProperties                                     (void) const { return m_device->getFloatControlsProperties();                                   }
+const vk::VkPhysicalDeviceFragmentShadingRatePropertiesKHR&                    Context::getFragmentShadingRateProperties                       (void) const { return m_device->getFragmentShadingRateProperties();                             }
+const vk::VkPhysicalDeviceIDProperties&                                                                Context::getIDProperties                                                        (void) const { return m_device->getIDProperties();                                                              }
+const vk::VkPhysicalDeviceLineRasterizationPropertiesEXT&                      Context::getLineRasterizationPropertiesEXT                      (void) const { return m_device->getLineRasterizationPropertiesEXT();                    }
+const vk::VkPhysicalDeviceMaintenance3Properties&                                      Context::getMaintenance3Properties                                      (void) const { return m_device->getMaintenance3Properties();                                    }
+const vk::VkPhysicalDeviceMultiviewProperties&                                         Context::getMultiviewProperties                                         (void) const { return m_device->getMultiviewProperties();                                               }
+const vk::VkPhysicalDevicePointClippingProperties&                                     Context::getPointClippingProperties                                     (void) const { return m_device->getPointClippingProperties();                                   }
+const vk::VkPhysicalDeviceProtectedMemoryProperties&                           Context::getProtectedMemoryProperties                           (void) const { return m_device->getProtectedMemoryProperties();                                 }
+const vk::VkPhysicalDeviceRobustness2PropertiesEXT&                                    Context::getRobustness2PropertiesEXT                            (void) const { return m_device->getRobustness2PropertiesEXT();                                  }
+const vk::VkPhysicalDeviceSamplerFilterMinmaxProperties&                       Context::getSamplerFilterMinmaxProperties                       (void) const { return m_device->getSamplerFilterMinmaxProperties();                             }
+const vk::VkPhysicalDeviceSampleLocationsPropertiesEXT&                                Context::getSampleLocationsPropertiesEXT                        (void) const { return m_device->getSampleLocationsPropertiesEXT();                              }
+const vk::VkPhysicalDeviceSubgroupProperties&                                          Context::getSubgroupProperties                                          (void) const { return m_device->getSubgroupProperties();                                                }
+const vk::VkPhysicalDeviceSubgroupSizeControlPropertiesEXT&                    Context::getSubgroupSizeControlPropertiesEXT            (void) const { return m_device->getSubgroupSizeControlPropertiesEXT();                  }
+const vk::VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT&           Context::getTexelBufferAlignmentPropertiesEXT           (void) const { return m_device->getTexelBufferAlignmentPropertiesEXT();                 }
+const vk::VkPhysicalDeviceTimelineSemaphoreProperties&                         Context::getTimelineSemaphoreProperties                         (void) const { return m_device->getTimelineSemaphoreProperties();                               }
+const vk::VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT&         Context::getVertexAttributeDivisorPropertiesEXT         (void) const { return m_device->getVertexAttributeDivisorPropertiesEXT();               }
diff --git a/external/vulkancts/framework/vulkan/generated/vulkansc/vkDevicePropertiesForDefaultDeviceDefs.inl b/external/vulkancts/framework/vulkan/generated/vulkansc/vkDevicePropertiesForDefaultDeviceDefs.inl
new file mode 100644 (file)
index 0000000..6506f02
--- /dev/null
@@ -0,0 +1,28 @@
+/* WARNING: This is auto-generated file. Do not modify, since changes will
+ * be lost! Modify the generating script instead.
+ */
+const VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT&             getBlendOperationAdvancedPropertiesEXT          (void) const { return m_deviceProperties.getPropertyType<VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT>();        }
+const VkPhysicalDeviceConservativeRasterizationPropertiesEXT&  getConservativeRasterizationPropertiesEXT       (void) const { return m_deviceProperties.getPropertyType<VkPhysicalDeviceConservativeRasterizationPropertiesEXT>();     }
+const VkPhysicalDeviceCustomBorderColorPropertiesEXT&                  getCustomBorderColorPropertiesEXT                       (void) const { return m_deviceProperties.getPropertyType<VkPhysicalDeviceCustomBorderColorPropertiesEXT>();                     }
+const VkPhysicalDeviceDepthStencilResolveProperties&                   getDepthStencilResolveProperties                        (void) const { return m_deviceProperties.getPropertyType<VkPhysicalDeviceDepthStencilResolveProperties>();                      }
+const VkPhysicalDeviceDescriptorIndexingProperties&                            getDescriptorIndexingProperties                         (void) const { return m_deviceProperties.getPropertyType<VkPhysicalDeviceDescriptorIndexingProperties>();                       }
+const VkPhysicalDeviceDiscardRectanglePropertiesEXT&                   getDiscardRectanglePropertiesEXT                        (void) const { return m_deviceProperties.getPropertyType<VkPhysicalDeviceDiscardRectanglePropertiesEXT>();                      }
+const VkPhysicalDeviceDriverProperties&                                                        getDriverProperties                                                     (void) const { return m_deviceProperties.getPropertyType<VkPhysicalDeviceDriverProperties>();                                           }
+const VkPhysicalDeviceExternalMemoryHostPropertiesEXT&                 getExternalMemoryHostPropertiesEXT                      (void) const { return m_deviceProperties.getPropertyType<VkPhysicalDeviceExternalMemoryHostPropertiesEXT>();            }
+const VkPhysicalDeviceFaultHandlingProperties&                                 getFaultHandlingProperties                                      (void) const { return m_deviceProperties.getPropertyType<VkPhysicalDeviceFaultHandlingProperties>();                            }
+const VkPhysicalDeviceFloatControlsProperties&                                 getFloatControlsProperties                                      (void) const { return m_deviceProperties.getPropertyType<VkPhysicalDeviceFloatControlsProperties>();                            }
+const VkPhysicalDeviceFragmentShadingRatePropertiesKHR&                        getFragmentShadingRateProperties                        (void) const { return m_deviceProperties.getPropertyType<VkPhysicalDeviceFragmentShadingRatePropertiesKHR>();           }
+const VkPhysicalDeviceIDProperties&                                                            getIDProperties                                                         (void) const { return m_deviceProperties.getPropertyType<VkPhysicalDeviceIDProperties>();                                                       }
+const VkPhysicalDeviceLineRasterizationPropertiesEXT&                  getLineRasterizationPropertiesEXT                       (void) const { return m_deviceProperties.getPropertyType<VkPhysicalDeviceLineRasterizationPropertiesEXT>();                     }
+const VkPhysicalDeviceMaintenance3Properties&                                  getMaintenance3Properties                                       (void) const { return m_deviceProperties.getPropertyType<VkPhysicalDeviceMaintenance3Properties>();                                     }
+const VkPhysicalDeviceMultiviewProperties&                                             getMultiviewProperties                                          (void) const { return m_deviceProperties.getPropertyType<VkPhysicalDeviceMultiviewProperties>();                                        }
+const VkPhysicalDevicePointClippingProperties&                                 getPointClippingProperties                                      (void) const { return m_deviceProperties.getPropertyType<VkPhysicalDevicePointClippingProperties>();                            }
+const VkPhysicalDeviceProtectedMemoryProperties&                               getProtectedMemoryProperties                            (void) const { return m_deviceProperties.getPropertyType<VkPhysicalDeviceProtectedMemoryProperties>();                          }
+const VkPhysicalDeviceRobustness2PropertiesEXT&                                        getRobustness2PropertiesEXT                                     (void) const { return m_deviceProperties.getPropertyType<VkPhysicalDeviceRobustness2PropertiesEXT>();                           }
+const VkPhysicalDeviceSamplerFilterMinmaxProperties&                   getSamplerFilterMinmaxProperties                        (void) const { return m_deviceProperties.getPropertyType<VkPhysicalDeviceSamplerFilterMinmaxProperties>();                      }
+const VkPhysicalDeviceSampleLocationsPropertiesEXT&                            getSampleLocationsPropertiesEXT                         (void) const { return m_deviceProperties.getPropertyType<VkPhysicalDeviceSampleLocationsPropertiesEXT>();                       }
+const VkPhysicalDeviceSubgroupProperties&                                              getSubgroupProperties                                           (void) const { return m_deviceProperties.getPropertyType<VkPhysicalDeviceSubgroupProperties>();                                         }
+const VkPhysicalDeviceSubgroupSizeControlPropertiesEXT&                        getSubgroupSizeControlPropertiesEXT                     (void) const { return m_deviceProperties.getPropertyType<VkPhysicalDeviceSubgroupSizeControlPropertiesEXT>();           }
+const VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT&               getTexelBufferAlignmentPropertiesEXT            (void) const { return m_deviceProperties.getPropertyType<VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT>();          }
+const VkPhysicalDeviceTimelineSemaphoreProperties&                             getTimelineSemaphoreProperties                          (void) const { return m_deviceProperties.getPropertyType<VkPhysicalDeviceTimelineSemaphoreProperties>();                        }
+const VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT&             getVertexAttributeDivisorPropertiesEXT          (void) const { return m_deviceProperties.getPropertyType<VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT>();        }
diff --git a/external/vulkancts/framework/vulkan/generated/vulkansc/vkExtensionFunctions.inl b/external/vulkancts/framework/vulkan/generated/vulkansc/vkExtensionFunctions.inl
new file mode 100644 (file)
index 0000000..4359e85
--- /dev/null
@@ -0,0 +1,608 @@
+/* WARNING: This is auto-generated file. Do not modify, since changes will
+ * be lost! Modify the generating script instead.
+ */
+
+void getInstanceExtensionFunctions (deUint32 apiVersion, ::std::string extName, ::std::vector<const char*>& functions)
+{
+       if (extName == "VK_KHR_surface")
+       {
+               functions.push_back("vkDestroySurfaceKHR");
+               functions.push_back("vkGetPhysicalDeviceSurfaceSupportKHR");
+               functions.push_back("vkGetPhysicalDeviceSurfaceCapabilitiesKHR");
+               functions.push_back("vkGetPhysicalDeviceSurfaceFormatsKHR");
+               functions.push_back("vkGetPhysicalDeviceSurfacePresentModesKHR");
+               return;
+       }
+       if (extName == "VK_KHR_swapchain")
+       {
+               if(apiVersion >= VK_API_VERSION_1_1) functions.push_back("vkGetPhysicalDevicePresentRectanglesKHR");
+               return;
+       }
+       if (extName == "VK_KHR_display")
+       {
+               functions.push_back("vkGetPhysicalDeviceDisplayPropertiesKHR");
+               functions.push_back("vkGetPhysicalDeviceDisplayPlanePropertiesKHR");
+               functions.push_back("vkGetDisplayPlaneSupportedDisplaysKHR");
+               functions.push_back("vkGetDisplayModePropertiesKHR");
+               functions.push_back("vkCreateDisplayModeKHR");
+               functions.push_back("vkGetDisplayPlaneCapabilitiesKHR");
+               functions.push_back("vkCreateDisplayPlaneSurfaceKHR");
+               return;
+       }
+       if (extName == "VK_KHR_display_swapchain")
+       {
+               return;
+       }
+       if (extName == "VK_KHR_external_memory_fd")
+       {
+               return;
+       }
+       if (extName == "VK_KHR_external_semaphore_fd")
+       {
+               return;
+       }
+       if (extName == "VK_KHR_incremental_present")
+       {
+               return;
+       }
+       if (extName == "VK_KHR_shared_presentable_image")
+       {
+               return;
+       }
+       if (extName == "VK_KHR_external_fence_fd")
+       {
+               return;
+       }
+       if (extName == "VK_KHR_get_surface_capabilities2")
+       {
+               functions.push_back("vkGetPhysicalDeviceSurfaceCapabilities2KHR");
+               functions.push_back("vkGetPhysicalDeviceSurfaceFormats2KHR");
+               return;
+       }
+       if (extName == "VK_KHR_get_display_properties2")
+       {
+               functions.push_back("vkGetPhysicalDeviceDisplayProperties2KHR");
+               functions.push_back("vkGetPhysicalDeviceDisplayPlaneProperties2KHR");
+               functions.push_back("vkGetDisplayModeProperties2KHR");
+               functions.push_back("vkGetDisplayPlaneCapabilities2KHR");
+               return;
+       }
+       if (extName == "VK_KHR_shader_clock")
+       {
+               return;
+       }
+       if (extName == "VK_KHR_swapchain_mutable_format")
+       {
+               return;
+       }
+       if (extName == "VK_KHR_shader_terminate_invocation")
+       {
+               return;
+       }
+       if (extName == "VK_KHR_fragment_shading_rate")
+       {
+               functions.push_back("vkGetPhysicalDeviceFragmentShadingRatesKHR");
+               return;
+       }
+       if (extName == "VK_KHR_fault_handling")
+       {
+               return;
+       }
+       if (extName == "VK_KHR_object_refresh")
+       {
+               functions.push_back("vkGetPhysicalDeviceRefreshableObjectTypesKHR");
+               return;
+       }
+       if (extName == "VK_KHR_seu_safe_memory")
+       {
+               return;
+       }
+       if (extName == "VK_KHR_pipeline_identifier")
+       {
+               return;
+       }
+       if (extName == "VK_KHR_copy_commands2")
+       {
+               return;
+       }
+       if (extName == "VK_KHR_sc_pipeline_cache_functionality")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_depth_range_unrestricted")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_texture_compression_astc_hdr")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_astc_decode_mode")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_direct_mode_display")
+       {
+               functions.push_back("vkReleaseDisplayEXT");
+               return;
+       }
+       if (extName == "VK_EXT_display_surface_counter")
+       {
+               functions.push_back("vkGetPhysicalDeviceSurfaceCapabilities2EXT");
+               return;
+       }
+       if (extName == "VK_EXT_display_control")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_discard_rectangles")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_conservative_rasterization")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_depth_clip_enable")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_swapchain_colorspace")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_hdr_metadata")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_external_memory_dma_buf")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_queue_family_foreign")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_shader_stencil_export")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_sample_locations")
+       {
+               functions.push_back("vkGetPhysicalDeviceMultisamplePropertiesEXT");
+               return;
+       }
+       if (extName == "VK_EXT_blend_operation_advanced")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_post_depth_coverage")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_image_drm_format_modifier")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_filter_cubic")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_global_priority")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_external_memory_host")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_calibrated_timestamps")
+       {
+               functions.push_back("vkGetPhysicalDeviceCalibrateableTimeDomainsEXT");
+               return;
+       }
+       if (extName == "VK_EXT_vertex_attribute_divisor")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_pci_bus_info")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_subgroup_size_control")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_shader_image_atomic_int64")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_memory_budget")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_fragment_shader_interlock")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_ycbcr_image_arrays")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_headless_surface")
+       {
+               functions.push_back("vkCreateHeadlessSurfaceEXT");
+               return;
+       }
+       if (extName == "VK_EXT_line_rasterization")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_shader_atomic_float")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_index_type_uint8")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_extended_dynamic_state")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_shader_demote_to_helper_invocation")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_texel_buffer_alignment")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_robustness2")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_custom_border_color")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_image_robustness")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_4444_formats")
+       {
+               return;
+       }
+       DE_FATAL("Extension name not found");
+}
+
+void getDeviceExtensionFunctions (deUint32 apiVersion, ::std::string extName, ::std::vector<const char*>& functions)
+{
+       if (extName == "VK_KHR_surface")
+       {
+               return;
+       }
+       if (extName == "VK_KHR_swapchain")
+       {
+               functions.push_back("vkCreateSwapchainKHR");
+               functions.push_back("vkGetSwapchainImagesKHR");
+               functions.push_back("vkAcquireNextImageKHR");
+               functions.push_back("vkQueuePresentKHR");
+               if(apiVersion >= VK_API_VERSION_1_1) functions.push_back("vkGetDeviceGroupPresentCapabilitiesKHR");
+               if(apiVersion >= VK_API_VERSION_1_1) functions.push_back("vkGetDeviceGroupSurfacePresentModesKHR");
+               if(apiVersion >= VK_API_VERSION_1_1) functions.push_back("vkAcquireNextImage2KHR");
+               return;
+       }
+       if (extName == "VK_KHR_display")
+       {
+               return;
+       }
+       if (extName == "VK_KHR_display_swapchain")
+       {
+               functions.push_back("vkCreateSharedSwapchainsKHR");
+               return;
+       }
+       if (extName == "VK_KHR_external_memory_fd")
+       {
+               functions.push_back("vkGetMemoryFdKHR");
+               functions.push_back("vkGetMemoryFdPropertiesKHR");
+               return;
+       }
+       if (extName == "VK_KHR_external_semaphore_fd")
+       {
+               functions.push_back("vkImportSemaphoreFdKHR");
+               functions.push_back("vkGetSemaphoreFdKHR");
+               return;
+       }
+       if (extName == "VK_KHR_incremental_present")
+       {
+               return;
+       }
+       if (extName == "VK_KHR_shared_presentable_image")
+       {
+               functions.push_back("vkGetSwapchainStatusKHR");
+               return;
+       }
+       if (extName == "VK_KHR_external_fence_fd")
+       {
+               functions.push_back("vkImportFenceFdKHR");
+               functions.push_back("vkGetFenceFdKHR");
+               return;
+       }
+       if (extName == "VK_KHR_get_surface_capabilities2")
+       {
+               return;
+       }
+       if (extName == "VK_KHR_get_display_properties2")
+       {
+               return;
+       }
+       if (extName == "VK_KHR_shader_clock")
+       {
+               return;
+       }
+       if (extName == "VK_KHR_swapchain_mutable_format")
+       {
+               return;
+       }
+       if (extName == "VK_KHR_shader_terminate_invocation")
+       {
+               return;
+       }
+       if (extName == "VK_KHR_fragment_shading_rate")
+       {
+               functions.push_back("vkCmdSetFragmentShadingRateKHR");
+               return;
+       }
+       if (extName == "VK_KHR_fault_handling")
+       {
+               functions.push_back("vkGetFaultDataKHR");
+               return;
+       }
+       if (extName == "VK_KHR_object_refresh")
+       {
+               functions.push_back("vkCmdRefreshObjectsKHR");
+               return;
+       }
+       if (extName == "VK_KHR_seu_safe_memory")
+       {
+               return;
+       }
+       if (extName == "VK_KHR_pipeline_identifier")
+       {
+               return;
+       }
+       if (extName == "VK_KHR_copy_commands2")
+       {
+               functions.push_back("vkCmdCopyBuffer2KHR");
+               functions.push_back("vkCmdCopyImage2KHR");
+               functions.push_back("vkCmdCopyBufferToImage2KHR");
+               functions.push_back("vkCmdCopyImageToBuffer2KHR");
+               functions.push_back("vkCmdBlitImage2KHR");
+               functions.push_back("vkCmdResolveImage2KHR");
+               return;
+       }
+       if (extName == "VK_KHR_sc_pipeline_cache_functionality")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_depth_range_unrestricted")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_texture_compression_astc_hdr")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_astc_decode_mode")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_direct_mode_display")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_display_surface_counter")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_display_control")
+       {
+               functions.push_back("vkDisplayPowerControlEXT");
+               functions.push_back("vkRegisterDeviceEventEXT");
+               functions.push_back("vkRegisterDisplayEventEXT");
+               functions.push_back("vkGetSwapchainCounterEXT");
+               return;
+       }
+       if (extName == "VK_EXT_discard_rectangles")
+       {
+               functions.push_back("vkCmdSetDiscardRectangleEXT");
+               return;
+       }
+       if (extName == "VK_EXT_conservative_rasterization")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_depth_clip_enable")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_swapchain_colorspace")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_hdr_metadata")
+       {
+               functions.push_back("vkSetHdrMetadataEXT");
+               return;
+       }
+       if (extName == "VK_EXT_external_memory_dma_buf")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_queue_family_foreign")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_shader_stencil_export")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_sample_locations")
+       {
+               functions.push_back("vkCmdSetSampleLocationsEXT");
+               return;
+       }
+       if (extName == "VK_EXT_blend_operation_advanced")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_post_depth_coverage")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_image_drm_format_modifier")
+       {
+               functions.push_back("vkGetImageDrmFormatModifierPropertiesEXT");
+               return;
+       }
+       if (extName == "VK_EXT_filter_cubic")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_global_priority")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_external_memory_host")
+       {
+               functions.push_back("vkGetMemoryHostPointerPropertiesEXT");
+               return;
+       }
+       if (extName == "VK_EXT_calibrated_timestamps")
+       {
+               functions.push_back("vkGetCalibratedTimestampsEXT");
+               return;
+       }
+       if (extName == "VK_EXT_vertex_attribute_divisor")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_pci_bus_info")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_subgroup_size_control")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_shader_image_atomic_int64")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_memory_budget")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_fragment_shader_interlock")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_ycbcr_image_arrays")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_headless_surface")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_line_rasterization")
+       {
+               functions.push_back("vkCmdSetLineStippleEXT");
+               return;
+       }
+       if (extName == "VK_EXT_shader_atomic_float")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_index_type_uint8")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_extended_dynamic_state")
+       {
+               functions.push_back("vkCmdSetCullModeEXT");
+               functions.push_back("vkCmdSetFrontFaceEXT");
+               functions.push_back("vkCmdSetPrimitiveTopologyEXT");
+               functions.push_back("vkCmdSetViewportWithCountEXT");
+               functions.push_back("vkCmdSetScissorWithCountEXT");
+               functions.push_back("vkCmdBindVertexBuffers2EXT");
+               functions.push_back("vkCmdSetDepthTestEnableEXT");
+               functions.push_back("vkCmdSetDepthWriteEnableEXT");
+               functions.push_back("vkCmdSetDepthCompareOpEXT");
+               functions.push_back("vkCmdSetDepthBoundsTestEnableEXT");
+               functions.push_back("vkCmdSetStencilTestEnableEXT");
+               functions.push_back("vkCmdSetStencilOpEXT");
+               return;
+       }
+       if (extName == "VK_EXT_shader_demote_to_helper_invocation")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_texel_buffer_alignment")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_robustness2")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_custom_border_color")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_image_robustness")
+       {
+               return;
+       }
+       if (extName == "VK_EXT_4444_formats")
+       {
+               return;
+       }
+       DE_FATAL("Extension name not found");
+}
+
+::std::string instanceExtensionNames[] =
+{
+       "VK_KHR_surface",
+       "VK_KHR_display",
+       "VK_KHR_get_surface_capabilities2",
+       "VK_KHR_get_display_properties2",
+       "VK_KHR_fragment_shading_rate",
+       "VK_EXT_direct_mode_display",
+       "VK_EXT_display_surface_counter",
+       "VK_EXT_calibrated_timestamps",
+       "VK_EXT_headless_surface"
+};
+
+::std::string deviceExtensionNames[] =
+{
+       "VK_KHR_swapchain",
+       "VK_KHR_display_swapchain",
+       "VK_KHR_external_memory_fd",
+       "VK_KHR_external_semaphore_fd",
+       "VK_KHR_shared_presentable_image",
+       "VK_KHR_external_fence_fd",
+       "VK_KHR_fault_handling",
+       "VK_KHR_object_refresh",
+       "VK_KHR_copy_commands2",
+       "VK_EXT_display_control",
+       "VK_EXT_discard_rectangles",
+       "VK_EXT_hdr_metadata",
+       "VK_EXT_sample_locations",
+       "VK_EXT_image_drm_format_modifier",
+       "VK_EXT_external_memory_host",
+       "VK_EXT_line_rasterization",
+       "VK_EXT_extended_dynamic_state"
+};
diff --git a/external/vulkancts/framework/vulkan/generated/vulkansc/vkFunctionPointerTypes.inl b/external/vulkancts/framework/vulkan/generated/vulkansc/vkFunctionPointerTypes.inl
new file mode 100644 (file)
index 0000000..f833adf
--- /dev/null
@@ -0,0 +1,244 @@
+/* WARNING: This is auto-generated file. Do not modify, since changes will
+ * be lost! Modify the generating script instead.
+ */
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* CreateInstanceFunc)                                                                (const VkInstanceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkInstance* pInstance);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* DestroyInstanceFunc)                                                               (VkInstance instance, const VkAllocationCallbacks* pAllocator);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* EnumeratePhysicalDevicesFunc)                                              (VkInstance instance, deUint32* pPhysicalDeviceCount, VkPhysicalDevice* pPhysicalDevices);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* GetPhysicalDeviceFeaturesFunc)                                             (VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures* pFeatures);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* GetPhysicalDeviceFormatPropertiesFunc)                             (VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties* pFormatProperties);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* GetPhysicalDeviceImageFormatPropertiesFunc)                (VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkImageFormatProperties* pImageFormatProperties);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* GetPhysicalDevicePropertiesFunc)                                   (VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties* pProperties);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* GetPhysicalDeviceQueueFamilyPropertiesFunc)                (VkPhysicalDevice physicalDevice, deUint32* pQueueFamilyPropertyCount, VkQueueFamilyProperties* pQueueFamilyProperties);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* GetPhysicalDeviceMemoryPropertiesFunc)                             (VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties* pMemoryProperties);
+typedef VKAPI_ATTR PFN_vkVoidFunction  (VKAPI_CALL* GetInstanceProcAddrFunc)                                                   (VkInstance instance, const char* pName);
+typedef VKAPI_ATTR PFN_vkVoidFunction  (VKAPI_CALL* GetDeviceProcAddrFunc)                                                             (VkDevice device, const char* pName);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* CreateDeviceFunc)                                                                  (VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDevice* pDevice);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* DestroyDeviceFunc)                                                                 (VkDevice device, const VkAllocationCallbacks* pAllocator);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* EnumerateInstanceExtensionPropertiesFunc)                  (const char* pLayerName, deUint32* pPropertyCount, VkExtensionProperties* pProperties);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* EnumerateDeviceExtensionPropertiesFunc)                    (VkPhysicalDevice physicalDevice, const char* pLayerName, deUint32* pPropertyCount, VkExtensionProperties* pProperties);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* EnumerateInstanceLayerPropertiesFunc)                              (deUint32* pPropertyCount, VkLayerProperties* pProperties);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* EnumerateDeviceLayerPropertiesFunc)                                (VkPhysicalDevice physicalDevice, deUint32* pPropertyCount, VkLayerProperties* pProperties);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* GetDeviceQueueFunc)                                                                (VkDevice device, deUint32 queueFamilyIndex, deUint32 queueIndex, VkQueue* pQueue);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* QueueSubmitFunc)                                                                   (VkQueue queue, deUint32 submitCount, const VkSubmitInfo* pSubmits, VkFence fence);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* QueueWaitIdleFunc)                                                                 (VkQueue queue);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* DeviceWaitIdleFunc)                                                                (VkDevice device);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* AllocateMemoryFunc)                                                                (VkDevice device, const VkMemoryAllocateInfo* pAllocateInfo, const VkAllocationCallbacks* pAllocator, VkDeviceMemory* pMemory);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* MapMemoryFunc)                                                                             (VkDevice device, VkDeviceMemory memory, VkDeviceSize offset, VkDeviceSize size, VkMemoryMapFlags flags, void** ppData);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* UnmapMemoryFunc)                                                                   (VkDevice device, VkDeviceMemory memory);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* FlushMappedMemoryRangesFunc)                                               (VkDevice device, deUint32 memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* InvalidateMappedMemoryRangesFunc)                                  (VkDevice device, deUint32 memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* GetDeviceMemoryCommitmentFunc)                                             (VkDevice device, VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* BindBufferMemoryFunc)                                                              (VkDevice device, VkBuffer buffer, VkDeviceMemory memory, VkDeviceSize memoryOffset);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* BindImageMemoryFunc)                                                               (VkDevice device, VkImage image, VkDeviceMemory memory, VkDeviceSize memoryOffset);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* GetBufferMemoryRequirementsFunc)                                   (VkDevice device, VkBuffer buffer, VkMemoryRequirements* pMemoryRequirements);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* GetImageMemoryRequirementsFunc)                                    (VkDevice device, VkImage image, VkMemoryRequirements* pMemoryRequirements);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* GetImageSparseMemoryRequirementsFunc)                              (VkDevice device, VkImage image, deUint32* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements* pSparseMemoryRequirements);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* GetPhysicalDeviceSparseImageFormatPropertiesFunc)  (VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkSampleCountFlagBits samples, VkImageUsageFlags usage, VkImageTiling tiling, deUint32* pPropertyCount, VkSparseImageFormatProperties* pProperties);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* QueueBindSparseFunc)                                                               (VkQueue queue, deUint32 bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* CreateFenceFunc)                                                                   (VkDevice device, const VkFenceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* DestroyFenceFunc)                                                                  (VkDevice device, VkFence fence, const VkAllocationCallbacks* pAllocator);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* ResetFencesFunc)                                                                   (VkDevice device, deUint32 fenceCount, const VkFence* pFences);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* GetFenceStatusFunc)                                                                (VkDevice device, VkFence fence);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* WaitForFencesFunc)                                                                 (VkDevice device, deUint32 fenceCount, const VkFence* pFences, VkBool32 waitAll, deUint64 timeout);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* CreateSemaphoreFunc)                                                               (VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSemaphore* pSemaphore);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* DestroySemaphoreFunc)                                                              (VkDevice device, VkSemaphore semaphore, const VkAllocationCallbacks* pAllocator);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* CreateEventFunc)                                                                   (VkDevice device, const VkEventCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkEvent* pEvent);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* DestroyEventFunc)                                                                  (VkDevice device, VkEvent event, const VkAllocationCallbacks* pAllocator);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* GetEventStatusFunc)                                                                (VkDevice device, VkEvent event);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* SetEventFunc)                                                                              (VkDevice device, VkEvent event);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* ResetEventFunc)                                                                    (VkDevice device, VkEvent event);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* CreateQueryPoolFunc)                                                               (VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkQueryPool* pQueryPool);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* GetQueryPoolResultsFunc)                                                   (VkDevice device, VkQueryPool queryPool, deUint32 firstQuery, deUint32 queryCount, deUintptr dataSize, void* pData, VkDeviceSize stride, VkQueryResultFlags flags);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* CreateBufferFunc)                                                                  (VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBuffer* pBuffer);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* DestroyBufferFunc)                                                                 (VkDevice device, VkBuffer buffer, const VkAllocationCallbacks* pAllocator);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* CreateBufferViewFunc)                                                              (VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBufferView* pView);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* DestroyBufferViewFunc)                                                             (VkDevice device, VkBufferView bufferView, const VkAllocationCallbacks* pAllocator);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* CreateImageFunc)                                                                   (VkDevice device, const VkImageCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImage* pImage);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* DestroyImageFunc)                                                                  (VkDevice device, VkImage image, const VkAllocationCallbacks* pAllocator);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* GetImageSubresourceLayoutFunc)                                             (VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* CreateImageViewFunc)                                                               (VkDevice device, const VkImageViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImageView* pView);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* DestroyImageViewFunc)                                                              (VkDevice device, VkImageView imageView, const VkAllocationCallbacks* pAllocator);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* CreatePipelineCacheFunc)                                                   (VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineCache* pPipelineCache);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* DestroyPipelineCacheFunc)                                                  (VkDevice device, VkPipelineCache pipelineCache, const VkAllocationCallbacks* pAllocator);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* CreateGraphicsPipelinesFunc)                                               (VkDevice device, VkPipelineCache pipelineCache, deUint32 createInfoCount, const VkGraphicsPipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* CreateComputePipelinesFunc)                                                (VkDevice device, VkPipelineCache pipelineCache, deUint32 createInfoCount, const VkComputePipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* DestroyPipelineFunc)                                                               (VkDevice device, VkPipeline pipeline, const VkAllocationCallbacks* pAllocator);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* CreatePipelineLayoutFunc)                                                  (VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineLayout* pPipelineLayout);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* DestroyPipelineLayoutFunc)                                                 (VkDevice device, VkPipelineLayout pipelineLayout, const VkAllocationCallbacks* pAllocator);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* CreateSamplerFunc)                                                                 (VkDevice device, const VkSamplerCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSampler* pSampler);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* DestroySamplerFunc)                                                                (VkDevice device, VkSampler sampler, const VkAllocationCallbacks* pAllocator);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* CreateDescriptorSetLayoutFunc)                                             (VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorSetLayout* pSetLayout);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* DestroyDescriptorSetLayoutFunc)                                    (VkDevice device, VkDescriptorSetLayout descriptorSetLayout, const VkAllocationCallbacks* pAllocator);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* CreateDescriptorPoolFunc)                                                  (VkDevice device, const VkDescriptorPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorPool* pDescriptorPool);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* ResetDescriptorPoolFunc)                                                   (VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorPoolResetFlags flags);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* AllocateDescriptorSetsFunc)                                                (VkDevice device, const VkDescriptorSetAllocateInfo* pAllocateInfo, VkDescriptorSet* pDescriptorSets);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* FreeDescriptorSetsFunc)                                                    (VkDevice device, VkDescriptorPool descriptorPool, deUint32 descriptorSetCount, const VkDescriptorSet* pDescriptorSets);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* UpdateDescriptorSetsFunc)                                                  (VkDevice device, deUint32 descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites, deUint32 descriptorCopyCount, const VkCopyDescriptorSet* pDescriptorCopies);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* CreateFramebufferFunc)                                                             (VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFramebuffer* pFramebuffer);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* DestroyFramebufferFunc)                                                    (VkDevice device, VkFramebuffer framebuffer, const VkAllocationCallbacks* pAllocator);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* CreateRenderPassFunc)                                                              (VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* DestroyRenderPassFunc)                                                             (VkDevice device, VkRenderPass renderPass, const VkAllocationCallbacks* pAllocator);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* GetRenderAreaGranularityFunc)                                              (VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* CreateCommandPoolFunc)                                                             (VkDevice device, const VkCommandPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkCommandPool* pCommandPool);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* ResetCommandPoolFunc)                                                              (VkDevice device, VkCommandPool commandPool, VkCommandPoolResetFlags flags);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* AllocateCommandBuffersFunc)                                                (VkDevice device, const VkCommandBufferAllocateInfo* pAllocateInfo, VkCommandBuffer* pCommandBuffers);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* FreeCommandBuffersFunc)                                                    (VkDevice device, VkCommandPool commandPool, deUint32 commandBufferCount, const VkCommandBuffer* pCommandBuffers);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* BeginCommandBufferFunc)                                                    (VkCommandBuffer commandBuffer, const VkCommandBufferBeginInfo* pBeginInfo);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* EndCommandBufferFunc)                                                              (VkCommandBuffer commandBuffer);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* ResetCommandBufferFunc)                                                    (VkCommandBuffer commandBuffer, VkCommandBufferResetFlags flags);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdBindPipelineFunc)                                                               (VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdSetViewportFunc)                                                                (VkCommandBuffer commandBuffer, deUint32 firstViewport, deUint32 viewportCount, const VkViewport* pViewports);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdSetScissorFunc)                                                                 (VkCommandBuffer commandBuffer, deUint32 firstScissor, deUint32 scissorCount, const VkRect2D* pScissors);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdSetLineWidthFunc)                                                               (VkCommandBuffer commandBuffer, float lineWidth);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdSetDepthBiasFunc)                                                               (VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdSetBlendConstantsFunc)                                                  (VkCommandBuffer commandBuffer, const float blendConstants[4]);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdSetDepthBoundsFunc)                                                             (VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdSetStencilCompareMaskFunc)                                              (VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, deUint32 compareMask);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdSetStencilWriteMaskFunc)                                                (VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, deUint32 writeMask);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdSetStencilReferenceFunc)                                                (VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, deUint32 reference);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdBindDescriptorSetsFunc)                                                 (VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, deUint32 firstSet, deUint32 descriptorSetCount, const VkDescriptorSet* pDescriptorSets, deUint32 dynamicOffsetCount, const deUint32* pDynamicOffsets);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdBindIndexBufferFunc)                                                    (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdBindVertexBuffersFunc)                                                  (VkCommandBuffer commandBuffer, deUint32 firstBinding, deUint32 bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdDrawFunc)                                                                               (VkCommandBuffer commandBuffer, deUint32 vertexCount, deUint32 instanceCount, deUint32 firstVertex, deUint32 firstInstance);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdDrawIndexedFunc)                                                                (VkCommandBuffer commandBuffer, deUint32 indexCount, deUint32 instanceCount, deUint32 firstIndex, deInt32 vertexOffset, deUint32 firstInstance);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdDrawIndirectFunc)                                                               (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, deUint32 drawCount, deUint32 stride);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdDrawIndexedIndirectFunc)                                                (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, deUint32 drawCount, deUint32 stride);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdDispatchFunc)                                                                   (VkCommandBuffer commandBuffer, deUint32 groupCountX, deUint32 groupCountY, deUint32 groupCountZ);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdDispatchIndirectFunc)                                                   (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdCopyBufferFunc)                                                                 (VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkBuffer dstBuffer, deUint32 regionCount, const VkBufferCopy* pRegions);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdCopyImageFunc)                                                                  (VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, deUint32 regionCount, const VkImageCopy* pRegions);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdBlitImageFunc)                                                                  (VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, deUint32 regionCount, const VkImageBlit* pRegions, VkFilter filter);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdCopyBufferToImageFunc)                                                  (VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkImage dstImage, VkImageLayout dstImageLayout, deUint32 regionCount, const VkBufferImageCopy* pRegions);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdCopyImageToBufferFunc)                                                  (VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer dstBuffer, deUint32 regionCount, const VkBufferImageCopy* pRegions);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdUpdateBufferFunc)                                                               (VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize dataSize, const void* pData);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdFillBufferFunc)                                                                 (VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize size, deUint32 data);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdClearColorImageFunc)                                                    (VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, deUint32 rangeCount, const VkImageSubresourceRange* pRanges);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdClearDepthStencilImageFunc)                                             (VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, deUint32 rangeCount, const VkImageSubresourceRange* pRanges);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdClearAttachmentsFunc)                                                   (VkCommandBuffer commandBuffer, deUint32 attachmentCount, const VkClearAttachment* pAttachments, deUint32 rectCount, const VkClearRect* pRects);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdResolveImageFunc)                                                               (VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, deUint32 regionCount, const VkImageResolve* pRegions);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdSetEventFunc)                                                                   (VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdResetEventFunc)                                                                 (VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdWaitEventsFunc)                                                                 (VkCommandBuffer commandBuffer, deUint32 eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, deUint32 memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, deUint32 bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, deUint32 imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdPipelineBarrierFunc)                                                    (VkCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, deUint32 memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, deUint32 bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, deUint32 imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdBeginQueryFunc)                                                                 (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 query, VkQueryControlFlags flags);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdEndQueryFunc)                                                                   (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 query);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdResetQueryPoolFunc)                                                             (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 firstQuery, deUint32 queryCount);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdWriteTimestampFunc)                                                             (VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, deUint32 query);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdCopyQueryPoolResultsFunc)                                               (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 firstQuery, deUint32 queryCount, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize stride, VkQueryResultFlags flags);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdPushConstantsFunc)                                                              (VkCommandBuffer commandBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, deUint32 offset, deUint32 size, const void* pValues);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdBeginRenderPassFunc)                                                    (VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkSubpassContents contents);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdNextSubpassFunc)                                                                (VkCommandBuffer commandBuffer, VkSubpassContents contents);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdEndRenderPassFunc)                                                              (VkCommandBuffer commandBuffer);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdExecuteCommandsFunc)                                                    (VkCommandBuffer commandBuffer, deUint32 commandBufferCount, const VkCommandBuffer* pCommandBuffers);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* GetCommandPoolMemoryConsumptionFunc)                               (VkDevice device, VkCommandPool commandPool, VkCommandBuffer commandBuffer, VkCommandPoolMemoryConsumption* pConsumption);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* GetFaultDataFunc)                                                                  (VkDevice device, VkFaultQueryBehavior faultQueryBehavior, VkBool32* pUnrecordedFaults, deUint32* pFaultCount, VkFaultData* pFaults);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* EnumerateInstanceVersionFunc)                                              (deUint32* pApiVersion);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* BindBufferMemory2Func)                                                             (VkDevice device, deUint32 bindInfoCount, const VkBindBufferMemoryInfo* pBindInfos);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* BindImageMemory2Func)                                                              (VkDevice device, deUint32 bindInfoCount, const VkBindImageMemoryInfo* pBindInfos);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* GetDeviceGroupPeerMemoryFeaturesFunc)                              (VkDevice device, deUint32 heapIndex, deUint32 localDeviceIndex, deUint32 remoteDeviceIndex, VkPeerMemoryFeatureFlags* pPeerMemoryFeatures);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdSetDeviceMaskFunc)                                                              (VkCommandBuffer commandBuffer, deUint32 deviceMask);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdDispatchBaseFunc)                                                               (VkCommandBuffer commandBuffer, deUint32 baseGroupX, deUint32 baseGroupY, deUint32 baseGroupZ, deUint32 groupCountX, deUint32 groupCountY, deUint32 groupCountZ);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* EnumeratePhysicalDeviceGroupsFunc)                                 (VkInstance instance, deUint32* pPhysicalDeviceGroupCount, VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* GetImageMemoryRequirements2Func)                                   (VkDevice device, const VkImageMemoryRequirementsInfo2* pInfo, VkMemoryRequirements2* pMemoryRequirements);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* GetBufferMemoryRequirements2Func)                                  (VkDevice device, const VkBufferMemoryRequirementsInfo2* pInfo, VkMemoryRequirements2* pMemoryRequirements);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* GetImageSparseMemoryRequirements2Func)                             (VkDevice device, const VkImageSparseMemoryRequirementsInfo2* pInfo, deUint32* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2* pSparseMemoryRequirements);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* GetPhysicalDeviceFeatures2Func)                                    (VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures2* pFeatures);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* GetPhysicalDeviceProperties2Func)                                  (VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties2* pProperties);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* GetPhysicalDeviceFormatProperties2Func)                    (VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties2* pFormatProperties);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* GetPhysicalDeviceImageFormatProperties2Func)               (VkPhysicalDevice physicalDevice, const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo, VkImageFormatProperties2* pImageFormatProperties);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* GetPhysicalDeviceQueueFamilyProperties2Func)               (VkPhysicalDevice physicalDevice, deUint32* pQueueFamilyPropertyCount, VkQueueFamilyProperties2* pQueueFamilyProperties);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* GetPhysicalDeviceMemoryProperties2Func)                    (VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties2* pMemoryProperties);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* GetPhysicalDeviceSparseImageFormatProperties2Func) (VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo, deUint32* pPropertyCount, VkSparseImageFormatProperties2* pProperties);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* GetDeviceQueue2Func)                                                               (VkDevice device, const VkDeviceQueueInfo2* pQueueInfo, VkQueue* pQueue);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* CreateSamplerYcbcrConversionFunc)                                  (VkDevice device, const VkSamplerYcbcrConversionCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSamplerYcbcrConversion* pYcbcrConversion);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* DestroySamplerYcbcrConversionFunc)                                 (VkDevice device, VkSamplerYcbcrConversion ycbcrConversion, const VkAllocationCallbacks* pAllocator);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* GetPhysicalDeviceExternalBufferPropertiesFunc)             (VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo, VkExternalBufferProperties* pExternalBufferProperties);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* GetPhysicalDeviceExternalFencePropertiesFunc)              (VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo, VkExternalFenceProperties* pExternalFenceProperties);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* GetPhysicalDeviceExternalSemaphorePropertiesFunc)  (VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo, VkExternalSemaphoreProperties* pExternalSemaphoreProperties);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* GetDescriptorSetLayoutSupportFunc)                                 (VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, VkDescriptorSetLayoutSupport* pSupport);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdDrawIndirectCountFunc)                                                  (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, deUint32 maxDrawCount, deUint32 stride);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdDrawIndexedIndirectCountFunc)                                   (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, deUint32 maxDrawCount, deUint32 stride);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* CreateRenderPass2Func)                                                             (VkDevice device, const VkRenderPassCreateInfo2* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdBeginRenderPass2Func)                                                   (VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, const VkSubpassBeginInfo* pSubpassBeginInfo);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdNextSubpass2Func)                                                               (VkCommandBuffer commandBuffer, const VkSubpassBeginInfo* pSubpassBeginInfo, const VkSubpassEndInfo* pSubpassEndInfo);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdEndRenderPass2Func)                                                             (VkCommandBuffer commandBuffer, const VkSubpassEndInfo* pSubpassEndInfo);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* ResetQueryPoolFunc)                                                                (VkDevice device, VkQueryPool queryPool, deUint32 firstQuery, deUint32 queryCount);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* GetSemaphoreCounterValueFunc)                                              (VkDevice device, VkSemaphore semaphore, deUint64* pValue);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* WaitSemaphoresFunc)                                                                (VkDevice device, const VkSemaphoreWaitInfo* pWaitInfo, deUint64 timeout);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* SignalSemaphoreFunc)                                                               (VkDevice device, const VkSemaphoreSignalInfo* pSignalInfo);
+typedef VKAPI_ATTR VkDeviceAddress             (VKAPI_CALL* GetBufferDeviceAddressFunc)                                                (VkDevice device, const VkBufferDeviceAddressInfo* pInfo);
+typedef VKAPI_ATTR uint64_t                            (VKAPI_CALL* GetBufferOpaqueCaptureAddressFunc)                                 (VkDevice device, const VkBufferDeviceAddressInfo* pInfo);
+typedef VKAPI_ATTR uint64_t                            (VKAPI_CALL* GetDeviceMemoryOpaqueCaptureAddressFunc)                   (VkDevice device, const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* DestroySurfaceKHRFunc)                                                             (VkInstance instance, VkSurfaceKHR surface, const VkAllocationCallbacks* pAllocator);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* GetPhysicalDeviceSurfaceSupportKHRFunc)                    (VkPhysicalDevice physicalDevice, deUint32 queueFamilyIndex, VkSurfaceKHR surface, VkBool32* pSupported);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* GetPhysicalDeviceSurfaceCapabilitiesKHRFunc)               (VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, VkSurfaceCapabilitiesKHR* pSurfaceCapabilities);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* GetPhysicalDeviceSurfaceFormatsKHRFunc)                    (VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, deUint32* pSurfaceFormatCount, VkSurfaceFormatKHR* pSurfaceFormats);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* GetPhysicalDeviceSurfacePresentModesKHRFunc)               (VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, deUint32* pPresentModeCount, VkPresentModeKHR* pPresentModes);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* CreateSwapchainKHRFunc)                                                    (VkDevice device, const VkSwapchainCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSwapchainKHR* pSwapchain);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* GetSwapchainImagesKHRFunc)                                                 (VkDevice device, VkSwapchainKHR swapchain, deUint32* pSwapchainImageCount, VkImage* pSwapchainImages);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* AcquireNextImageKHRFunc)                                                   (VkDevice device, VkSwapchainKHR swapchain, deUint64 timeout, VkSemaphore semaphore, VkFence fence, deUint32* pImageIndex);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* QueuePresentKHRFunc)                                                               (VkQueue queue, const VkPresentInfoKHR* pPresentInfo);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* GetDeviceGroupPresentCapabilitiesKHRFunc)                  (VkDevice device, VkDeviceGroupPresentCapabilitiesKHR* pDeviceGroupPresentCapabilities);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* GetDeviceGroupSurfacePresentModesKHRFunc)                  (VkDevice device, VkSurfaceKHR surface, VkDeviceGroupPresentModeFlagsKHR* pModes);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* GetPhysicalDevicePresentRectanglesKHRFunc)                 (VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, deUint32* pRectCount, VkRect2D* pRects);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* AcquireNextImage2KHRFunc)                                                  (VkDevice device, const VkAcquireNextImageInfoKHR* pAcquireInfo, deUint32* pImageIndex);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* GetPhysicalDeviceDisplayPropertiesKHRFunc)                 (VkPhysicalDevice physicalDevice, deUint32* pPropertyCount, VkDisplayPropertiesKHR* pProperties);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* GetPhysicalDeviceDisplayPlanePropertiesKHRFunc)    (VkPhysicalDevice physicalDevice, deUint32* pPropertyCount, VkDisplayPlanePropertiesKHR* pProperties);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* GetDisplayPlaneSupportedDisplaysKHRFunc)                   (VkPhysicalDevice physicalDevice, deUint32 planeIndex, deUint32* pDisplayCount, VkDisplayKHR* pDisplays);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* GetDisplayModePropertiesKHRFunc)                                   (VkPhysicalDevice physicalDevice, VkDisplayKHR display, deUint32* pPropertyCount, VkDisplayModePropertiesKHR* pProperties);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* CreateDisplayModeKHRFunc)                                                  (VkPhysicalDevice physicalDevice, VkDisplayKHR display, const VkDisplayModeCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDisplayModeKHR* pMode);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* GetDisplayPlaneCapabilitiesKHRFunc)                                (VkPhysicalDevice physicalDevice, VkDisplayModeKHR mode, deUint32 planeIndex, VkDisplayPlaneCapabilitiesKHR* pCapabilities);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* CreateDisplayPlaneSurfaceKHRFunc)                                  (VkInstance instance, const VkDisplaySurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* CreateSharedSwapchainsKHRFunc)                                             (VkDevice device, deUint32 swapchainCount, const VkSwapchainCreateInfoKHR* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkSwapchainKHR* pSwapchains);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* GetMemoryFdKHRFunc)                                                                (VkDevice device, const VkMemoryGetFdInfoKHR* pGetFdInfo, int* pFd);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* GetMemoryFdPropertiesKHRFunc)                                              (VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, int fd, VkMemoryFdPropertiesKHR* pMemoryFdProperties);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* ImportSemaphoreFdKHRFunc)                                                  (VkDevice device, const VkImportSemaphoreFdInfoKHR* pImportSemaphoreFdInfo);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* GetSemaphoreFdKHRFunc)                                                             (VkDevice device, const VkSemaphoreGetFdInfoKHR* pGetFdInfo, int* pFd);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* GetSwapchainStatusKHRFunc)                                                 (VkDevice device, VkSwapchainKHR swapchain);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* ImportFenceFdKHRFunc)                                                              (VkDevice device, const VkImportFenceFdInfoKHR* pImportFenceFdInfo);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* GetFenceFdKHRFunc)                                                                 (VkDevice device, const VkFenceGetFdInfoKHR* pGetFdInfo, int* pFd);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* GetPhysicalDeviceSurfaceCapabilities2KHRFunc)              (VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, VkSurfaceCapabilities2KHR* pSurfaceCapabilities);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* GetPhysicalDeviceSurfaceFormats2KHRFunc)                   (VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, deUint32* pSurfaceFormatCount, VkSurfaceFormat2KHR* pSurfaceFormats);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* GetPhysicalDeviceDisplayProperties2KHRFunc)                (VkPhysicalDevice physicalDevice, deUint32* pPropertyCount, VkDisplayProperties2KHR* pProperties);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* GetPhysicalDeviceDisplayPlaneProperties2KHRFunc)   (VkPhysicalDevice physicalDevice, deUint32* pPropertyCount, VkDisplayPlaneProperties2KHR* pProperties);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* GetDisplayModeProperties2KHRFunc)                                  (VkPhysicalDevice physicalDevice, VkDisplayKHR display, deUint32* pPropertyCount, VkDisplayModeProperties2KHR* pProperties);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* GetDisplayPlaneCapabilities2KHRFunc)                               (VkPhysicalDevice physicalDevice, const VkDisplayPlaneInfo2KHR* pDisplayPlaneInfo, VkDisplayPlaneCapabilities2KHR* pCapabilities);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* GetPhysicalDeviceFragmentShadingRatesKHRFunc)              (VkPhysicalDevice physicalDevice, deUint32* pFragmentShadingRateCount, VkPhysicalDeviceFragmentShadingRateKHR* pFragmentShadingRates);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdSetFragmentShadingRateKHRFunc)                                  (VkCommandBuffer commandBuffer, const VkExtent2D* pFragmentSize, const VkFragmentShadingRateCombinerOpKHR combinerOps[2]);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* GetFaultDataKHRFunc)                                                               (VkDevice device, VkFaultQueryBehavior faultQueryBehavior, VkBool32* pUnrecordedFaults, deUint32* pFaultCount, VkFaultData* pFaults);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdRefreshObjectsKHRFunc)                                                  (VkCommandBuffer commandBuffer, const VkRefreshObjectListKHR* pRefreshObjects);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* GetPhysicalDeviceRefreshableObjectTypesKHRFunc)    (VkPhysicalDevice physicalDevice, deUint32* pRefreshableObjectCount, VkObjectType* pRefreshableObjectTypes);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdCopyBuffer2KHRFunc)                                                             (VkCommandBuffer commandBuffer, const VkCopyBufferInfo2KHR* pCopyBufferInfo);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdCopyImage2KHRFunc)                                                              (VkCommandBuffer commandBuffer, const VkCopyImageInfo2KHR* pCopyImageInfo);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdCopyBufferToImage2KHRFunc)                                              (VkCommandBuffer commandBuffer, const VkCopyBufferToImageInfo2KHR* pCopyBufferToImageInfo);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdCopyImageToBuffer2KHRFunc)                                              (VkCommandBuffer commandBuffer, const VkCopyImageToBufferInfo2KHR* pCopyImageToBufferInfo);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdBlitImage2KHRFunc)                                                              (VkCommandBuffer commandBuffer, const VkBlitImageInfo2KHR* pBlitImageInfo);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdResolveImage2KHRFunc)                                                   (VkCommandBuffer commandBuffer, const VkResolveImageInfo2KHR* pResolveImageInfo);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* ReleaseDisplayEXTFunc)                                                             (VkPhysicalDevice physicalDevice, VkDisplayKHR display);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* GetPhysicalDeviceSurfaceCapabilities2EXTFunc)              (VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, VkSurfaceCapabilities2EXT* pSurfaceCapabilities);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* DisplayPowerControlEXTFunc)                                                (VkDevice device, VkDisplayKHR display, const VkDisplayPowerInfoEXT* pDisplayPowerInfo);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* RegisterDeviceEventEXTFunc)                                                (VkDevice device, const VkDeviceEventInfoEXT* pDeviceEventInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* RegisterDisplayEventEXTFunc)                                               (VkDevice device, VkDisplayKHR display, const VkDisplayEventInfoEXT* pDisplayEventInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* GetSwapchainCounterEXTFunc)                                                (VkDevice device, VkSwapchainKHR swapchain, VkSurfaceCounterFlagBitsEXT counter, deUint64* pCounterValue);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdSetDiscardRectangleEXTFunc)                                             (VkCommandBuffer commandBuffer, deUint32 firstDiscardRectangle, deUint32 discardRectangleCount, const VkRect2D* pDiscardRectangles);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* SetHdrMetadataEXTFunc)                                                             (VkDevice device, deUint32 swapchainCount, const VkSwapchainKHR* pSwapchains, const VkHdrMetadataEXT* pMetadata);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdSetSampleLocationsEXTFunc)                                              (VkCommandBuffer commandBuffer, const VkSampleLocationsInfoEXT* pSampleLocationsInfo);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* GetPhysicalDeviceMultisamplePropertiesEXTFunc)             (VkPhysicalDevice physicalDevice, VkSampleCountFlagBits samples, VkMultisamplePropertiesEXT* pMultisampleProperties);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* GetImageDrmFormatModifierPropertiesEXTFunc)                (VkDevice device, VkImage image, VkImageDrmFormatModifierPropertiesEXT* pProperties);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* GetMemoryHostPointerPropertiesEXTFunc)                             (VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, const void* pHostPointer, VkMemoryHostPointerPropertiesEXT* pMemoryHostPointerProperties);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* GetPhysicalDeviceCalibrateableTimeDomainsEXTFunc)  (VkPhysicalDevice physicalDevice, deUint32* pTimeDomainCount, VkTimeDomainEXT* pTimeDomains);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* GetCalibratedTimestampsEXTFunc)                                    (VkDevice device, deUint32 timestampCount, const VkCalibratedTimestampInfoEXT* pTimestampInfos, deUint64* pTimestamps, deUint64* pMaxDeviation);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* CreateHeadlessSurfaceEXTFunc)                                              (VkInstance instance, const VkHeadlessSurfaceCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdSetLineStippleEXTFunc)                                                  (VkCommandBuffer commandBuffer, deUint32 lineStippleFactor, deUint16 lineStipplePattern);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdSetCullModeEXTFunc)                                                             (VkCommandBuffer commandBuffer, VkCullModeFlags cullMode);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdSetFrontFaceEXTFunc)                                                    (VkCommandBuffer commandBuffer, VkFrontFace frontFace);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdSetPrimitiveTopologyEXTFunc)                                    (VkCommandBuffer commandBuffer, VkPrimitiveTopology primitiveTopology);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdSetViewportWithCountEXTFunc)                                    (VkCommandBuffer commandBuffer, deUint32 viewportCount, const VkViewport* pViewports);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdSetScissorWithCountEXTFunc)                                             (VkCommandBuffer commandBuffer, deUint32 scissorCount, const VkRect2D* pScissors);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdBindVertexBuffers2EXTFunc)                                              (VkCommandBuffer commandBuffer, deUint32 firstBinding, deUint32 bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets, const VkDeviceSize* pSizes, const VkDeviceSize* pStrides);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdSetDepthTestEnableEXTFunc)                                              (VkCommandBuffer commandBuffer, VkBool32 depthTestEnable);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdSetDepthWriteEnableEXTFunc)                                             (VkCommandBuffer commandBuffer, VkBool32 depthWriteEnable);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdSetDepthCompareOpEXTFunc)                                               (VkCommandBuffer commandBuffer, VkCompareOp depthCompareOp);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdSetDepthBoundsTestEnableEXTFunc)                                (VkCommandBuffer commandBuffer, VkBool32 depthBoundsTestEnable);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdSetStencilTestEnableEXTFunc)                                    (VkCommandBuffer commandBuffer, VkBool32 stencilTestEnable);
+typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdSetStencilOpEXTFunc)                                                    (VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, VkStencilOp failOp, VkStencilOp passOp, VkStencilOp depthFailOp, VkCompareOp compareOp);
diff --git a/external/vulkancts/framework/vulkan/generated/vulkansc/vkGetStructureTypeImpl.inl b/external/vulkancts/framework/vulkan/generated/vulkansc/vkGetStructureTypeImpl.inl
new file mode 100644 (file)
index 0000000..0b0f57c
--- /dev/null
@@ -0,0 +1,1413 @@
+/* WARNING: This is auto-generated file. Do not modify, since changes will
+ * be lost! Modify the generating script instead.
+ */
+template<> VkStructureType getStructureType<VkBufferMemoryBarrier> (void)
+{
+       return VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER;
+}
+
+template<> VkStructureType getStructureType<VkImageMemoryBarrier> (void)
+{
+       return VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
+}
+
+template<> VkStructureType getStructureType<VkMemoryBarrier> (void)
+{
+       return VK_STRUCTURE_TYPE_MEMORY_BARRIER;
+}
+
+template<> VkStructureType getStructureType<VkApplicationInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_APPLICATION_INFO;
+}
+
+template<> VkStructureType getStructureType<VkInstanceCreateInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkDeviceQueueCreateInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkDeviceCreateInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkSubmitInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_SUBMIT_INFO;
+}
+
+template<> VkStructureType getStructureType<VkMappedMemoryRange> (void)
+{
+       return VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE;
+}
+
+template<> VkStructureType getStructureType<VkMemoryAllocateInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkBindSparseInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_BIND_SPARSE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkFenceCreateInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_FENCE_CREATE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkSemaphoreCreateInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkEventCreateInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_EVENT_CREATE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkQueryPoolCreateInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkBufferCreateInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkBufferViewCreateInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkImageCreateInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkImageViewCreateInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkPipelineCacheCreateInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkPipelineShaderStageCreateInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkComputePipelineCreateInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkPipelineVertexInputStateCreateInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkPipelineInputAssemblyStateCreateInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkPipelineTessellationStateCreateInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkPipelineViewportStateCreateInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkPipelineRasterizationStateCreateInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkPipelineMultisampleStateCreateInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkPipelineDepthStencilStateCreateInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkPipelineColorBlendStateCreateInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkPipelineDynamicStateCreateInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkGraphicsPipelineCreateInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkPipelineLayoutCreateInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkSamplerCreateInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkCopyDescriptorSet> (void)
+{
+       return VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET;
+}
+
+template<> VkStructureType getStructureType<VkDescriptorPoolCreateInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkDescriptorSetAllocateInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkDescriptorSetLayoutCreateInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkWriteDescriptorSet> (void)
+{
+       return VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
+}
+
+template<> VkStructureType getStructureType<VkFramebufferCreateInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkRenderPassCreateInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkCommandPoolCreateInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkCommandBufferAllocateInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkCommandBufferInheritanceInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkCommandBufferBeginInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO;
+}
+
+template<> VkStructureType getStructureType<VkRenderPassBeginInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceVulkanSC10Features> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_SC_1_0_FEATURES;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceVulkanSC10Properties> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_SC_1_0_PROPERTIES;
+}
+
+template<> VkStructureType getStructureType<VkPipelinePoolSize> (void)
+{
+       return VK_STRUCTURE_TYPE_PIPELINE_POOL_SIZE;
+}
+
+template<> VkStructureType getStructureType<VkDeviceMemoryReservationCreateInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_DEVICE_MEMORY_RESERVATION_CREATE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkCommandPoolMemoryReservationCreateInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_COMMAND_POOL_MEMORY_RESERVATION_CREATE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkCommandPoolMemoryConsumption> (void)
+{
+       return VK_STRUCTURE_TYPE_COMMAND_POOL_MEMORY_CONSUMPTION;
+}
+
+template<> VkStructureType getStructureType<VkPipelinePoolEntrySizeCreateInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_PIPELINE_POOL_ENTRY_SIZE_CREATE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkFaultData> (void)
+{
+       return VK_STRUCTURE_TYPE_FAULT_DATA;
+}
+
+template<> VkStructureType getStructureType<VkFaultCallbackInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_FAULT_CALLBACK_INFO;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceFaultHandlingProperties> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FAULT_HANDLING_PROPERTIES;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDevicePipelineIdentifierFeatures> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_IDENTIFIER_FEATURES;
+}
+
+template<> VkStructureType getStructureType<VkPipelineIdentifierInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_PIPELINE_IDENTIFIER_INFO;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceSubgroupProperties> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES;
+}
+
+template<> VkStructureType getStructureType<VkBindBufferMemoryInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO;
+}
+
+template<> VkStructureType getStructureType<VkBindImageMemoryInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDevice16BitStorageFeatures> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES;
+}
+
+template<> VkStructureType getStructureType<VkMemoryDedicatedRequirements> (void)
+{
+       return VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS;
+}
+
+template<> VkStructureType getStructureType<VkMemoryDedicatedAllocateInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkMemoryAllocateFlagsInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO;
+}
+
+template<> VkStructureType getStructureType<VkDeviceGroupRenderPassBeginInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO;
+}
+
+template<> VkStructureType getStructureType<VkDeviceGroupCommandBufferBeginInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO;
+}
+
+template<> VkStructureType getStructureType<VkDeviceGroupSubmitInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO;
+}
+
+template<> VkStructureType getStructureType<VkDeviceGroupBindSparseInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkBindBufferMemoryDeviceGroupInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO;
+}
+
+template<> VkStructureType getStructureType<VkBindImageMemoryDeviceGroupInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceGroupProperties> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES;
+}
+
+template<> VkStructureType getStructureType<VkDeviceGroupDeviceCreateInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkBufferMemoryRequirementsInfo2> (void)
+{
+       return VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2;
+}
+
+template<> VkStructureType getStructureType<VkImageMemoryRequirementsInfo2> (void)
+{
+       return VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2;
+}
+
+template<> VkStructureType getStructureType<VkImageSparseMemoryRequirementsInfo2> (void)
+{
+       return VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2;
+}
+
+template<> VkStructureType getStructureType<VkMemoryRequirements2> (void)
+{
+       return VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2;
+}
+
+template<> VkStructureType getStructureType<VkSparseImageMemoryRequirements2> (void)
+{
+       return VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceFeatures2> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceProperties2> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2;
+}
+
+template<> VkStructureType getStructureType<VkFormatProperties2> (void)
+{
+       return VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2;
+}
+
+template<> VkStructureType getStructureType<VkImageFormatProperties2> (void)
+{
+       return VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceImageFormatInfo2> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2;
+}
+
+template<> VkStructureType getStructureType<VkQueueFamilyProperties2> (void)
+{
+       return VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceMemoryProperties2> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2;
+}
+
+template<> VkStructureType getStructureType<VkSparseImageFormatProperties2> (void)
+{
+       return VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceSparseImageFormatInfo2> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDevicePointClippingProperties> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES;
+}
+
+template<> VkStructureType getStructureType<VkRenderPassInputAttachmentAspectCreateInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkImageViewUsageCreateInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkPipelineTessellationDomainOriginStateCreateInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkRenderPassMultiviewCreateInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceMultiviewFeatures> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceMultiviewProperties> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceVariablePointersFeatures> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceProtectedMemoryFeatures> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceProtectedMemoryProperties> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES;
+}
+
+template<> VkStructureType getStructureType<VkDeviceQueueInfo2> (void)
+{
+       return VK_STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2;
+}
+
+template<> VkStructureType getStructureType<VkProtectedSubmitInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO;
+}
+
+template<> VkStructureType getStructureType<VkSamplerYcbcrConversionCreateInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkSamplerYcbcrConversionInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO;
+}
+
+template<> VkStructureType getStructureType<VkBindImagePlaneMemoryInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO;
+}
+
+template<> VkStructureType getStructureType<VkImagePlaneMemoryRequirementsInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceSamplerYcbcrConversionFeatures> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES;
+}
+
+template<> VkStructureType getStructureType<VkSamplerYcbcrConversionImageFormatProperties> (void)
+{
+       return VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceExternalImageFormatInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO;
+}
+
+template<> VkStructureType getStructureType<VkExternalImageFormatProperties> (void)
+{
+       return VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceExternalBufferInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO;
+}
+
+template<> VkStructureType getStructureType<VkExternalBufferProperties> (void)
+{
+       return VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceIDProperties> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES;
+}
+
+template<> VkStructureType getStructureType<VkExternalMemoryImageCreateInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkExternalMemoryBufferCreateInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkExportMemoryAllocateInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceExternalFenceInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkExternalFenceProperties> (void)
+{
+       return VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES;
+}
+
+template<> VkStructureType getStructureType<VkExportFenceCreateInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkExportSemaphoreCreateInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceExternalSemaphoreInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkExternalSemaphoreProperties> (void)
+{
+       return VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceMaintenance3Properties> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES;
+}
+
+template<> VkStructureType getStructureType<VkDescriptorSetLayoutSupport> (void)
+{
+       return VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceShaderDrawParametersFeatures> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceVulkan11Features> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceVulkan11Properties> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceVulkan12Features> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceVulkan12Properties> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES;
+}
+
+template<> VkStructureType getStructureType<VkImageFormatListCreateInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkAttachmentDescription2> (void)
+{
+       return VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2;
+}
+
+template<> VkStructureType getStructureType<VkAttachmentReference2> (void)
+{
+       return VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2;
+}
+
+template<> VkStructureType getStructureType<VkSubpassDescription2> (void)
+{
+       return VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2;
+}
+
+template<> VkStructureType getStructureType<VkSubpassDependency2> (void)
+{
+       return VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2;
+}
+
+template<> VkStructureType getStructureType<VkRenderPassCreateInfo2> (void)
+{
+       return VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2;
+}
+
+template<> VkStructureType getStructureType<VkSubpassBeginInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO;
+}
+
+template<> VkStructureType getStructureType<VkSubpassEndInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_SUBPASS_END_INFO;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDevice8BitStorageFeatures> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceDriverProperties> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceShaderAtomicInt64Features> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceShaderFloat16Int8Features> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceFloatControlsProperties> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES;
+}
+
+template<> VkStructureType getStructureType<VkDescriptorSetLayoutBindingFlagsCreateInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceDescriptorIndexingFeatures> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceDescriptorIndexingProperties> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES;
+}
+
+template<> VkStructureType getStructureType<VkDescriptorSetVariableDescriptorCountAllocateInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkDescriptorSetVariableDescriptorCountLayoutSupport> (void)
+{
+       return VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT;
+}
+
+template<> VkStructureType getStructureType<VkSubpassDescriptionDepthStencilResolve> (void)
+{
+       return VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceDepthStencilResolveProperties> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceScalarBlockLayoutFeatures> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES;
+}
+
+template<> VkStructureType getStructureType<VkImageStencilUsageCreateInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkSamplerReductionModeCreateInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceSamplerFilterMinmaxProperties> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceVulkanMemoryModelFeatures> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceImagelessFramebufferFeatures> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES;
+}
+
+template<> VkStructureType getStructureType<VkFramebufferAttachmentImageInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkFramebufferAttachmentsCreateInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkRenderPassAttachmentBeginInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceUniformBufferStandardLayoutFeatures> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES;
+}
+
+template<> VkStructureType getStructureType<VkAttachmentReferenceStencilLayout> (void)
+{
+       return VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT;
+}
+
+template<> VkStructureType getStructureType<VkAttachmentDescriptionStencilLayout> (void)
+{
+       return VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceHostQueryResetFeatures> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceTimelineSemaphoreFeatures> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceTimelineSemaphoreProperties> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES;
+}
+
+template<> VkStructureType getStructureType<VkSemaphoreTypeCreateInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkTimelineSemaphoreSubmitInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO;
+}
+
+template<> VkStructureType getStructureType<VkSemaphoreWaitInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO;
+}
+
+template<> VkStructureType getStructureType<VkSemaphoreSignalInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceBufferDeviceAddressFeatures> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES;
+}
+
+template<> VkStructureType getStructureType<VkBufferDeviceAddressInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO;
+}
+
+template<> VkStructureType getStructureType<VkBufferOpaqueCaptureAddressCreateInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkMemoryOpaqueCaptureAddressAllocateInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO;
+}
+
+template<> VkStructureType getStructureType<VkDeviceMemoryOpaqueCaptureAddressInfo> (void)
+{
+       return VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO;
+}
+
+template<> VkStructureType getStructureType<VkSwapchainCreateInfoKHR> (void)
+{
+       return VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR;
+}
+
+template<> VkStructureType getStructureType<VkPresentInfoKHR> (void)
+{
+       return VK_STRUCTURE_TYPE_PRESENT_INFO_KHR;
+}
+
+template<> VkStructureType getStructureType<VkImageSwapchainCreateInfoKHR> (void)
+{
+       return VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR;
+}
+
+template<> VkStructureType getStructureType<VkBindImageMemorySwapchainInfoKHR> (void)
+{
+       return VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR;
+}
+
+template<> VkStructureType getStructureType<VkAcquireNextImageInfoKHR> (void)
+{
+       return VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR;
+}
+
+template<> VkStructureType getStructureType<VkDeviceGroupPresentCapabilitiesKHR> (void)
+{
+       return VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR;
+}
+
+template<> VkStructureType getStructureType<VkDeviceGroupPresentInfoKHR> (void)
+{
+       return VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR;
+}
+
+template<> VkStructureType getStructureType<VkDeviceGroupSwapchainCreateInfoKHR> (void)
+{
+       return VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR;
+}
+
+template<> VkStructureType getStructureType<VkDisplayModeCreateInfoKHR> (void)
+{
+       return VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR;
+}
+
+template<> VkStructureType getStructureType<VkDisplaySurfaceCreateInfoKHR> (void)
+{
+       return VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR;
+}
+
+template<> VkStructureType getStructureType<VkDisplayPresentInfoKHR> (void)
+{
+       return VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR;
+}
+
+template<> VkStructureType getStructureType<VkImportMemoryFdInfoKHR> (void)
+{
+       return VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR;
+}
+
+template<> VkStructureType getStructureType<VkMemoryFdPropertiesKHR> (void)
+{
+       return VK_STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR;
+}
+
+template<> VkStructureType getStructureType<VkMemoryGetFdInfoKHR> (void)
+{
+       return VK_STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR;
+}
+
+template<> VkStructureType getStructureType<VkImportSemaphoreFdInfoKHR> (void)
+{
+       return VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR;
+}
+
+template<> VkStructureType getStructureType<VkSemaphoreGetFdInfoKHR> (void)
+{
+       return VK_STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR;
+}
+
+template<> VkStructureType getStructureType<VkPresentRegionsKHR> (void)
+{
+       return VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR;
+}
+
+template<> VkStructureType getStructureType<VkSharedPresentSurfaceCapabilitiesKHR> (void)
+{
+       return VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR;
+}
+
+template<> VkStructureType getStructureType<VkImportFenceFdInfoKHR> (void)
+{
+       return VK_STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR;
+}
+
+template<> VkStructureType getStructureType<VkFenceGetFdInfoKHR> (void)
+{
+       return VK_STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceSurfaceInfo2KHR> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR;
+}
+
+template<> VkStructureType getStructureType<VkSurfaceCapabilities2KHR> (void)
+{
+       return VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR;
+}
+
+template<> VkStructureType getStructureType<VkSurfaceFormat2KHR> (void)
+{
+       return VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR;
+}
+
+template<> VkStructureType getStructureType<VkDisplayProperties2KHR> (void)
+{
+       return VK_STRUCTURE_TYPE_DISPLAY_PROPERTIES_2_KHR;
+}
+
+template<> VkStructureType getStructureType<VkDisplayPlaneProperties2KHR> (void)
+{
+       return VK_STRUCTURE_TYPE_DISPLAY_PLANE_PROPERTIES_2_KHR;
+}
+
+template<> VkStructureType getStructureType<VkDisplayModeProperties2KHR> (void)
+{
+       return VK_STRUCTURE_TYPE_DISPLAY_MODE_PROPERTIES_2_KHR;
+}
+
+template<> VkStructureType getStructureType<VkDisplayPlaneInfo2KHR> (void)
+{
+       return VK_STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR;
+}
+
+template<> VkStructureType getStructureType<VkDisplayPlaneCapabilities2KHR> (void)
+{
+       return VK_STRUCTURE_TYPE_DISPLAY_PLANE_CAPABILITIES_2_KHR;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceShaderClockFeaturesKHR> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES_KHR;
+}
+
+template<> VkStructureType getStructureType<VkFragmentShadingRateAttachmentInfoKHR> (void)
+{
+       return VK_STRUCTURE_TYPE_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR;
+}
+
+template<> VkStructureType getStructureType<VkPipelineFragmentShadingRateStateCreateInfoKHR> (void)
+{
+       return VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_STATE_CREATE_INFO_KHR;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceFragmentShadingRateFeaturesKHR> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_FEATURES_KHR;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceFragmentShadingRatePropertiesKHR> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_PROPERTIES_KHR;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceFragmentShadingRateKHR> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_KHR;
+}
+
+template<> VkStructureType getStructureType<VkRefreshObjectListKHR> (void)
+{
+       return VK_STRUCTURE_TYPE_REFRESH_OBJECT_LIST_KHR;
+}
+
+template<> VkStructureType getStructureType<VkBufferCopy2KHR> (void)
+{
+       return VK_STRUCTURE_TYPE_BUFFER_COPY_2_KHR;
+}
+
+template<> VkStructureType getStructureType<VkCopyBufferInfo2KHR> (void)
+{
+       return VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2_KHR;
+}
+
+template<> VkStructureType getStructureType<VkImageCopy2KHR> (void)
+{
+       return VK_STRUCTURE_TYPE_IMAGE_COPY_2_KHR;
+}
+
+template<> VkStructureType getStructureType<VkCopyImageInfo2KHR> (void)
+{
+       return VK_STRUCTURE_TYPE_COPY_IMAGE_INFO_2_KHR;
+}
+
+template<> VkStructureType getStructureType<VkBufferImageCopy2KHR> (void)
+{
+       return VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2_KHR;
+}
+
+template<> VkStructureType getStructureType<VkCopyBufferToImageInfo2KHR> (void)
+{
+       return VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2_KHR;
+}
+
+template<> VkStructureType getStructureType<VkCopyImageToBufferInfo2KHR> (void)
+{
+       return VK_STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2_KHR;
+}
+
+template<> VkStructureType getStructureType<VkImageBlit2KHR> (void)
+{
+       return VK_STRUCTURE_TYPE_IMAGE_BLIT_2_KHR;
+}
+
+template<> VkStructureType getStructureType<VkBlitImageInfo2KHR> (void)
+{
+       return VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2_KHR;
+}
+
+template<> VkStructureType getStructureType<VkImageResolve2KHR> (void)
+{
+       return VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2_KHR;
+}
+
+template<> VkStructureType getStructureType<VkResolveImageInfo2KHR> (void)
+{
+       return VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2_KHR;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT;
+}
+
+template<> VkStructureType getStructureType<VkImageViewASTCDecodeModeEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceASTCDecodeFeaturesEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT;
+}
+
+template<> VkStructureType getStructureType<VkSurfaceCapabilities2EXT> (void)
+{
+       return VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT;
+}
+
+template<> VkStructureType getStructureType<VkDisplayPowerInfoEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT;
+}
+
+template<> VkStructureType getStructureType<VkDeviceEventInfoEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT;
+}
+
+template<> VkStructureType getStructureType<VkDisplayEventInfoEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT;
+}
+
+template<> VkStructureType getStructureType<VkSwapchainCounterCreateInfoEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceDiscardRectanglePropertiesEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT;
+}
+
+template<> VkStructureType getStructureType<VkPipelineDiscardRectangleStateCreateInfoEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceConservativeRasterizationPropertiesEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT;
+}
+
+template<> VkStructureType getStructureType<VkPipelineRasterizationConservativeStateCreateInfoEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceDepthClipEnableFeaturesEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT;
+}
+
+template<> VkStructureType getStructureType<VkPipelineRasterizationDepthClipStateCreateInfoEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT;
+}
+
+template<> VkStructureType getStructureType<VkHdrMetadataEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_HDR_METADATA_EXT;
+}
+
+template<> VkStructureType getStructureType<VkSampleLocationsInfoEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT;
+}
+
+template<> VkStructureType getStructureType<VkRenderPassSampleLocationsBeginInfoEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT;
+}
+
+template<> VkStructureType getStructureType<VkPipelineSampleLocationsStateCreateInfoEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceSampleLocationsPropertiesEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT;
+}
+
+template<> VkStructureType getStructureType<VkMultisamplePropertiesEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT;
+}
+
+template<> VkStructureType getStructureType<VkPipelineColorBlendAdvancedStateCreateInfoEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT;
+}
+
+template<> VkStructureType getStructureType<VkDrmFormatModifierPropertiesListEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceImageDrmFormatModifierInfoEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT;
+}
+
+template<> VkStructureType getStructureType<VkImageDrmFormatModifierListCreateInfoEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT;
+}
+
+template<> VkStructureType getStructureType<VkImageDrmFormatModifierExplicitCreateInfoEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT;
+}
+
+template<> VkStructureType getStructureType<VkImageDrmFormatModifierPropertiesEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceImageViewImageFormatInfoEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT;
+}
+
+template<> VkStructureType getStructureType<VkFilterCubicImageViewImageFormatPropertiesEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT;
+}
+
+template<> VkStructureType getStructureType<VkDeviceQueueGlobalPriorityCreateInfoEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT;
+}
+
+template<> VkStructureType getStructureType<VkImportMemoryHostPointerInfoEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT;
+}
+
+template<> VkStructureType getStructureType<VkMemoryHostPointerPropertiesEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceExternalMemoryHostPropertiesEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT;
+}
+
+template<> VkStructureType getStructureType<VkCalibratedTimestampInfoEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT;
+}
+
+template<> VkStructureType getStructureType<VkPipelineVertexInputDivisorStateCreateInfoEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDevicePCIBusInfoPropertiesEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceSubgroupSizeControlFeaturesEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceSubgroupSizeControlPropertiesEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT;
+}
+
+template<> VkStructureType getStructureType<VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceMemoryBudgetPropertiesEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceYcbcrImageArraysFeaturesEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT;
+}
+
+template<> VkStructureType getStructureType<VkHeadlessSurfaceCreateInfoEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceLineRasterizationFeaturesEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceLineRasterizationPropertiesEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT;
+}
+
+template<> VkStructureType getStructureType<VkPipelineRasterizationLineStateCreateInfoEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceShaderAtomicFloatFeaturesEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceIndexTypeUint8FeaturesEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceExtendedDynamicStateFeaturesEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceRobustness2FeaturesEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceRobustness2PropertiesEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT;
+}
+
+template<> VkStructureType getStructureType<VkSamplerCustomBorderColorCreateInfoEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceCustomBorderColorPropertiesEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceCustomBorderColorFeaturesEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDeviceImageRobustnessFeaturesEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT;
+}
+
+template<> VkStructureType getStructureType<VkPhysicalDevice4444FormatsFeaturesEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT;
+}
+
diff --git a/external/vulkancts/framework/vulkan/generated/vulkansc/vkHandleType.inl b/external/vulkancts/framework/vulkan/generated/vulkansc/vkHandleType.inl
new file mode 100644 (file)
index 0000000..2d112d9
--- /dev/null
@@ -0,0 +1,38 @@
+/* WARNING: This is auto-generated file. Do not modify, since changes will
+ * be lost! Modify the generating script instead.
+ */
+enum HandleType
+{
+       HANDLE_TYPE_BUFFER                                              = 0,
+       HANDLE_TYPE_IMAGE,
+       HANDLE_TYPE_INSTANCE,
+       HANDLE_TYPE_PHYSICAL_DEVICE,
+       HANDLE_TYPE_DEVICE,
+       HANDLE_TYPE_QUEUE,
+       HANDLE_TYPE_SEMAPHORE,
+       HANDLE_TYPE_COMMAND_BUFFER,
+       HANDLE_TYPE_FENCE,
+       HANDLE_TYPE_DEVICE_MEMORY,
+       HANDLE_TYPE_EVENT,
+       HANDLE_TYPE_QUERY_POOL,
+       HANDLE_TYPE_BUFFER_VIEW,
+       HANDLE_TYPE_IMAGE_VIEW,
+       HANDLE_TYPE_SHADER_MODULE,
+       HANDLE_TYPE_PIPELINE_CACHE,
+       HANDLE_TYPE_PIPELINE_LAYOUT,
+       HANDLE_TYPE_PIPELINE,
+       HANDLE_TYPE_RENDER_PASS,
+       HANDLE_TYPE_DESCRIPTOR_SET_LAYOUT,
+       HANDLE_TYPE_SAMPLER,
+       HANDLE_TYPE_DESCRIPTOR_SET,
+       HANDLE_TYPE_DESCRIPTOR_POOL,
+       HANDLE_TYPE_FRAMEBUFFER,
+       HANDLE_TYPE_COMMAND_POOL,
+       HANDLE_TYPE_SAMPLER_YCBCR_CONVERSION,
+       HANDLE_TYPE_SURFACE_KHR,
+       HANDLE_TYPE_SWAPCHAIN_KHR,
+       HANDLE_TYPE_DISPLAY_KHR,
+       HANDLE_TYPE_DISPLAY_MODE_KHR,
+       HANDLE_TYPE_LAST                                                = HANDLE_TYPE_DISPLAY_MODE_KHR + 1
+};
+
diff --git a/external/vulkancts/framework/vulkan/generated/vulkansc/vkInitDeviceFunctionPointers.inl b/external/vulkancts/framework/vulkan/generated/vulkansc/vkInitDeviceFunctionPointers.inl
new file mode 100644 (file)
index 0000000..1bc4dd5
--- /dev/null
@@ -0,0 +1,190 @@
+/* WARNING: This is auto-generated file. Do not modify, since changes will
+ * be lost! Modify the generating script instead.
+ */
+m_vk.getDeviceProcAddr                                         = (GetDeviceProcAddrFunc)                                               GET_PROC_ADDR("vkGetDeviceProcAddr");
+m_vk.destroyDevice                                                     = (DestroyDeviceFunc)                                                   GET_PROC_ADDR("vkDestroyDevice");
+m_vk.getDeviceQueue                                                    = (GetDeviceQueueFunc)                                                  GET_PROC_ADDR("vkGetDeviceQueue");
+m_vk.queueSubmit                                                       = (QueueSubmitFunc)                                                             GET_PROC_ADDR("vkQueueSubmit");
+m_vk.queueWaitIdle                                                     = (QueueWaitIdleFunc)                                                   GET_PROC_ADDR("vkQueueWaitIdle");
+m_vk.deviceWaitIdle                                                    = (DeviceWaitIdleFunc)                                                  GET_PROC_ADDR("vkDeviceWaitIdle");
+m_vk.allocateMemory                                                    = (AllocateMemoryFunc)                                                  GET_PROC_ADDR("vkAllocateMemory");
+m_vk.mapMemory                                                         = (MapMemoryFunc)                                                               GET_PROC_ADDR("vkMapMemory");
+m_vk.unmapMemory                                                       = (UnmapMemoryFunc)                                                             GET_PROC_ADDR("vkUnmapMemory");
+m_vk.flushMappedMemoryRanges                           = (FlushMappedMemoryRangesFunc)                                 GET_PROC_ADDR("vkFlushMappedMemoryRanges");
+m_vk.invalidateMappedMemoryRanges                      = (InvalidateMappedMemoryRangesFunc)                    GET_PROC_ADDR("vkInvalidateMappedMemoryRanges");
+m_vk.getDeviceMemoryCommitment                         = (GetDeviceMemoryCommitmentFunc)                               GET_PROC_ADDR("vkGetDeviceMemoryCommitment");
+m_vk.bindBufferMemory                                          = (BindBufferMemoryFunc)                                                GET_PROC_ADDR("vkBindBufferMemory");
+m_vk.bindImageMemory                                           = (BindImageMemoryFunc)                                                 GET_PROC_ADDR("vkBindImageMemory");
+m_vk.getBufferMemoryRequirements                       = (GetBufferMemoryRequirementsFunc)                             GET_PROC_ADDR("vkGetBufferMemoryRequirements");
+m_vk.getImageMemoryRequirements                                = (GetImageMemoryRequirementsFunc)                              GET_PROC_ADDR("vkGetImageMemoryRequirements");
+m_vk.getImageSparseMemoryRequirements          = (GetImageSparseMemoryRequirementsFunc)                GET_PROC_ADDR("vkGetImageSparseMemoryRequirements");
+m_vk.queueBindSparse                                           = (QueueBindSparseFunc)                                                 GET_PROC_ADDR("vkQueueBindSparse");
+m_vk.createFence                                                       = (CreateFenceFunc)                                                             GET_PROC_ADDR("vkCreateFence");
+m_vk.destroyFence                                                      = (DestroyFenceFunc)                                                    GET_PROC_ADDR("vkDestroyFence");
+m_vk.resetFences                                                       = (ResetFencesFunc)                                                             GET_PROC_ADDR("vkResetFences");
+m_vk.getFenceStatus                                                    = (GetFenceStatusFunc)                                                  GET_PROC_ADDR("vkGetFenceStatus");
+m_vk.waitForFences                                                     = (WaitForFencesFunc)                                                   GET_PROC_ADDR("vkWaitForFences");
+m_vk.createSemaphore                                           = (CreateSemaphoreFunc)                                                 GET_PROC_ADDR("vkCreateSemaphore");
+m_vk.destroySemaphore                                          = (DestroySemaphoreFunc)                                                GET_PROC_ADDR("vkDestroySemaphore");
+m_vk.createEvent                                                       = (CreateEventFunc)                                                             GET_PROC_ADDR("vkCreateEvent");
+m_vk.destroyEvent                                                      = (DestroyEventFunc)                                                    GET_PROC_ADDR("vkDestroyEvent");
+m_vk.getEventStatus                                                    = (GetEventStatusFunc)                                                  GET_PROC_ADDR("vkGetEventStatus");
+m_vk.setEvent                                                          = (SetEventFunc)                                                                GET_PROC_ADDR("vkSetEvent");
+m_vk.resetEvent                                                                = (ResetEventFunc)                                                              GET_PROC_ADDR("vkResetEvent");
+m_vk.createQueryPool                                           = (CreateQueryPoolFunc)                                                 GET_PROC_ADDR("vkCreateQueryPool");
+m_vk.getQueryPoolResults                                       = (GetQueryPoolResultsFunc)                                             GET_PROC_ADDR("vkGetQueryPoolResults");
+m_vk.createBuffer                                                      = (CreateBufferFunc)                                                    GET_PROC_ADDR("vkCreateBuffer");
+m_vk.destroyBuffer                                                     = (DestroyBufferFunc)                                                   GET_PROC_ADDR("vkDestroyBuffer");
+m_vk.createBufferView                                          = (CreateBufferViewFunc)                                                GET_PROC_ADDR("vkCreateBufferView");
+m_vk.destroyBufferView                                         = (DestroyBufferViewFunc)                                               GET_PROC_ADDR("vkDestroyBufferView");
+m_vk.createImage                                                       = (CreateImageFunc)                                                             GET_PROC_ADDR("vkCreateImage");
+m_vk.destroyImage                                                      = (DestroyImageFunc)                                                    GET_PROC_ADDR("vkDestroyImage");
+m_vk.getImageSubresourceLayout                         = (GetImageSubresourceLayoutFunc)                               GET_PROC_ADDR("vkGetImageSubresourceLayout");
+m_vk.createImageView                                           = (CreateImageViewFunc)                                                 GET_PROC_ADDR("vkCreateImageView");
+m_vk.destroyImageView                                          = (DestroyImageViewFunc)                                                GET_PROC_ADDR("vkDestroyImageView");
+m_vk.createPipelineCache                                       = (CreatePipelineCacheFunc)                                             GET_PROC_ADDR("vkCreatePipelineCache");
+m_vk.destroyPipelineCache                                      = (DestroyPipelineCacheFunc)                                    GET_PROC_ADDR("vkDestroyPipelineCache");
+m_vk.createGraphicsPipelines                           = (CreateGraphicsPipelinesFunc)                                 GET_PROC_ADDR("vkCreateGraphicsPipelines");
+m_vk.createComputePipelines                                    = (CreateComputePipelinesFunc)                                  GET_PROC_ADDR("vkCreateComputePipelines");
+m_vk.destroyPipeline                                           = (DestroyPipelineFunc)                                                 GET_PROC_ADDR("vkDestroyPipeline");
+m_vk.createPipelineLayout                                      = (CreatePipelineLayoutFunc)                                    GET_PROC_ADDR("vkCreatePipelineLayout");
+m_vk.destroyPipelineLayout                                     = (DestroyPipelineLayoutFunc)                                   GET_PROC_ADDR("vkDestroyPipelineLayout");
+m_vk.createSampler                                                     = (CreateSamplerFunc)                                                   GET_PROC_ADDR("vkCreateSampler");
+m_vk.destroySampler                                                    = (DestroySamplerFunc)                                                  GET_PROC_ADDR("vkDestroySampler");
+m_vk.createDescriptorSetLayout                         = (CreateDescriptorSetLayoutFunc)                               GET_PROC_ADDR("vkCreateDescriptorSetLayout");
+m_vk.destroyDescriptorSetLayout                                = (DestroyDescriptorSetLayoutFunc)                              GET_PROC_ADDR("vkDestroyDescriptorSetLayout");
+m_vk.createDescriptorPool                                      = (CreateDescriptorPoolFunc)                                    GET_PROC_ADDR("vkCreateDescriptorPool");
+m_vk.resetDescriptorPool                                       = (ResetDescriptorPoolFunc)                                             GET_PROC_ADDR("vkResetDescriptorPool");
+m_vk.allocateDescriptorSets                                    = (AllocateDescriptorSetsFunc)                                  GET_PROC_ADDR("vkAllocateDescriptorSets");
+m_vk.freeDescriptorSets                                                = (FreeDescriptorSetsFunc)                                              GET_PROC_ADDR("vkFreeDescriptorSets");
+m_vk.updateDescriptorSets                                      = (UpdateDescriptorSetsFunc)                                    GET_PROC_ADDR("vkUpdateDescriptorSets");
+m_vk.createFramebuffer                                         = (CreateFramebufferFunc)                                               GET_PROC_ADDR("vkCreateFramebuffer");
+m_vk.destroyFramebuffer                                                = (DestroyFramebufferFunc)                                              GET_PROC_ADDR("vkDestroyFramebuffer");
+m_vk.createRenderPass                                          = (CreateRenderPassFunc)                                                GET_PROC_ADDR("vkCreateRenderPass");
+m_vk.destroyRenderPass                                         = (DestroyRenderPassFunc)                                               GET_PROC_ADDR("vkDestroyRenderPass");
+m_vk.getRenderAreaGranularity                          = (GetRenderAreaGranularityFunc)                                GET_PROC_ADDR("vkGetRenderAreaGranularity");
+m_vk.createCommandPool                                         = (CreateCommandPoolFunc)                                               GET_PROC_ADDR("vkCreateCommandPool");
+m_vk.resetCommandPool                                          = (ResetCommandPoolFunc)                                                GET_PROC_ADDR("vkResetCommandPool");
+m_vk.allocateCommandBuffers                                    = (AllocateCommandBuffersFunc)                                  GET_PROC_ADDR("vkAllocateCommandBuffers");
+m_vk.freeCommandBuffers                                                = (FreeCommandBuffersFunc)                                              GET_PROC_ADDR("vkFreeCommandBuffers");
+m_vk.beginCommandBuffer                                                = (BeginCommandBufferFunc)                                              GET_PROC_ADDR("vkBeginCommandBuffer");
+m_vk.endCommandBuffer                                          = (EndCommandBufferFunc)                                                GET_PROC_ADDR("vkEndCommandBuffer");
+m_vk.resetCommandBuffer                                                = (ResetCommandBufferFunc)                                              GET_PROC_ADDR("vkResetCommandBuffer");
+m_vk.cmdBindPipeline                                           = (CmdBindPipelineFunc)                                                 GET_PROC_ADDR("vkCmdBindPipeline");
+m_vk.cmdSetViewport                                                    = (CmdSetViewportFunc)                                                  GET_PROC_ADDR("vkCmdSetViewport");
+m_vk.cmdSetScissor                                                     = (CmdSetScissorFunc)                                                   GET_PROC_ADDR("vkCmdSetScissor");
+m_vk.cmdSetLineWidth                                           = (CmdSetLineWidthFunc)                                                 GET_PROC_ADDR("vkCmdSetLineWidth");
+m_vk.cmdSetDepthBias                                           = (CmdSetDepthBiasFunc)                                                 GET_PROC_ADDR("vkCmdSetDepthBias");
+m_vk.cmdSetBlendConstants                                      = (CmdSetBlendConstantsFunc)                                    GET_PROC_ADDR("vkCmdSetBlendConstants");
+m_vk.cmdSetDepthBounds                                         = (CmdSetDepthBoundsFunc)                                               GET_PROC_ADDR("vkCmdSetDepthBounds");
+m_vk.cmdSetStencilCompareMask                          = (CmdSetStencilCompareMaskFunc)                                GET_PROC_ADDR("vkCmdSetStencilCompareMask");
+m_vk.cmdSetStencilWriteMask                                    = (CmdSetStencilWriteMaskFunc)                                  GET_PROC_ADDR("vkCmdSetStencilWriteMask");
+m_vk.cmdSetStencilReference                                    = (CmdSetStencilReferenceFunc)                                  GET_PROC_ADDR("vkCmdSetStencilReference");
+m_vk.cmdBindDescriptorSets                                     = (CmdBindDescriptorSetsFunc)                                   GET_PROC_ADDR("vkCmdBindDescriptorSets");
+m_vk.cmdBindIndexBuffer                                                = (CmdBindIndexBufferFunc)                                              GET_PROC_ADDR("vkCmdBindIndexBuffer");
+m_vk.cmdBindVertexBuffers                                      = (CmdBindVertexBuffersFunc)                                    GET_PROC_ADDR("vkCmdBindVertexBuffers");
+m_vk.cmdDraw                                                           = (CmdDrawFunc)                                                                 GET_PROC_ADDR("vkCmdDraw");
+m_vk.cmdDrawIndexed                                                    = (CmdDrawIndexedFunc)                                                  GET_PROC_ADDR("vkCmdDrawIndexed");
+m_vk.cmdDrawIndirect                                           = (CmdDrawIndirectFunc)                                                 GET_PROC_ADDR("vkCmdDrawIndirect");
+m_vk.cmdDrawIndexedIndirect                                    = (CmdDrawIndexedIndirectFunc)                                  GET_PROC_ADDR("vkCmdDrawIndexedIndirect");
+m_vk.cmdDispatch                                                       = (CmdDispatchFunc)                                                             GET_PROC_ADDR("vkCmdDispatch");
+m_vk.cmdDispatchIndirect                                       = (CmdDispatchIndirectFunc)                                             GET_PROC_ADDR("vkCmdDispatchIndirect");
+m_vk.cmdCopyBuffer                                                     = (CmdCopyBufferFunc)                                                   GET_PROC_ADDR("vkCmdCopyBuffer");
+m_vk.cmdCopyImage                                                      = (CmdCopyImageFunc)                                                    GET_PROC_ADDR("vkCmdCopyImage");
+m_vk.cmdBlitImage                                                      = (CmdBlitImageFunc)                                                    GET_PROC_ADDR("vkCmdBlitImage");
+m_vk.cmdCopyBufferToImage                                      = (CmdCopyBufferToImageFunc)                                    GET_PROC_ADDR("vkCmdCopyBufferToImage");
+m_vk.cmdCopyImageToBuffer                                      = (CmdCopyImageToBufferFunc)                                    GET_PROC_ADDR("vkCmdCopyImageToBuffer");
+m_vk.cmdUpdateBuffer                                           = (CmdUpdateBufferFunc)                                                 GET_PROC_ADDR("vkCmdUpdateBuffer");
+m_vk.cmdFillBuffer                                                     = (CmdFillBufferFunc)                                                   GET_PROC_ADDR("vkCmdFillBuffer");
+m_vk.cmdClearColorImage                                                = (CmdClearColorImageFunc)                                              GET_PROC_ADDR("vkCmdClearColorImage");
+m_vk.cmdClearDepthStencilImage                         = (CmdClearDepthStencilImageFunc)                               GET_PROC_ADDR("vkCmdClearDepthStencilImage");
+m_vk.cmdClearAttachments                                       = (CmdClearAttachmentsFunc)                                             GET_PROC_ADDR("vkCmdClearAttachments");
+m_vk.cmdResolveImage                                           = (CmdResolveImageFunc)                                                 GET_PROC_ADDR("vkCmdResolveImage");
+m_vk.cmdSetEvent                                                       = (CmdSetEventFunc)                                                             GET_PROC_ADDR("vkCmdSetEvent");
+m_vk.cmdResetEvent                                                     = (CmdResetEventFunc)                                                   GET_PROC_ADDR("vkCmdResetEvent");
+m_vk.cmdWaitEvents                                                     = (CmdWaitEventsFunc)                                                   GET_PROC_ADDR("vkCmdWaitEvents");
+m_vk.cmdPipelineBarrier                                                = (CmdPipelineBarrierFunc)                                              GET_PROC_ADDR("vkCmdPipelineBarrier");
+m_vk.cmdBeginQuery                                                     = (CmdBeginQueryFunc)                                                   GET_PROC_ADDR("vkCmdBeginQuery");
+m_vk.cmdEndQuery                                                       = (CmdEndQueryFunc)                                                             GET_PROC_ADDR("vkCmdEndQuery");
+m_vk.cmdResetQueryPool                                         = (CmdResetQueryPoolFunc)                                               GET_PROC_ADDR("vkCmdResetQueryPool");
+m_vk.cmdWriteTimestamp                                         = (CmdWriteTimestampFunc)                                               GET_PROC_ADDR("vkCmdWriteTimestamp");
+m_vk.cmdCopyQueryPoolResults                           = (CmdCopyQueryPoolResultsFunc)                                 GET_PROC_ADDR("vkCmdCopyQueryPoolResults");
+m_vk.cmdPushConstants                                          = (CmdPushConstantsFunc)                                                GET_PROC_ADDR("vkCmdPushConstants");
+m_vk.cmdBeginRenderPass                                                = (CmdBeginRenderPassFunc)                                              GET_PROC_ADDR("vkCmdBeginRenderPass");
+m_vk.cmdNextSubpass                                                    = (CmdNextSubpassFunc)                                                  GET_PROC_ADDR("vkCmdNextSubpass");
+m_vk.cmdEndRenderPass                                          = (CmdEndRenderPassFunc)                                                GET_PROC_ADDR("vkCmdEndRenderPass");
+m_vk.cmdExecuteCommands                                                = (CmdExecuteCommandsFunc)                                              GET_PROC_ADDR("vkCmdExecuteCommands");
+m_vk.getCommandPoolMemoryConsumption           = (GetCommandPoolMemoryConsumptionFunc)                 GET_PROC_ADDR("vkGetCommandPoolMemoryConsumption");
+m_vk.getFaultData                                                      = (GetFaultDataFunc)                                                    GET_PROC_ADDR("vkGetFaultData");
+m_vk.bindBufferMemory2                                         = (BindBufferMemory2Func)                                               GET_PROC_ADDR("vkBindBufferMemory2");
+m_vk.bindImageMemory2                                          = (BindImageMemory2Func)                                                GET_PROC_ADDR("vkBindImageMemory2");
+m_vk.getDeviceGroupPeerMemoryFeatures          = (GetDeviceGroupPeerMemoryFeaturesFunc)                GET_PROC_ADDR("vkGetDeviceGroupPeerMemoryFeatures");
+m_vk.cmdSetDeviceMask                                          = (CmdSetDeviceMaskFunc)                                                GET_PROC_ADDR("vkCmdSetDeviceMask");
+m_vk.cmdDispatchBase                                           = (CmdDispatchBaseFunc)                                                 GET_PROC_ADDR("vkCmdDispatchBase");
+m_vk.getImageMemoryRequirements2                       = (GetImageMemoryRequirements2Func)                             GET_PROC_ADDR("vkGetImageMemoryRequirements2");
+m_vk.getBufferMemoryRequirements2                      = (GetBufferMemoryRequirements2Func)                    GET_PROC_ADDR("vkGetBufferMemoryRequirements2");
+m_vk.getImageSparseMemoryRequirements2         = (GetImageSparseMemoryRequirements2Func)               GET_PROC_ADDR("vkGetImageSparseMemoryRequirements2");
+m_vk.getDeviceQueue2                                           = (GetDeviceQueue2Func)                                                 GET_PROC_ADDR("vkGetDeviceQueue2");
+m_vk.createSamplerYcbcrConversion                      = (CreateSamplerYcbcrConversionFunc)                    GET_PROC_ADDR("vkCreateSamplerYcbcrConversion");
+m_vk.destroySamplerYcbcrConversion                     = (DestroySamplerYcbcrConversionFunc)                   GET_PROC_ADDR("vkDestroySamplerYcbcrConversion");
+m_vk.getDescriptorSetLayoutSupport                     = (GetDescriptorSetLayoutSupportFunc)                   GET_PROC_ADDR("vkGetDescriptorSetLayoutSupport");
+m_vk.cmdDrawIndirectCount                                      = (CmdDrawIndirectCountFunc)                                    GET_PROC_ADDR("vkCmdDrawIndirectCount");
+m_vk.cmdDrawIndexedIndirectCount                       = (CmdDrawIndexedIndirectCountFunc)                             GET_PROC_ADDR("vkCmdDrawIndexedIndirectCount");
+m_vk.createRenderPass2                                         = (CreateRenderPass2Func)                                               GET_PROC_ADDR("vkCreateRenderPass2");
+m_vk.cmdBeginRenderPass2                                       = (CmdBeginRenderPass2Func)                                             GET_PROC_ADDR("vkCmdBeginRenderPass2");
+m_vk.cmdNextSubpass2                                           = (CmdNextSubpass2Func)                                                 GET_PROC_ADDR("vkCmdNextSubpass2");
+m_vk.cmdEndRenderPass2                                         = (CmdEndRenderPass2Func)                                               GET_PROC_ADDR("vkCmdEndRenderPass2");
+m_vk.resetQueryPool                                                    = (ResetQueryPoolFunc)                                                  GET_PROC_ADDR("vkResetQueryPool");
+m_vk.getSemaphoreCounterValue                          = (GetSemaphoreCounterValueFunc)                                GET_PROC_ADDR("vkGetSemaphoreCounterValue");
+m_vk.waitSemaphores                                                    = (WaitSemaphoresFunc)                                                  GET_PROC_ADDR("vkWaitSemaphores");
+m_vk.signalSemaphore                                           = (SignalSemaphoreFunc)                                                 GET_PROC_ADDR("vkSignalSemaphore");
+m_vk.getBufferDeviceAddress                                    = (GetBufferDeviceAddressFunc)                                  GET_PROC_ADDR("vkGetBufferDeviceAddress");
+m_vk.getBufferOpaqueCaptureAddress                     = (GetBufferOpaqueCaptureAddressFunc)                   GET_PROC_ADDR("vkGetBufferOpaqueCaptureAddress");
+m_vk.getDeviceMemoryOpaqueCaptureAddress       = (GetDeviceMemoryOpaqueCaptureAddressFunc)             GET_PROC_ADDR("vkGetDeviceMemoryOpaqueCaptureAddress");
+m_vk.createSwapchainKHR                                                = (CreateSwapchainKHRFunc)                                              GET_PROC_ADDR("vkCreateSwapchainKHR");
+m_vk.getSwapchainImagesKHR                                     = (GetSwapchainImagesKHRFunc)                                   GET_PROC_ADDR("vkGetSwapchainImagesKHR");
+m_vk.acquireNextImageKHR                                       = (AcquireNextImageKHRFunc)                                             GET_PROC_ADDR("vkAcquireNextImageKHR");
+m_vk.queuePresentKHR                                           = (QueuePresentKHRFunc)                                                 GET_PROC_ADDR("vkQueuePresentKHR");
+m_vk.getDeviceGroupPresentCapabilitiesKHR      = (GetDeviceGroupPresentCapabilitiesKHRFunc)    GET_PROC_ADDR("vkGetDeviceGroupPresentCapabilitiesKHR");
+m_vk.getDeviceGroupSurfacePresentModesKHR      = (GetDeviceGroupSurfacePresentModesKHRFunc)    GET_PROC_ADDR("vkGetDeviceGroupSurfacePresentModesKHR");
+m_vk.acquireNextImage2KHR                                      = (AcquireNextImage2KHRFunc)                                    GET_PROC_ADDR("vkAcquireNextImage2KHR");
+m_vk.createSharedSwapchainsKHR                         = (CreateSharedSwapchainsKHRFunc)                               GET_PROC_ADDR("vkCreateSharedSwapchainsKHR");
+m_vk.getMemoryFdKHR                                                    = (GetMemoryFdKHRFunc)                                                  GET_PROC_ADDR("vkGetMemoryFdKHR");
+m_vk.getMemoryFdPropertiesKHR                          = (GetMemoryFdPropertiesKHRFunc)                                GET_PROC_ADDR("vkGetMemoryFdPropertiesKHR");
+m_vk.importSemaphoreFdKHR                                      = (ImportSemaphoreFdKHRFunc)                                    GET_PROC_ADDR("vkImportSemaphoreFdKHR");
+m_vk.getSemaphoreFdKHR                                         = (GetSemaphoreFdKHRFunc)                                               GET_PROC_ADDR("vkGetSemaphoreFdKHR");
+m_vk.getSwapchainStatusKHR                                     = (GetSwapchainStatusKHRFunc)                                   GET_PROC_ADDR("vkGetSwapchainStatusKHR");
+m_vk.importFenceFdKHR                                          = (ImportFenceFdKHRFunc)                                                GET_PROC_ADDR("vkImportFenceFdKHR");
+m_vk.getFenceFdKHR                                                     = (GetFenceFdKHRFunc)                                                   GET_PROC_ADDR("vkGetFenceFdKHR");
+m_vk.cmdSetFragmentShadingRateKHR                      = (CmdSetFragmentShadingRateKHRFunc)                    GET_PROC_ADDR("vkCmdSetFragmentShadingRateKHR");
+m_vk.getFaultDataKHR                                           = (GetFaultDataKHRFunc)                                                 GET_PROC_ADDR("vkGetFaultDataKHR");
+m_vk.cmdRefreshObjectsKHR                                      = (CmdRefreshObjectsKHRFunc)                                    GET_PROC_ADDR("vkCmdRefreshObjectsKHR");
+m_vk.cmdCopyBuffer2KHR                                         = (CmdCopyBuffer2KHRFunc)                                               GET_PROC_ADDR("vkCmdCopyBuffer2KHR");
+m_vk.cmdCopyImage2KHR                                          = (CmdCopyImage2KHRFunc)                                                GET_PROC_ADDR("vkCmdCopyImage2KHR");
+m_vk.cmdCopyBufferToImage2KHR                          = (CmdCopyBufferToImage2KHRFunc)                                GET_PROC_ADDR("vkCmdCopyBufferToImage2KHR");
+m_vk.cmdCopyImageToBuffer2KHR                          = (CmdCopyImageToBuffer2KHRFunc)                                GET_PROC_ADDR("vkCmdCopyImageToBuffer2KHR");
+m_vk.cmdBlitImage2KHR                                          = (CmdBlitImage2KHRFunc)                                                GET_PROC_ADDR("vkCmdBlitImage2KHR");
+m_vk.cmdResolveImage2KHR                                       = (CmdResolveImage2KHRFunc)                                             GET_PROC_ADDR("vkCmdResolveImage2KHR");
+m_vk.displayPowerControlEXT                                    = (DisplayPowerControlEXTFunc)                                  GET_PROC_ADDR("vkDisplayPowerControlEXT");
+m_vk.registerDeviceEventEXT                                    = (RegisterDeviceEventEXTFunc)                                  GET_PROC_ADDR("vkRegisterDeviceEventEXT");
+m_vk.registerDisplayEventEXT                           = (RegisterDisplayEventEXTFunc)                                 GET_PROC_ADDR("vkRegisterDisplayEventEXT");
+m_vk.getSwapchainCounterEXT                                    = (GetSwapchainCounterEXTFunc)                                  GET_PROC_ADDR("vkGetSwapchainCounterEXT");
+m_vk.cmdSetDiscardRectangleEXT                         = (CmdSetDiscardRectangleEXTFunc)                               GET_PROC_ADDR("vkCmdSetDiscardRectangleEXT");
+m_vk.setHdrMetadataEXT                                         = (SetHdrMetadataEXTFunc)                                               GET_PROC_ADDR("vkSetHdrMetadataEXT");
+m_vk.cmdSetSampleLocationsEXT                          = (CmdSetSampleLocationsEXTFunc)                                GET_PROC_ADDR("vkCmdSetSampleLocationsEXT");
+m_vk.getImageDrmFormatModifierPropertiesEXT    = (GetImageDrmFormatModifierPropertiesEXTFunc)  GET_PROC_ADDR("vkGetImageDrmFormatModifierPropertiesEXT");
+m_vk.getMemoryHostPointerPropertiesEXT         = (GetMemoryHostPointerPropertiesEXTFunc)               GET_PROC_ADDR("vkGetMemoryHostPointerPropertiesEXT");
+m_vk.getCalibratedTimestampsEXT                                = (GetCalibratedTimestampsEXTFunc)                              GET_PROC_ADDR("vkGetCalibratedTimestampsEXT");
+m_vk.cmdSetLineStippleEXT                                      = (CmdSetLineStippleEXTFunc)                                    GET_PROC_ADDR("vkCmdSetLineStippleEXT");
+m_vk.cmdSetCullModeEXT                                         = (CmdSetCullModeEXTFunc)                                               GET_PROC_ADDR("vkCmdSetCullModeEXT");
+m_vk.cmdSetFrontFaceEXT                                                = (CmdSetFrontFaceEXTFunc)                                              GET_PROC_ADDR("vkCmdSetFrontFaceEXT");
+m_vk.cmdSetPrimitiveTopologyEXT                                = (CmdSetPrimitiveTopologyEXTFunc)                              GET_PROC_ADDR("vkCmdSetPrimitiveTopologyEXT");
+m_vk.cmdSetViewportWithCountEXT                                = (CmdSetViewportWithCountEXTFunc)                              GET_PROC_ADDR("vkCmdSetViewportWithCountEXT");
+m_vk.cmdSetScissorWithCountEXT                         = (CmdSetScissorWithCountEXTFunc)                               GET_PROC_ADDR("vkCmdSetScissorWithCountEXT");
+m_vk.cmdBindVertexBuffers2EXT                          = (CmdBindVertexBuffers2EXTFunc)                                GET_PROC_ADDR("vkCmdBindVertexBuffers2EXT");
+m_vk.cmdSetDepthTestEnableEXT                          = (CmdSetDepthTestEnableEXTFunc)                                GET_PROC_ADDR("vkCmdSetDepthTestEnableEXT");
+m_vk.cmdSetDepthWriteEnableEXT                         = (CmdSetDepthWriteEnableEXTFunc)                               GET_PROC_ADDR("vkCmdSetDepthWriteEnableEXT");
+m_vk.cmdSetDepthCompareOpEXT                           = (CmdSetDepthCompareOpEXTFunc)                                 GET_PROC_ADDR("vkCmdSetDepthCompareOpEXT");
+m_vk.cmdSetDepthBoundsTestEnableEXT                    = (CmdSetDepthBoundsTestEnableEXTFunc)                  GET_PROC_ADDR("vkCmdSetDepthBoundsTestEnableEXT");
+m_vk.cmdSetStencilTestEnableEXT                                = (CmdSetStencilTestEnableEXTFunc)                              GET_PROC_ADDR("vkCmdSetStencilTestEnableEXT");
+m_vk.cmdSetStencilOpEXT                                                = (CmdSetStencilOpEXTFunc)                                              GET_PROC_ADDR("vkCmdSetStencilOpEXT");
diff --git a/external/vulkancts/framework/vulkan/generated/vulkansc/vkInitInstanceFunctionPointers.inl b/external/vulkancts/framework/vulkan/generated/vulkansc/vkInitInstanceFunctionPointers.inl
new file mode 100644 (file)
index 0000000..1e60095
--- /dev/null
@@ -0,0 +1,52 @@
+/* WARNING: This is auto-generated file. Do not modify, since changes will
+ * be lost! Modify the generating script instead.
+ */
+m_vk.destroyInstance                                                           = (DestroyInstanceFunc)                                                                 GET_PROC_ADDR("vkDestroyInstance");
+m_vk.enumeratePhysicalDevices                                          = (EnumeratePhysicalDevicesFunc)                                                GET_PROC_ADDR("vkEnumeratePhysicalDevices");
+m_vk.getPhysicalDeviceFeatures                                         = (GetPhysicalDeviceFeaturesFunc)                                               GET_PROC_ADDR("vkGetPhysicalDeviceFeatures");
+m_vk.getPhysicalDeviceFormatProperties                         = (GetPhysicalDeviceFormatPropertiesFunc)                               GET_PROC_ADDR("vkGetPhysicalDeviceFormatProperties");
+m_vk.getPhysicalDeviceImageFormatProperties                    = (GetPhysicalDeviceImageFormatPropertiesFunc)                  GET_PROC_ADDR("vkGetPhysicalDeviceImageFormatProperties");
+m_vk.getPhysicalDeviceProperties                                       = (GetPhysicalDevicePropertiesFunc)                                             GET_PROC_ADDR("vkGetPhysicalDeviceProperties");
+m_vk.getPhysicalDeviceQueueFamilyProperties                    = (GetPhysicalDeviceQueueFamilyPropertiesFunc)                  GET_PROC_ADDR("vkGetPhysicalDeviceQueueFamilyProperties");
+m_vk.getPhysicalDeviceMemoryProperties                         = (GetPhysicalDeviceMemoryPropertiesFunc)                               GET_PROC_ADDR("vkGetPhysicalDeviceMemoryProperties");
+m_vk.createDevice                                                                      = (CreateDeviceFunc)                                                                    GET_PROC_ADDR("vkCreateDevice");
+m_vk.enumerateDeviceExtensionProperties                                = (EnumerateDeviceExtensionPropertiesFunc)                              GET_PROC_ADDR("vkEnumerateDeviceExtensionProperties");
+m_vk.enumerateDeviceLayerProperties                                    = (EnumerateDeviceLayerPropertiesFunc)                                  GET_PROC_ADDR("vkEnumerateDeviceLayerProperties");
+m_vk.getPhysicalDeviceSparseImageFormatProperties      = (GetPhysicalDeviceSparseImageFormatPropertiesFunc)    GET_PROC_ADDR("vkGetPhysicalDeviceSparseImageFormatProperties");
+m_vk.enumeratePhysicalDeviceGroups                                     = (EnumeratePhysicalDeviceGroupsFunc)                                   GET_PROC_ADDR("vkEnumeratePhysicalDeviceGroups");
+m_vk.getPhysicalDeviceFeatures2                                                = (GetPhysicalDeviceFeatures2Func)                                              GET_PROC_ADDR("vkGetPhysicalDeviceFeatures2");
+m_vk.getPhysicalDeviceProperties2                                      = (GetPhysicalDeviceProperties2Func)                                    GET_PROC_ADDR("vkGetPhysicalDeviceProperties2");
+m_vk.getPhysicalDeviceFormatProperties2                                = (GetPhysicalDeviceFormatProperties2Func)                              GET_PROC_ADDR("vkGetPhysicalDeviceFormatProperties2");
+m_vk.getPhysicalDeviceImageFormatProperties2           = (GetPhysicalDeviceImageFormatProperties2Func)                 GET_PROC_ADDR("vkGetPhysicalDeviceImageFormatProperties2");
+m_vk.getPhysicalDeviceQueueFamilyProperties2           = (GetPhysicalDeviceQueueFamilyProperties2Func)                 GET_PROC_ADDR("vkGetPhysicalDeviceQueueFamilyProperties2");
+m_vk.getPhysicalDeviceMemoryProperties2                                = (GetPhysicalDeviceMemoryProperties2Func)                              GET_PROC_ADDR("vkGetPhysicalDeviceMemoryProperties2");
+m_vk.getPhysicalDeviceSparseImageFormatProperties2     = (GetPhysicalDeviceSparseImageFormatProperties2Func)   GET_PROC_ADDR("vkGetPhysicalDeviceSparseImageFormatProperties2");
+m_vk.getPhysicalDeviceExternalBufferProperties         = (GetPhysicalDeviceExternalBufferPropertiesFunc)               GET_PROC_ADDR("vkGetPhysicalDeviceExternalBufferProperties");
+m_vk.getPhysicalDeviceExternalFenceProperties          = (GetPhysicalDeviceExternalFencePropertiesFunc)                GET_PROC_ADDR("vkGetPhysicalDeviceExternalFenceProperties");
+m_vk.getPhysicalDeviceExternalSemaphoreProperties      = (GetPhysicalDeviceExternalSemaphorePropertiesFunc)    GET_PROC_ADDR("vkGetPhysicalDeviceExternalSemaphoreProperties");
+m_vk.destroySurfaceKHR                                                         = (DestroySurfaceKHRFunc)                                                               GET_PROC_ADDR("vkDestroySurfaceKHR");
+m_vk.getPhysicalDeviceSurfaceSupportKHR                                = (GetPhysicalDeviceSurfaceSupportKHRFunc)                              GET_PROC_ADDR("vkGetPhysicalDeviceSurfaceSupportKHR");
+m_vk.getPhysicalDeviceSurfaceCapabilitiesKHR           = (GetPhysicalDeviceSurfaceCapabilitiesKHRFunc)                 GET_PROC_ADDR("vkGetPhysicalDeviceSurfaceCapabilitiesKHR");
+m_vk.getPhysicalDeviceSurfaceFormatsKHR                                = (GetPhysicalDeviceSurfaceFormatsKHRFunc)                              GET_PROC_ADDR("vkGetPhysicalDeviceSurfaceFormatsKHR");
+m_vk.getPhysicalDeviceSurfacePresentModesKHR           = (GetPhysicalDeviceSurfacePresentModesKHRFunc)                 GET_PROC_ADDR("vkGetPhysicalDeviceSurfacePresentModesKHR");
+m_vk.getPhysicalDevicePresentRectanglesKHR                     = (GetPhysicalDevicePresentRectanglesKHRFunc)                   GET_PROC_ADDR("vkGetPhysicalDevicePresentRectanglesKHR");
+m_vk.getPhysicalDeviceDisplayPropertiesKHR                     = (GetPhysicalDeviceDisplayPropertiesKHRFunc)                   GET_PROC_ADDR("vkGetPhysicalDeviceDisplayPropertiesKHR");
+m_vk.getPhysicalDeviceDisplayPlanePropertiesKHR                = (GetPhysicalDeviceDisplayPlanePropertiesKHRFunc)              GET_PROC_ADDR("vkGetPhysicalDeviceDisplayPlanePropertiesKHR");
+m_vk.getDisplayPlaneSupportedDisplaysKHR                       = (GetDisplayPlaneSupportedDisplaysKHRFunc)                             GET_PROC_ADDR("vkGetDisplayPlaneSupportedDisplaysKHR");
+m_vk.getDisplayModePropertiesKHR                                       = (GetDisplayModePropertiesKHRFunc)                                             GET_PROC_ADDR("vkGetDisplayModePropertiesKHR");
+m_vk.createDisplayModeKHR                                                      = (CreateDisplayModeKHRFunc)                                                    GET_PROC_ADDR("vkCreateDisplayModeKHR");
+m_vk.getDisplayPlaneCapabilitiesKHR                                    = (GetDisplayPlaneCapabilitiesKHRFunc)                                  GET_PROC_ADDR("vkGetDisplayPlaneCapabilitiesKHR");
+m_vk.createDisplayPlaneSurfaceKHR                                      = (CreateDisplayPlaneSurfaceKHRFunc)                                    GET_PROC_ADDR("vkCreateDisplayPlaneSurfaceKHR");
+m_vk.getPhysicalDeviceSurfaceCapabilities2KHR          = (GetPhysicalDeviceSurfaceCapabilities2KHRFunc)                GET_PROC_ADDR("vkGetPhysicalDeviceSurfaceCapabilities2KHR");
+m_vk.getPhysicalDeviceSurfaceFormats2KHR                       = (GetPhysicalDeviceSurfaceFormats2KHRFunc)                             GET_PROC_ADDR("vkGetPhysicalDeviceSurfaceFormats2KHR");
+m_vk.getPhysicalDeviceDisplayProperties2KHR                    = (GetPhysicalDeviceDisplayProperties2KHRFunc)                  GET_PROC_ADDR("vkGetPhysicalDeviceDisplayProperties2KHR");
+m_vk.getPhysicalDeviceDisplayPlaneProperties2KHR       = (GetPhysicalDeviceDisplayPlaneProperties2KHRFunc)             GET_PROC_ADDR("vkGetPhysicalDeviceDisplayPlaneProperties2KHR");
+m_vk.getDisplayModeProperties2KHR                                      = (GetDisplayModeProperties2KHRFunc)                                    GET_PROC_ADDR("vkGetDisplayModeProperties2KHR");
+m_vk.getDisplayPlaneCapabilities2KHR                           = (GetDisplayPlaneCapabilities2KHRFunc)                                 GET_PROC_ADDR("vkGetDisplayPlaneCapabilities2KHR");
+m_vk.getPhysicalDeviceFragmentShadingRatesKHR          = (GetPhysicalDeviceFragmentShadingRatesKHRFunc)                GET_PROC_ADDR("vkGetPhysicalDeviceFragmentShadingRatesKHR");
+m_vk.getPhysicalDeviceRefreshableObjectTypesKHR                = (GetPhysicalDeviceRefreshableObjectTypesKHRFunc)              GET_PROC_ADDR("vkGetPhysicalDeviceRefreshableObjectTypesKHR");
+m_vk.releaseDisplayEXT                                                         = (ReleaseDisplayEXTFunc)                                                               GET_PROC_ADDR("vkReleaseDisplayEXT");
+m_vk.getPhysicalDeviceSurfaceCapabilities2EXT          = (GetPhysicalDeviceSurfaceCapabilities2EXTFunc)                GET_PROC_ADDR("vkGetPhysicalDeviceSurfaceCapabilities2EXT");
+m_vk.getPhysicalDeviceMultisamplePropertiesEXT         = (GetPhysicalDeviceMultisamplePropertiesEXTFunc)               GET_PROC_ADDR("vkGetPhysicalDeviceMultisamplePropertiesEXT");
+m_vk.getPhysicalDeviceCalibrateableTimeDomainsEXT      = (GetPhysicalDeviceCalibrateableTimeDomainsEXTFunc)    GET_PROC_ADDR("vkGetPhysicalDeviceCalibrateableTimeDomainsEXT");
+m_vk.createHeadlessSurfaceEXT                                          = (CreateHeadlessSurfaceEXTFunc)                                                GET_PROC_ADDR("vkCreateHeadlessSurfaceEXT");
diff --git a/external/vulkancts/framework/vulkan/generated/vulkansc/vkInitPlatformFunctionPointers.inl b/external/vulkancts/framework/vulkan/generated/vulkansc/vkInitPlatformFunctionPointers.inl
new file mode 100644 (file)
index 0000000..ce20970
--- /dev/null
@@ -0,0 +1,7 @@
+/* WARNING: This is auto-generated file. Do not modify, since changes will
+ * be lost! Modify the generating script instead.
+ */
+m_vk.createInstance                                                    = (CreateInstanceFunc)                                                  GET_PROC_ADDR("vkCreateInstance");
+m_vk.enumerateInstanceExtensionProperties      = (EnumerateInstanceExtensionPropertiesFunc)    GET_PROC_ADDR("vkEnumerateInstanceExtensionProperties");
+m_vk.enumerateInstanceLayerProperties          = (EnumerateInstanceLayerPropertiesFunc)                GET_PROC_ADDR("vkEnumerateInstanceLayerProperties");
+m_vk.enumerateInstanceVersion                          = (EnumerateInstanceVersionFunc)                                GET_PROC_ADDR("vkEnumerateInstanceVersion");
diff --git a/external/vulkancts/framework/vulkan/generated/vulkansc/vkInstanceDriverImpl.inl b/external/vulkancts/framework/vulkan/generated/vulkansc/vkInstanceDriverImpl.inl
new file mode 100644 (file)
index 0000000..7ab7edf
--- /dev/null
@@ -0,0 +1,248 @@
+/* WARNING: This is auto-generated file. Do not modify, since changes will
+ * be lost! Modify the generating script instead.
+ */
+
+void InstanceDriver::destroyInstance (VkInstance instance, const VkAllocationCallbacks* pAllocator) const
+{
+       m_vk.destroyInstance(instance, pAllocator);
+}
+
+VkResult InstanceDriver::enumeratePhysicalDevices (VkInstance instance, deUint32* pPhysicalDeviceCount, VkPhysicalDevice* pPhysicalDevices) const
+{
+       return m_vk.enumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices);
+}
+
+void InstanceDriver::getPhysicalDeviceFeatures (VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures* pFeatures) const
+{
+       m_vk.getPhysicalDeviceFeatures(physicalDevice, pFeatures);
+}
+
+void InstanceDriver::getPhysicalDeviceFormatProperties (VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties* pFormatProperties) const
+{
+       m_vk.getPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
+}
+
+VkResult InstanceDriver::getPhysicalDeviceImageFormatProperties (VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkImageFormatProperties* pImageFormatProperties) const
+{
+       return m_vk.getPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties);
+}
+
+void InstanceDriver::getPhysicalDeviceProperties (VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties* pProperties) const
+{
+       m_vk.getPhysicalDeviceProperties(physicalDevice, pProperties);
+}
+
+void InstanceDriver::getPhysicalDeviceQueueFamilyProperties (VkPhysicalDevice physicalDevice, deUint32* pQueueFamilyPropertyCount, VkQueueFamilyProperties* pQueueFamilyProperties) const
+{
+       m_vk.getPhysicalDeviceQueueFamilyProperties(physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties);
+}
+
+void InstanceDriver::getPhysicalDeviceMemoryProperties (VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties* pMemoryProperties) const
+{
+       m_vk.getPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
+}
+
+VkResult InstanceDriver::createDevice (VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDevice* pDevice) const
+{
+       return m_vk.createDevice(physicalDevice, pCreateInfo, pAllocator, pDevice);
+}
+
+VkResult InstanceDriver::enumerateDeviceExtensionProperties (VkPhysicalDevice physicalDevice, const char* pLayerName, deUint32* pPropertyCount, VkExtensionProperties* pProperties) const
+{
+       return m_vk.enumerateDeviceExtensionProperties(physicalDevice, pLayerName, pPropertyCount, pProperties);
+}
+
+VkResult InstanceDriver::enumerateDeviceLayerProperties (VkPhysicalDevice physicalDevice, deUint32* pPropertyCount, VkLayerProperties* pProperties) const
+{
+       return m_vk.enumerateDeviceLayerProperties(physicalDevice, pPropertyCount, pProperties);
+}
+
+void InstanceDriver::getPhysicalDeviceSparseImageFormatProperties (VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkSampleCountFlagBits samples, VkImageUsageFlags usage, VkImageTiling tiling, deUint32* pPropertyCount, VkSparseImageFormatProperties* pProperties) const
+{
+       m_vk.getPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pPropertyCount, pProperties);
+}
+
+VkResult InstanceDriver::enumeratePhysicalDeviceGroups (VkInstance instance, deUint32* pPhysicalDeviceGroupCount, VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties) const
+{
+       return m_vk.enumeratePhysicalDeviceGroups(instance, pPhysicalDeviceGroupCount, pPhysicalDeviceGroupProperties);
+}
+
+void InstanceDriver::getPhysicalDeviceFeatures2 (VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures2* pFeatures) const
+{
+       m_vk.getPhysicalDeviceFeatures2(physicalDevice, pFeatures);
+}
+
+void InstanceDriver::getPhysicalDeviceProperties2 (VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties2* pProperties) const
+{
+       m_vk.getPhysicalDeviceProperties2(physicalDevice, pProperties);
+}
+
+void InstanceDriver::getPhysicalDeviceFormatProperties2 (VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties2* pFormatProperties) const
+{
+       m_vk.getPhysicalDeviceFormatProperties2(physicalDevice, format, pFormatProperties);
+}
+
+VkResult InstanceDriver::getPhysicalDeviceImageFormatProperties2 (VkPhysicalDevice physicalDevice, const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo, VkImageFormatProperties2* pImageFormatProperties) const
+{
+       return m_vk.getPhysicalDeviceImageFormatProperties2(physicalDevice, pImageFormatInfo, pImageFormatProperties);
+}
+
+void InstanceDriver::getPhysicalDeviceQueueFamilyProperties2 (VkPhysicalDevice physicalDevice, deUint32* pQueueFamilyPropertyCount, VkQueueFamilyProperties2* pQueueFamilyProperties) const
+{
+       m_vk.getPhysicalDeviceQueueFamilyProperties2(physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties);
+}
+
+void InstanceDriver::getPhysicalDeviceMemoryProperties2 (VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties2* pMemoryProperties) const
+{
+       m_vk.getPhysicalDeviceMemoryProperties2(physicalDevice, pMemoryProperties);
+}
+
+void InstanceDriver::getPhysicalDeviceSparseImageFormatProperties2 (VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo, deUint32* pPropertyCount, VkSparseImageFormatProperties2* pProperties) const
+{
+       m_vk.getPhysicalDeviceSparseImageFormatProperties2(physicalDevice, pFormatInfo, pPropertyCount, pProperties);
+}
+
+void InstanceDriver::getPhysicalDeviceExternalBufferProperties (VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo, VkExternalBufferProperties* pExternalBufferProperties) const
+{
+       m_vk.getPhysicalDeviceExternalBufferProperties(physicalDevice, pExternalBufferInfo, pExternalBufferProperties);
+}
+
+void InstanceDriver::getPhysicalDeviceExternalFenceProperties (VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo, VkExternalFenceProperties* pExternalFenceProperties) const
+{
+       m_vk.getPhysicalDeviceExternalFenceProperties(physicalDevice, pExternalFenceInfo, pExternalFenceProperties);
+}
+
+void InstanceDriver::getPhysicalDeviceExternalSemaphoreProperties (VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo, VkExternalSemaphoreProperties* pExternalSemaphoreProperties) const
+{
+       m_vk.getPhysicalDeviceExternalSemaphoreProperties(physicalDevice, pExternalSemaphoreInfo, pExternalSemaphoreProperties);
+}
+
+void InstanceDriver::destroySurfaceKHR (VkInstance instance, VkSurfaceKHR surface, const VkAllocationCallbacks* pAllocator) const
+{
+       m_vk.destroySurfaceKHR(instance, surface, pAllocator);
+}
+
+VkResult InstanceDriver::getPhysicalDeviceSurfaceSupportKHR (VkPhysicalDevice physicalDevice, deUint32 queueFamilyIndex, VkSurfaceKHR surface, VkBool32* pSupported) const
+{
+       return m_vk.getPhysicalDeviceSurfaceSupportKHR(physicalDevice, queueFamilyIndex, surface, pSupported);
+}
+
+VkResult InstanceDriver::getPhysicalDeviceSurfaceCapabilitiesKHR (VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, VkSurfaceCapabilitiesKHR* pSurfaceCapabilities) const
+{
+       return m_vk.getPhysicalDeviceSurfaceCapabilitiesKHR(physicalDevice, surface, pSurfaceCapabilities);
+}
+
+VkResult InstanceDriver::getPhysicalDeviceSurfaceFormatsKHR (VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, deUint32* pSurfaceFormatCount, VkSurfaceFormatKHR* pSurfaceFormats) const
+{
+       return m_vk.getPhysicalDeviceSurfaceFormatsKHR(physicalDevice, surface, pSurfaceFormatCount, pSurfaceFormats);
+}
+
+VkResult InstanceDriver::getPhysicalDeviceSurfacePresentModesKHR (VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, deUint32* pPresentModeCount, VkPresentModeKHR* pPresentModes) const
+{
+       return m_vk.getPhysicalDeviceSurfacePresentModesKHR(physicalDevice, surface, pPresentModeCount, pPresentModes);
+}
+
+VkResult InstanceDriver::getPhysicalDevicePresentRectanglesKHR (VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, deUint32* pRectCount, VkRect2D* pRects) const
+{
+       return m_vk.getPhysicalDevicePresentRectanglesKHR(physicalDevice, surface, pRectCount, pRects);
+}
+
+VkResult InstanceDriver::getPhysicalDeviceDisplayPropertiesKHR (VkPhysicalDevice physicalDevice, deUint32* pPropertyCount, VkDisplayPropertiesKHR* pProperties) const
+{
+       return m_vk.getPhysicalDeviceDisplayPropertiesKHR(physicalDevice, pPropertyCount, pProperties);
+}
+
+VkResult InstanceDriver::getPhysicalDeviceDisplayPlanePropertiesKHR (VkPhysicalDevice physicalDevice, deUint32* pPropertyCount, VkDisplayPlanePropertiesKHR* pProperties) const
+{
+       return m_vk.getPhysicalDeviceDisplayPlanePropertiesKHR(physicalDevice, pPropertyCount, pProperties);
+}
+
+VkResult InstanceDriver::getDisplayPlaneSupportedDisplaysKHR (VkPhysicalDevice physicalDevice, deUint32 planeIndex, deUint32* pDisplayCount, VkDisplayKHR* pDisplays) const
+{
+       return m_vk.getDisplayPlaneSupportedDisplaysKHR(physicalDevice, planeIndex, pDisplayCount, pDisplays);
+}
+
+VkResult InstanceDriver::getDisplayModePropertiesKHR (VkPhysicalDevice physicalDevice, VkDisplayKHR display, deUint32* pPropertyCount, VkDisplayModePropertiesKHR* pProperties) const
+{
+       return m_vk.getDisplayModePropertiesKHR(physicalDevice, display, pPropertyCount, pProperties);
+}
+
+VkResult InstanceDriver::createDisplayModeKHR (VkPhysicalDevice physicalDevice, VkDisplayKHR display, const VkDisplayModeCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDisplayModeKHR* pMode) const
+{
+       return m_vk.createDisplayModeKHR(physicalDevice, display, pCreateInfo, pAllocator, pMode);
+}
+
+VkResult InstanceDriver::getDisplayPlaneCapabilitiesKHR (VkPhysicalDevice physicalDevice, VkDisplayModeKHR mode, deUint32 planeIndex, VkDisplayPlaneCapabilitiesKHR* pCapabilities) const
+{
+       return m_vk.getDisplayPlaneCapabilitiesKHR(physicalDevice, mode, planeIndex, pCapabilities);
+}
+
+VkResult InstanceDriver::createDisplayPlaneSurfaceKHR (VkInstance instance, const VkDisplaySurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface) const
+{
+       return m_vk.createDisplayPlaneSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
+}
+
+VkResult InstanceDriver::getPhysicalDeviceSurfaceCapabilities2KHR (VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, VkSurfaceCapabilities2KHR* pSurfaceCapabilities) const
+{
+       return m_vk.getPhysicalDeviceSurfaceCapabilities2KHR(physicalDevice, pSurfaceInfo, pSurfaceCapabilities);
+}
+
+VkResult InstanceDriver::getPhysicalDeviceSurfaceFormats2KHR (VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, deUint32* pSurfaceFormatCount, VkSurfaceFormat2KHR* pSurfaceFormats) const
+{
+       return m_vk.getPhysicalDeviceSurfaceFormats2KHR(physicalDevice, pSurfaceInfo, pSurfaceFormatCount, pSurfaceFormats);
+}
+
+VkResult InstanceDriver::getPhysicalDeviceDisplayProperties2KHR (VkPhysicalDevice physicalDevice, deUint32* pPropertyCount, VkDisplayProperties2KHR* pProperties) const
+{
+       return m_vk.getPhysicalDeviceDisplayProperties2KHR(physicalDevice, pPropertyCount, pProperties);
+}
+
+VkResult InstanceDriver::getPhysicalDeviceDisplayPlaneProperties2KHR (VkPhysicalDevice physicalDevice, deUint32* pPropertyCount, VkDisplayPlaneProperties2KHR* pProperties) const
+{
+       return m_vk.getPhysicalDeviceDisplayPlaneProperties2KHR(physicalDevice, pPropertyCount, pProperties);
+}
+
+VkResult InstanceDriver::getDisplayModeProperties2KHR (VkPhysicalDevice physicalDevice, VkDisplayKHR display, deUint32* pPropertyCount, VkDisplayModeProperties2KHR* pProperties) const
+{
+       return m_vk.getDisplayModeProperties2KHR(physicalDevice, display, pPropertyCount, pProperties);
+}
+
+VkResult InstanceDriver::getDisplayPlaneCapabilities2KHR (VkPhysicalDevice physicalDevice, const VkDisplayPlaneInfo2KHR* pDisplayPlaneInfo, VkDisplayPlaneCapabilities2KHR* pCapabilities) const
+{
+       return m_vk.getDisplayPlaneCapabilities2KHR(physicalDevice, pDisplayPlaneInfo, pCapabilities);
+}
+
+VkResult InstanceDriver::getPhysicalDeviceFragmentShadingRatesKHR (VkPhysicalDevice physicalDevice, deUint32* pFragmentShadingRateCount, VkPhysicalDeviceFragmentShadingRateKHR* pFragmentShadingRates) const
+{
+       return m_vk.getPhysicalDeviceFragmentShadingRatesKHR(physicalDevice, pFragmentShadingRateCount, pFragmentShadingRates);
+}
+
+VkResult InstanceDriver::getPhysicalDeviceRefreshableObjectTypesKHR (VkPhysicalDevice physicalDevice, deUint32* pRefreshableObjectCount, VkObjectType* pRefreshableObjectTypes) const
+{
+       return m_vk.getPhysicalDeviceRefreshableObjectTypesKHR(physicalDevice, pRefreshableObjectCount, pRefreshableObjectTypes);
+}
+
+VkResult InstanceDriver::releaseDisplayEXT (VkPhysicalDevice physicalDevice, VkDisplayKHR display) const
+{
+       return m_vk.releaseDisplayEXT(physicalDevice, display);
+}
+
+VkResult InstanceDriver::getPhysicalDeviceSurfaceCapabilities2EXT (VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, VkSurfaceCapabilities2EXT* pSurfaceCapabilities) const
+{
+       return m_vk.getPhysicalDeviceSurfaceCapabilities2EXT(physicalDevice, surface, pSurfaceCapabilities);
+}
+
+void InstanceDriver::getPhysicalDeviceMultisamplePropertiesEXT (VkPhysicalDevice physicalDevice, VkSampleCountFlagBits samples, VkMultisamplePropertiesEXT* pMultisampleProperties) const
+{
+       m_vk.getPhysicalDeviceMultisamplePropertiesEXT(physicalDevice, samples, pMultisampleProperties);
+}
+
+VkResult InstanceDriver::getPhysicalDeviceCalibrateableTimeDomainsEXT (VkPhysicalDevice physicalDevice, deUint32* pTimeDomainCount, VkTimeDomainEXT* pTimeDomains) const
+{
+       return m_vk.getPhysicalDeviceCalibrateableTimeDomainsEXT(physicalDevice, pTimeDomainCount, pTimeDomains);
+}
+
+VkResult InstanceDriver::createHeadlessSurfaceEXT (VkInstance instance, const VkHeadlessSurfaceCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface) const
+{
+       return m_vk.createHeadlessSurfaceEXT(instance, pCreateInfo, pAllocator, pSurface);
+}
diff --git a/external/vulkancts/framework/vulkan/generated/vulkansc/vkInstanceExtensions.inl b/external/vulkancts/framework/vulkan/generated/vulkansc/vkInstanceExtensions.inl
new file mode 100644 (file)
index 0000000..0565e64
--- /dev/null
@@ -0,0 +1,23 @@
+/* WARNING: This is auto-generated file. Do not modify, since changes will
+ * be lost! Modify the generating script instead.
+ */
+static const char* s_allowedInstanceKhrExtensions[] =
+{
+       "VK_KHR_surface",
+       "VK_KHR_display",
+       "VK_KHR_xlib_surface",
+       "VK_KHR_xcb_surface",
+       "VK_KHR_wayland_surface",
+       "VK_KHR_mir_surface",
+       "VK_KHR_android_surface",
+       "VK_KHR_win32_surface",
+       "VK_KHR_get_physical_device_properties2",
+       "VK_KHR_device_group_creation",
+       "VK_KHR_external_memory_capabilities",
+       "VK_KHR_external_semaphore_capabilities",
+       "VK_KHR_external_fence_capabilities",
+       "VK_KHR_get_surface_capabilities2",
+       "VK_KHR_get_display_properties2",
+       "VK_KHR_surface_protected_capabilities",
+};
+
diff --git a/external/vulkancts/framework/vulkan/generated/vulkansc/vkInstanceFunctionPointers.inl b/external/vulkancts/framework/vulkan/generated/vulkansc/vkInstanceFunctionPointers.inl
new file mode 100644 (file)
index 0000000..90dfdff
--- /dev/null
@@ -0,0 +1,52 @@
+/* WARNING: This is auto-generated file. Do not modify, since changes will
+ * be lost! Modify the generating script instead.
+ */
+DestroyInstanceFunc                                                                    destroyInstance;
+EnumeratePhysicalDevicesFunc                                           enumeratePhysicalDevices;
+GetPhysicalDeviceFeaturesFunc                                          getPhysicalDeviceFeatures;
+GetPhysicalDeviceFormatPropertiesFunc                          getPhysicalDeviceFormatProperties;
+GetPhysicalDeviceImageFormatPropertiesFunc                     getPhysicalDeviceImageFormatProperties;
+GetPhysicalDevicePropertiesFunc                                                getPhysicalDeviceProperties;
+GetPhysicalDeviceQueueFamilyPropertiesFunc                     getPhysicalDeviceQueueFamilyProperties;
+GetPhysicalDeviceMemoryPropertiesFunc                          getPhysicalDeviceMemoryProperties;
+CreateDeviceFunc                                                                       createDevice;
+EnumerateDeviceExtensionPropertiesFunc                         enumerateDeviceExtensionProperties;
+EnumerateDeviceLayerPropertiesFunc                                     enumerateDeviceLayerProperties;
+GetPhysicalDeviceSparseImageFormatPropertiesFunc       getPhysicalDeviceSparseImageFormatProperties;
+EnumeratePhysicalDeviceGroupsFunc                                      enumeratePhysicalDeviceGroups;
+GetPhysicalDeviceFeatures2Func                                         getPhysicalDeviceFeatures2;
+GetPhysicalDeviceProperties2Func                                       getPhysicalDeviceProperties2;
+GetPhysicalDeviceFormatProperties2Func                         getPhysicalDeviceFormatProperties2;
+GetPhysicalDeviceImageFormatProperties2Func                    getPhysicalDeviceImageFormatProperties2;
+GetPhysicalDeviceQueueFamilyProperties2Func                    getPhysicalDeviceQueueFamilyProperties2;
+GetPhysicalDeviceMemoryProperties2Func                         getPhysicalDeviceMemoryProperties2;
+GetPhysicalDeviceSparseImageFormatProperties2Func      getPhysicalDeviceSparseImageFormatProperties2;
+GetPhysicalDeviceExternalBufferPropertiesFunc          getPhysicalDeviceExternalBufferProperties;
+GetPhysicalDeviceExternalFencePropertiesFunc           getPhysicalDeviceExternalFenceProperties;
+GetPhysicalDeviceExternalSemaphorePropertiesFunc       getPhysicalDeviceExternalSemaphoreProperties;
+DestroySurfaceKHRFunc                                                          destroySurfaceKHR;
+GetPhysicalDeviceSurfaceSupportKHRFunc                         getPhysicalDeviceSurfaceSupportKHR;
+GetPhysicalDeviceSurfaceCapabilitiesKHRFunc                    getPhysicalDeviceSurfaceCapabilitiesKHR;
+GetPhysicalDeviceSurfaceFormatsKHRFunc                         getPhysicalDeviceSurfaceFormatsKHR;
+GetPhysicalDeviceSurfacePresentModesKHRFunc                    getPhysicalDeviceSurfacePresentModesKHR;
+GetPhysicalDevicePresentRectanglesKHRFunc                      getPhysicalDevicePresentRectanglesKHR;
+GetPhysicalDeviceDisplayPropertiesKHRFunc                      getPhysicalDeviceDisplayPropertiesKHR;
+GetPhysicalDeviceDisplayPlanePropertiesKHRFunc         getPhysicalDeviceDisplayPlanePropertiesKHR;
+GetDisplayPlaneSupportedDisplaysKHRFunc                                getDisplayPlaneSupportedDisplaysKHR;
+GetDisplayModePropertiesKHRFunc                                                getDisplayModePropertiesKHR;
+CreateDisplayModeKHRFunc                                                       createDisplayModeKHR;
+GetDisplayPlaneCapabilitiesKHRFunc                                     getDisplayPlaneCapabilitiesKHR;
+CreateDisplayPlaneSurfaceKHRFunc                                       createDisplayPlaneSurfaceKHR;
+GetPhysicalDeviceSurfaceCapabilities2KHRFunc           getPhysicalDeviceSurfaceCapabilities2KHR;
+GetPhysicalDeviceSurfaceFormats2KHRFunc                                getPhysicalDeviceSurfaceFormats2KHR;
+GetPhysicalDeviceDisplayProperties2KHRFunc                     getPhysicalDeviceDisplayProperties2KHR;
+GetPhysicalDeviceDisplayPlaneProperties2KHRFunc                getPhysicalDeviceDisplayPlaneProperties2KHR;
+GetDisplayModeProperties2KHRFunc                                       getDisplayModeProperties2KHR;
+GetDisplayPlaneCapabilities2KHRFunc                                    getDisplayPlaneCapabilities2KHR;
+GetPhysicalDeviceFragmentShadingRatesKHRFunc           getPhysicalDeviceFragmentShadingRatesKHR;
+GetPhysicalDeviceRefreshableObjectTypesKHRFunc         getPhysicalDeviceRefreshableObjectTypesKHR;
+ReleaseDisplayEXTFunc                                                          releaseDisplayEXT;
+GetPhysicalDeviceSurfaceCapabilities2EXTFunc           getPhysicalDeviceSurfaceCapabilities2EXT;
+GetPhysicalDeviceMultisamplePropertiesEXTFunc          getPhysicalDeviceMultisamplePropertiesEXT;
+GetPhysicalDeviceCalibrateableTimeDomainsEXTFunc       getPhysicalDeviceCalibrateableTimeDomainsEXT;
+CreateHeadlessSurfaceEXTFunc                                           createHeadlessSurfaceEXT;
diff --git a/external/vulkancts/framework/vulkan/generated/vulkansc/vkKnownDriverIds.inl b/external/vulkancts/framework/vulkan/generated/vulkansc/vkKnownDriverIds.inl
new file mode 100644 (file)
index 0000000..1d8f24d
--- /dev/null
@@ -0,0 +1,25 @@
+/* WARNING: This is auto-generated file. Do not modify, since changes will
+ * be lost! Modify the generating script instead.
+ */
+static const struct
+{
+       std::string driver;
+       deUint32 id;
+} driverIds [] =
+{
+       {"VK_DRIVER_ID_AMD_PROPRIETARY", 1},
+       {"VK_DRIVER_ID_AMD_OPEN_SOURCE", 2},
+       {"VK_DRIVER_ID_MESA_RADV", 3},
+       {"VK_DRIVER_ID_NVIDIA_PROPRIETARY", 4},
+       {"VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS", 5},
+       {"VK_DRIVER_ID_INTEL_OPEN_SOURCE_MESA", 6},
+       {"VK_DRIVER_ID_IMAGINATION_PROPRIETARY", 7},
+       {"VK_DRIVER_ID_QUALCOMM_PROPRIETARY", 8},
+       {"VK_DRIVER_ID_ARM_PROPRIETARY", 9},
+       {"VK_DRIVER_ID_GOOGLE_SWIFTSHADER", 10},
+       {"VK_DRIVER_ID_GGP_PROPRIETARY", 11},
+       {"VK_DRIVER_ID_BROADCOM_PROPRIETARY", 12},
+       {"VK_DRIVER_ID_MESA_LLVMPIPE", 13},
+       {"VK_DRIVER_ID_MOLTENVK", 14},
+       {"VK_DRIVER_ID_MAX_ENUM", 0x7FFFFFFF}
+};
diff --git a/external/vulkancts/framework/vulkan/generated/vulkansc/vkMandatoryFeatures.inl b/external/vulkancts/framework/vulkan/generated/vulkansc/vkMandatoryFeatures.inl
new file mode 100644 (file)
index 0000000..82de3d3
--- /dev/null
@@ -0,0 +1,1000 @@
+/* WARNING: This is auto-generated file. Do not modify, since changes will
+ * be lost! Modify the generating script instead.
+ */
+bool checkMandatoryFeatures(const vkt::Context& context)
+{
+       if (!context.isInstanceFunctionalitySupported("VK_KHR_get_physical_device_properties2"))
+               TCU_THROW(NotSupportedError, "Extension VK_KHR_get_physical_device_properties2 is not present");
+
+       VkPhysicalDevice                                        physicalDevice          = context.getPhysicalDevice();
+       const InstanceInterface&                        vki                                     = context.getInstanceInterface();
+       const vector<VkExtensionProperties>     deviceExtensions        = enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL);
+
+       tcu::TestLog& log = context.getTestContext().getLog();
+       vk::VkPhysicalDeviceFeatures2 coreFeatures;
+       deMemset(&coreFeatures, 0, sizeof(coreFeatures));
+       coreFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
+       void** nextPtr = &coreFeatures.pNext;
+
+       vk::VkPhysicalDevice16BitStorageFeatures physicalDevice16BitStorageFeatures;
+       deMemset(&physicalDevice16BitStorageFeatures, 0, sizeof(physicalDevice16BitStorageFeatures));
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_16bit_storage")) )
+       {
+               physicalDevice16BitStorageFeatures.sType = getStructureType<VkPhysicalDevice16BitStorageFeatures>();
+               *nextPtr = &physicalDevice16BitStorageFeatures;
+               nextPtr  = &physicalDevice16BitStorageFeatures.pNext;
+       }
+
+       vk::VkPhysicalDevice8BitStorageFeatures physicalDevice8BitStorageFeatures;
+       deMemset(&physicalDevice8BitStorageFeatures, 0, sizeof(physicalDevice8BitStorageFeatures));
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_8bit_storage")) )
+       {
+               physicalDevice8BitStorageFeatures.sType = getStructureType<VkPhysicalDevice8BitStorageFeatures>();
+               *nextPtr = &physicalDevice8BitStorageFeatures;
+               nextPtr  = &physicalDevice8BitStorageFeatures.pNext;
+       }
+
+       vk::VkPhysicalDeviceBufferDeviceAddressFeatures physicalDeviceBufferDeviceAddressFeatures;
+       deMemset(&physicalDeviceBufferDeviceAddressFeatures, 0, sizeof(physicalDeviceBufferDeviceAddressFeatures));
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_buffer_device_address")) )
+       {
+               physicalDeviceBufferDeviceAddressFeatures.sType = getStructureType<VkPhysicalDeviceBufferDeviceAddressFeatures>();
+               *nextPtr = &physicalDeviceBufferDeviceAddressFeatures;
+               nextPtr  = &physicalDeviceBufferDeviceAddressFeatures.pNext;
+       }
+
+       vk::VkPhysicalDeviceDepthClipEnableFeaturesEXT physicalDeviceDepthClipEnableFeaturesEXT;
+       deMemset(&physicalDeviceDepthClipEnableFeaturesEXT, 0, sizeof(physicalDeviceDepthClipEnableFeaturesEXT));
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_depth_clip_enable")) )
+       {
+               physicalDeviceDepthClipEnableFeaturesEXT.sType = getStructureType<VkPhysicalDeviceDepthClipEnableFeaturesEXT>();
+               *nextPtr = &physicalDeviceDepthClipEnableFeaturesEXT;
+               nextPtr  = &physicalDeviceDepthClipEnableFeaturesEXT.pNext;
+       }
+
+       vk::VkPhysicalDeviceDescriptorIndexingFeatures physicalDeviceDescriptorIndexingFeatures;
+       deMemset(&physicalDeviceDescriptorIndexingFeatures, 0, sizeof(physicalDeviceDescriptorIndexingFeatures));
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
+       {
+               physicalDeviceDescriptorIndexingFeatures.sType = getStructureType<VkPhysicalDeviceDescriptorIndexingFeatures>();
+               *nextPtr = &physicalDeviceDescriptorIndexingFeatures;
+               nextPtr  = &physicalDeviceDescriptorIndexingFeatures.pNext;
+       }
+
+       vk::VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT physicalDeviceFragmentShaderInterlockFeaturesEXT;
+       deMemset(&physicalDeviceFragmentShaderInterlockFeaturesEXT, 0, sizeof(physicalDeviceFragmentShaderInterlockFeaturesEXT));
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_fragment_shader_interlock")) )
+       {
+               physicalDeviceFragmentShaderInterlockFeaturesEXT.sType = getStructureType<VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT>();
+               *nextPtr = &physicalDeviceFragmentShaderInterlockFeaturesEXT;
+               nextPtr  = &physicalDeviceFragmentShaderInterlockFeaturesEXT.pNext;
+       }
+
+       vk::VkPhysicalDeviceHostQueryResetFeatures physicalDeviceHostQueryResetFeatures;
+       deMemset(&physicalDeviceHostQueryResetFeatures, 0, sizeof(physicalDeviceHostQueryResetFeatures));
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_host_query_reset")) )
+       {
+               physicalDeviceHostQueryResetFeatures.sType = getStructureType<VkPhysicalDeviceHostQueryResetFeatures>();
+               *nextPtr = &physicalDeviceHostQueryResetFeatures;
+               nextPtr  = &physicalDeviceHostQueryResetFeatures.pNext;
+       }
+
+       vk::VkPhysicalDeviceImagelessFramebufferFeatures physicalDeviceImagelessFramebufferFeatures;
+       deMemset(&physicalDeviceImagelessFramebufferFeatures, 0, sizeof(physicalDeviceImagelessFramebufferFeatures));
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_imageless_framebuffer")) )
+       {
+               physicalDeviceImagelessFramebufferFeatures.sType = getStructureType<VkPhysicalDeviceImagelessFramebufferFeatures>();
+               *nextPtr = &physicalDeviceImagelessFramebufferFeatures;
+               nextPtr  = &physicalDeviceImagelessFramebufferFeatures.pNext;
+       }
+
+       vk::VkPhysicalDeviceIndexTypeUint8FeaturesEXT physicalDeviceIndexTypeUint8FeaturesEXT;
+       deMemset(&physicalDeviceIndexTypeUint8FeaturesEXT, 0, sizeof(physicalDeviceIndexTypeUint8FeaturesEXT));
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_index_type_uint8")) )
+       {
+               physicalDeviceIndexTypeUint8FeaturesEXT.sType = getStructureType<VkPhysicalDeviceIndexTypeUint8FeaturesEXT>();
+               *nextPtr = &physicalDeviceIndexTypeUint8FeaturesEXT;
+               nextPtr  = &physicalDeviceIndexTypeUint8FeaturesEXT.pNext;
+       }
+
+       vk::VkPhysicalDeviceLineRasterizationFeaturesEXT physicalDeviceLineRasterizationFeaturesEXT;
+       deMemset(&physicalDeviceLineRasterizationFeaturesEXT, 0, sizeof(physicalDeviceLineRasterizationFeaturesEXT));
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_line_rasterization")) )
+       {
+               physicalDeviceLineRasterizationFeaturesEXT.sType = getStructureType<VkPhysicalDeviceLineRasterizationFeaturesEXT>();
+               *nextPtr = &physicalDeviceLineRasterizationFeaturesEXT;
+               nextPtr  = &physicalDeviceLineRasterizationFeaturesEXT.pNext;
+       }
+
+       vk::VkPhysicalDeviceMultiviewFeatures physicalDeviceMultiviewFeatures;
+       deMemset(&physicalDeviceMultiviewFeatures, 0, sizeof(physicalDeviceMultiviewFeatures));
+
+       if ( context.contextSupports(vk::ApiVersion(1, 1, 0)) || isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_multiview")) )
+       {
+               physicalDeviceMultiviewFeatures.sType = getStructureType<VkPhysicalDeviceMultiviewFeatures>();
+               *nextPtr = &physicalDeviceMultiviewFeatures;
+               nextPtr  = &physicalDeviceMultiviewFeatures.pNext;
+       }
+
+       vk::VkPhysicalDeviceSamplerYcbcrConversionFeatures physicalDeviceSamplerYcbcrConversionFeatures;
+       deMemset(&physicalDeviceSamplerYcbcrConversionFeatures, 0, sizeof(physicalDeviceSamplerYcbcrConversionFeatures));
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_sampler_ycbcr_conversion")) )
+       {
+               physicalDeviceSamplerYcbcrConversionFeatures.sType = getStructureType<VkPhysicalDeviceSamplerYcbcrConversionFeatures>();
+               *nextPtr = &physicalDeviceSamplerYcbcrConversionFeatures;
+               nextPtr  = &physicalDeviceSamplerYcbcrConversionFeatures.pNext;
+       }
+
+       vk::VkPhysicalDeviceScalarBlockLayoutFeatures physicalDeviceScalarBlockLayoutFeatures;
+       deMemset(&physicalDeviceScalarBlockLayoutFeatures, 0, sizeof(physicalDeviceScalarBlockLayoutFeatures));
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_scalar_block_layout")) )
+       {
+               physicalDeviceScalarBlockLayoutFeatures.sType = getStructureType<VkPhysicalDeviceScalarBlockLayoutFeatures>();
+               *nextPtr = &physicalDeviceScalarBlockLayoutFeatures;
+               nextPtr  = &physicalDeviceScalarBlockLayoutFeatures.pNext;
+       }
+
+       vk::VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures physicalDeviceSeparateDepthStencilLayoutsFeatures;
+       deMemset(&physicalDeviceSeparateDepthStencilLayoutsFeatures, 0, sizeof(physicalDeviceSeparateDepthStencilLayoutsFeatures));
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_separate_depth_stencil_layouts")) )
+       {
+               physicalDeviceSeparateDepthStencilLayoutsFeatures.sType = getStructureType<VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures>();
+               *nextPtr = &physicalDeviceSeparateDepthStencilLayoutsFeatures;
+               nextPtr  = &physicalDeviceSeparateDepthStencilLayoutsFeatures.pNext;
+       }
+
+       vk::VkPhysicalDeviceShaderAtomicInt64Features physicalDeviceShaderAtomicInt64Features;
+       deMemset(&physicalDeviceShaderAtomicInt64Features, 0, sizeof(physicalDeviceShaderAtomicInt64Features));
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_shader_atomic_int64")) )
+       {
+               physicalDeviceShaderAtomicInt64Features.sType = getStructureType<VkPhysicalDeviceShaderAtomicInt64Features>();
+               *nextPtr = &physicalDeviceShaderAtomicInt64Features;
+               nextPtr  = &physicalDeviceShaderAtomicInt64Features.pNext;
+       }
+
+       vk::VkPhysicalDeviceShaderClockFeaturesKHR physicalDeviceShaderClockFeaturesKHR;
+       deMemset(&physicalDeviceShaderClockFeaturesKHR, 0, sizeof(physicalDeviceShaderClockFeaturesKHR));
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_shader_clock")) )
+       {
+               physicalDeviceShaderClockFeaturesKHR.sType = getStructureType<VkPhysicalDeviceShaderClockFeaturesKHR>();
+               *nextPtr = &physicalDeviceShaderClockFeaturesKHR;
+               nextPtr  = &physicalDeviceShaderClockFeaturesKHR.pNext;
+       }
+
+       vk::VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT physicalDeviceShaderDemoteToHelperInvocationFeaturesEXT;
+       deMemset(&physicalDeviceShaderDemoteToHelperInvocationFeaturesEXT, 0, sizeof(physicalDeviceShaderDemoteToHelperInvocationFeaturesEXT));
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_shader_demote_to_helper_invocation")) )
+       {
+               physicalDeviceShaderDemoteToHelperInvocationFeaturesEXT.sType = getStructureType<VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT>();
+               *nextPtr = &physicalDeviceShaderDemoteToHelperInvocationFeaturesEXT;
+               nextPtr  = &physicalDeviceShaderDemoteToHelperInvocationFeaturesEXT.pNext;
+       }
+
+       vk::VkPhysicalDeviceShaderFloat16Int8Features physicalDeviceShaderFloat16Int8Features;
+       deMemset(&physicalDeviceShaderFloat16Int8Features, 0, sizeof(physicalDeviceShaderFloat16Int8Features));
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_shader_float16_int8")) )
+       {
+               physicalDeviceShaderFloat16Int8Features.sType = getStructureType<VkPhysicalDeviceShaderFloat16Int8Features>();
+               *nextPtr = &physicalDeviceShaderFloat16Int8Features;
+               nextPtr  = &physicalDeviceShaderFloat16Int8Features.pNext;
+       }
+
+       vk::VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT physicalDeviceShaderImageAtomicInt64FeaturesEXT;
+       deMemset(&physicalDeviceShaderImageAtomicInt64FeaturesEXT, 0, sizeof(physicalDeviceShaderImageAtomicInt64FeaturesEXT));
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_shader_image_atomic_int64")) )
+       {
+               physicalDeviceShaderImageAtomicInt64FeaturesEXT.sType = getStructureType<VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT>();
+               *nextPtr = &physicalDeviceShaderImageAtomicInt64FeaturesEXT;
+               nextPtr  = &physicalDeviceShaderImageAtomicInt64FeaturesEXT.pNext;
+       }
+
+       vk::VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures physicalDeviceShaderSubgroupExtendedTypesFeatures;
+       deMemset(&physicalDeviceShaderSubgroupExtendedTypesFeatures, 0, sizeof(physicalDeviceShaderSubgroupExtendedTypesFeatures));
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_shader_subgroup_extended_types")) )
+       {
+               physicalDeviceShaderSubgroupExtendedTypesFeatures.sType = getStructureType<VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures>();
+               *nextPtr = &physicalDeviceShaderSubgroupExtendedTypesFeatures;
+               nextPtr  = &physicalDeviceShaderSubgroupExtendedTypesFeatures.pNext;
+       }
+
+       vk::VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR physicalDeviceShaderTerminateInvocationFeaturesKHR;
+       deMemset(&physicalDeviceShaderTerminateInvocationFeaturesKHR, 0, sizeof(physicalDeviceShaderTerminateInvocationFeaturesKHR));
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_shader_terminate_invocation")) )
+       {
+               physicalDeviceShaderTerminateInvocationFeaturesKHR.sType = getStructureType<VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR>();
+               *nextPtr = &physicalDeviceShaderTerminateInvocationFeaturesKHR;
+               nextPtr  = &physicalDeviceShaderTerminateInvocationFeaturesKHR.pNext;
+       }
+
+       vk::VkPhysicalDeviceSubgroupSizeControlFeaturesEXT physicalDeviceSubgroupSizeControlFeaturesEXT;
+       deMemset(&physicalDeviceSubgroupSizeControlFeaturesEXT, 0, sizeof(physicalDeviceSubgroupSizeControlFeaturesEXT));
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_subgroup_size_control")) )
+       {
+               physicalDeviceSubgroupSizeControlFeaturesEXT.sType = getStructureType<VkPhysicalDeviceSubgroupSizeControlFeaturesEXT>();
+               *nextPtr = &physicalDeviceSubgroupSizeControlFeaturesEXT;
+               nextPtr  = &physicalDeviceSubgroupSizeControlFeaturesEXT.pNext;
+       }
+
+       vk::VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT physicalDeviceTexelBufferAlignmentFeaturesEXT;
+       deMemset(&physicalDeviceTexelBufferAlignmentFeaturesEXT, 0, sizeof(physicalDeviceTexelBufferAlignmentFeaturesEXT));
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_texel_buffer_alignment")) )
+       {
+               physicalDeviceTexelBufferAlignmentFeaturesEXT.sType = getStructureType<VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT>();
+               *nextPtr = &physicalDeviceTexelBufferAlignmentFeaturesEXT;
+               nextPtr  = &physicalDeviceTexelBufferAlignmentFeaturesEXT.pNext;
+       }
+
+       vk::VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT physicalDeviceTextureCompressionASTCHDRFeaturesEXT;
+       deMemset(&physicalDeviceTextureCompressionASTCHDRFeaturesEXT, 0, sizeof(physicalDeviceTextureCompressionASTCHDRFeaturesEXT));
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_texture_compression_astc_hdr")) )
+       {
+               physicalDeviceTextureCompressionASTCHDRFeaturesEXT.sType = getStructureType<VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT>();
+               *nextPtr = &physicalDeviceTextureCompressionASTCHDRFeaturesEXT;
+               nextPtr  = &physicalDeviceTextureCompressionASTCHDRFeaturesEXT.pNext;
+       }
+
+       vk::VkPhysicalDeviceTimelineSemaphoreFeatures physicalDeviceTimelineSemaphoreFeatures;
+       deMemset(&physicalDeviceTimelineSemaphoreFeatures, 0, sizeof(physicalDeviceTimelineSemaphoreFeatures));
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_timeline_semaphore")) )
+       {
+               physicalDeviceTimelineSemaphoreFeatures.sType = getStructureType<VkPhysicalDeviceTimelineSemaphoreFeatures>();
+               *nextPtr = &physicalDeviceTimelineSemaphoreFeatures;
+               nextPtr  = &physicalDeviceTimelineSemaphoreFeatures.pNext;
+       }
+
+       vk::VkPhysicalDeviceUniformBufferStandardLayoutFeatures physicalDeviceUniformBufferStandardLayoutFeatures;
+       deMemset(&physicalDeviceUniformBufferStandardLayoutFeatures, 0, sizeof(physicalDeviceUniformBufferStandardLayoutFeatures));
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_uniform_buffer_standard_layout")) )
+       {
+               physicalDeviceUniformBufferStandardLayoutFeatures.sType = getStructureType<VkPhysicalDeviceUniformBufferStandardLayoutFeatures>();
+               *nextPtr = &physicalDeviceUniformBufferStandardLayoutFeatures;
+               nextPtr  = &physicalDeviceUniformBufferStandardLayoutFeatures.pNext;
+       }
+
+       vk::VkPhysicalDeviceVariablePointersFeatures physicalDeviceVariablePointersFeatures;
+       deMemset(&physicalDeviceVariablePointersFeatures, 0, sizeof(physicalDeviceVariablePointersFeatures));
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_variable_pointers")) )
+       {
+               physicalDeviceVariablePointersFeatures.sType = getStructureType<VkPhysicalDeviceVariablePointersFeatures>();
+               *nextPtr = &physicalDeviceVariablePointersFeatures;
+               nextPtr  = &physicalDeviceVariablePointersFeatures.pNext;
+       }
+
+       vk::VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT physicalDeviceVertexAttributeDivisorFeaturesEXT;
+       deMemset(&physicalDeviceVertexAttributeDivisorFeaturesEXT, 0, sizeof(physicalDeviceVertexAttributeDivisorFeaturesEXT));
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_vertex_attribute_divisor")) )
+       {
+               physicalDeviceVertexAttributeDivisorFeaturesEXT.sType = getStructureType<VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT>();
+               *nextPtr = &physicalDeviceVertexAttributeDivisorFeaturesEXT;
+               nextPtr  = &physicalDeviceVertexAttributeDivisorFeaturesEXT.pNext;
+       }
+
+       vk::VkPhysicalDeviceVulkan11Features physicalDeviceVulkan11Features;
+       deMemset(&physicalDeviceVulkan11Features, 0, sizeof(physicalDeviceVulkan11Features));
+
+       if ( context.contextSupports(vk::ApiVersion(1, 2, 0)) )
+       {
+               physicalDeviceVulkan11Features.sType = getStructureType<VkPhysicalDeviceVulkan11Features>();
+               *nextPtr = &physicalDeviceVulkan11Features;
+               nextPtr  = &physicalDeviceVulkan11Features.pNext;
+       }
+
+       vk::VkPhysicalDeviceVulkan12Features physicalDeviceVulkan12Features;
+       deMemset(&physicalDeviceVulkan12Features, 0, sizeof(physicalDeviceVulkan12Features));
+
+       if ( context.contextSupports(vk::ApiVersion(1, 2, 0)) )
+       {
+               physicalDeviceVulkan12Features.sType = getStructureType<VkPhysicalDeviceVulkan12Features>();
+               *nextPtr = &physicalDeviceVulkan12Features;
+               nextPtr  = &physicalDeviceVulkan12Features.pNext;
+       }
+
+       vk::VkPhysicalDeviceVulkanMemoryModelFeatures physicalDeviceVulkanMemoryModelFeatures;
+       deMemset(&physicalDeviceVulkanMemoryModelFeatures, 0, sizeof(physicalDeviceVulkanMemoryModelFeatures));
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_vulkan_memory_model")) )
+       {
+               physicalDeviceVulkanMemoryModelFeatures.sType = getStructureType<VkPhysicalDeviceVulkanMemoryModelFeatures>();
+               *nextPtr = &physicalDeviceVulkanMemoryModelFeatures;
+               nextPtr  = &physicalDeviceVulkanMemoryModelFeatures.pNext;
+       }
+
+       vk::VkPhysicalDeviceYcbcrImageArraysFeaturesEXT physicalDeviceYcbcrImageArraysFeaturesEXT;
+       deMemset(&physicalDeviceYcbcrImageArraysFeaturesEXT, 0, sizeof(physicalDeviceYcbcrImageArraysFeaturesEXT));
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_ycbcr_image_arrays")) )
+       {
+               physicalDeviceYcbcrImageArraysFeaturesEXT.sType = getStructureType<VkPhysicalDeviceYcbcrImageArraysFeaturesEXT>();
+               *nextPtr = &physicalDeviceYcbcrImageArraysFeaturesEXT;
+               nextPtr  = &physicalDeviceYcbcrImageArraysFeaturesEXT.pNext;
+       }
+
+       context.getInstanceInterface().getPhysicalDeviceFeatures2(context.getPhysicalDevice(), &coreFeatures);
+       bool result = true;
+
+       {
+               if ( coreFeatures.features.robustBufferAccess == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature robustBufferAccess not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
+       {
+               if ( coreFeatures.features.shaderSampledImageArrayDynamicIndexing == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature shaderSampledImageArrayDynamicIndexing not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
+       {
+               if ( coreFeatures.features.shaderStorageBufferArrayDynamicIndexing == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature shaderStorageBufferArrayDynamicIndexing not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_8bit_storage")) )
+       {
+               if ( physicalDevice8BitStorageFeatures.storageBuffer8BitAccess == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature storageBuffer8BitAccess not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( context.contextSupports(vk::ApiVersion(1, 2, 0)) )
+       {
+               if ( physicalDeviceVulkan11Features.multiview == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature multiview not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( context.contextSupports(vk::ApiVersion(1, 1, 0)) )
+       {
+               if ( physicalDeviceMultiviewFeatures.multiview == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature multiview not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_multiview")) )
+       {
+               if ( physicalDeviceMultiviewFeatures.multiview == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature multiview not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_variable_pointers")) )
+       {
+               if ( physicalDeviceVariablePointersFeatures.variablePointersStorageBuffer == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature variablePointersStorageBuffer not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
+       {
+               if ( physicalDeviceDescriptorIndexingFeatures.shaderUniformTexelBufferArrayDynamicIndexing == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature shaderUniformTexelBufferArrayDynamicIndexing not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
+       {
+               if ( physicalDeviceDescriptorIndexingFeatures.shaderStorageTexelBufferArrayDynamicIndexing == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature shaderStorageTexelBufferArrayDynamicIndexing not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
+       {
+               if ( physicalDeviceDescriptorIndexingFeatures.shaderSampledImageArrayNonUniformIndexing == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature shaderSampledImageArrayNonUniformIndexing not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
+       {
+               if ( physicalDeviceDescriptorIndexingFeatures.shaderStorageBufferArrayNonUniformIndexing == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature shaderStorageBufferArrayNonUniformIndexing not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
+       {
+               if ( physicalDeviceDescriptorIndexingFeatures.shaderUniformTexelBufferArrayNonUniformIndexing == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature shaderUniformTexelBufferArrayNonUniformIndexing not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
+       {
+               if ( physicalDeviceDescriptorIndexingFeatures.descriptorBindingSampledImageUpdateAfterBind == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature descriptorBindingSampledImageUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
+       {
+               if ( physicalDeviceDescriptorIndexingFeatures.descriptorBindingStorageImageUpdateAfterBind == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature descriptorBindingStorageImageUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
+       {
+               if ( physicalDeviceDescriptorIndexingFeatures.descriptorBindingStorageBufferUpdateAfterBind == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature descriptorBindingStorageBufferUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
+       {
+               if ( physicalDeviceDescriptorIndexingFeatures.descriptorBindingUniformTexelBufferUpdateAfterBind == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature descriptorBindingUniformTexelBufferUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
+       {
+               if ( physicalDeviceDescriptorIndexingFeatures.descriptorBindingStorageTexelBufferUpdateAfterBind == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature descriptorBindingStorageTexelBufferUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
+       {
+               if ( physicalDeviceDescriptorIndexingFeatures.descriptorBindingUpdateUnusedWhilePending == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature descriptorBindingUpdateUnusedWhilePending not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
+       {
+               if ( physicalDeviceDescriptorIndexingFeatures.descriptorBindingPartiallyBound == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature descriptorBindingPartiallyBound not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_descriptor_indexing")) )
+       {
+               if ( physicalDeviceDescriptorIndexingFeatures.runtimeDescriptorArray == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature runtimeDescriptorArray not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_scalar_block_layout")) )
+       {
+               if ( physicalDeviceScalarBlockLayoutFeatures.scalarBlockLayout == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature scalarBlockLayout not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_uniform_buffer_standard_layout")) )
+       {
+               if ( physicalDeviceUniformBufferStandardLayoutFeatures.uniformBufferStandardLayout == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature uniformBufferStandardLayout not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_subgroup_size_control")) )
+       {
+               if ( physicalDeviceSubgroupSizeControlFeaturesEXT.subgroupSizeControl == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature subgroupSizeControl not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_subgroup_size_control")) )
+       {
+               if ( physicalDeviceSubgroupSizeControlFeaturesEXT.computeFullSubgroups == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature computeFullSubgroups not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( context.contextSupports(vk::ApiVersion(1, 2, 0)) )
+       {
+               if ( physicalDeviceVulkan12Features.subgroupBroadcastDynamicId == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature subgroupBroadcastDynamicId not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_shader_subgroup_extended_types")) )
+       {
+               if ( physicalDeviceShaderSubgroupExtendedTypesFeatures.shaderSubgroupExtendedTypes == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature shaderSubgroupExtendedTypes not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( context.contextSupports(vk::ApiVersion(1, 2, 0)) )
+       {
+               if ( physicalDeviceVulkan12Features.shaderSubgroupExtendedTypes == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature shaderSubgroupExtendedTypes not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_imageless_framebuffer")) )
+       {
+               if ( physicalDeviceImagelessFramebufferFeatures.imagelessFramebuffer == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature imagelessFramebuffer not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( context.contextSupports(vk::ApiVersion(1, 2, 0)) )
+       {
+               if ( physicalDeviceVulkan12Features.imagelessFramebuffer == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature imagelessFramebuffer not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( context.contextSupports(vk::ApiVersion(1, 2, 0)) )
+       {
+               if ( physicalDeviceVulkan12Features.uniformBufferStandardLayout == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature uniformBufferStandardLayout not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_separate_depth_stencil_layouts")) )
+       {
+               if ( physicalDeviceSeparateDepthStencilLayoutsFeatures.separateDepthStencilLayouts == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature separateDepthStencilLayouts not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( context.contextSupports(vk::ApiVersion(1, 2, 0)) )
+       {
+               if ( physicalDeviceVulkan12Features.separateDepthStencilLayouts == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature separateDepthStencilLayouts not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_host_query_reset")) )
+       {
+               if ( physicalDeviceHostQueryResetFeatures.hostQueryReset == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature hostQueryReset not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( context.contextSupports(vk::ApiVersion(1, 2, 0)) )
+       {
+               if ( physicalDeviceVulkan12Features.hostQueryReset == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature hostQueryReset not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_timeline_semaphore")) )
+       {
+               if ( physicalDeviceTimelineSemaphoreFeatures.timelineSemaphore == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature timelineSemaphore not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( context.contextSupports(vk::ApiVersion(1, 2, 0)) )
+       {
+               if ( physicalDeviceVulkan12Features.timelineSemaphore == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature timelineSemaphore not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( context.contextSupports(vk::ApiVersion(1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing )
+       {
+               if ( physicalDeviceVulkan12Features.shaderUniformTexelBufferArrayDynamicIndexing == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature shaderUniformTexelBufferArrayDynamicIndexing not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( context.contextSupports(vk::ApiVersion(1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing )
+       {
+               if ( physicalDeviceVulkan12Features.shaderStorageTexelBufferArrayDynamicIndexing == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature shaderStorageTexelBufferArrayDynamicIndexing not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( context.contextSupports(vk::ApiVersion(1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing )
+       {
+               if ( physicalDeviceVulkan12Features.shaderSampledImageArrayNonUniformIndexing == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature shaderSampledImageArrayNonUniformIndexing not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( context.contextSupports(vk::ApiVersion(1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing )
+       {
+               if ( physicalDeviceVulkan12Features.shaderStorageBufferArrayNonUniformIndexing == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature shaderStorageBufferArrayNonUniformIndexing not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( context.contextSupports(vk::ApiVersion(1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing )
+       {
+               if ( physicalDeviceVulkan12Features.shaderUniformTexelBufferArrayNonUniformIndexing == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature shaderUniformTexelBufferArrayNonUniformIndexing not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( context.contextSupports(vk::ApiVersion(1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing )
+       {
+               if ( physicalDeviceVulkan12Features.descriptorBindingSampledImageUpdateAfterBind == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature descriptorBindingSampledImageUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( context.contextSupports(vk::ApiVersion(1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing )
+       {
+               if ( physicalDeviceVulkan12Features.descriptorBindingStorageImageUpdateAfterBind == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature descriptorBindingStorageImageUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( context.contextSupports(vk::ApiVersion(1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing )
+       {
+               if ( physicalDeviceVulkan12Features.descriptorBindingStorageBufferUpdateAfterBind == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature descriptorBindingStorageBufferUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( context.contextSupports(vk::ApiVersion(1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing )
+       {
+               if ( physicalDeviceVulkan12Features.descriptorBindingUniformTexelBufferUpdateAfterBind == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature descriptorBindingUniformTexelBufferUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( context.contextSupports(vk::ApiVersion(1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing )
+       {
+               if ( physicalDeviceVulkan12Features.descriptorBindingStorageTexelBufferUpdateAfterBind == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature descriptorBindingStorageTexelBufferUpdateAfterBind not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( context.contextSupports(vk::ApiVersion(1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing )
+       {
+               if ( physicalDeviceVulkan12Features.descriptorBindingUpdateUnusedWhilePending == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature descriptorBindingUpdateUnusedWhilePending not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( context.contextSupports(vk::ApiVersion(1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing )
+       {
+               if ( physicalDeviceVulkan12Features.descriptorBindingPartiallyBound == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature descriptorBindingPartiallyBound not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( context.contextSupports(vk::ApiVersion(1, 2, 0)) && physicalDeviceVulkan12Features.descriptorIndexing )
+       {
+               if ( physicalDeviceVulkan12Features.runtimeDescriptorArray == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature runtimeDescriptorArray not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_texture_compression_astc_hdr")) )
+       {
+               if ( physicalDeviceTextureCompressionASTCHDRFeaturesEXT.textureCompressionASTC_HDR == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature textureCompressionASTC_HDR not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_depth_clip_enable")) )
+       {
+               if ( physicalDeviceDepthClipEnableFeaturesEXT.depthClipEnable == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature depthClipEnable not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_ycbcr_image_arrays")) )
+       {
+               if ( physicalDeviceYcbcrImageArraysFeaturesEXT.ycbcrImageArrays == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature ycbcrImageArrays not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_index_type_uint8")) )
+       {
+               if ( physicalDeviceIndexTypeUint8FeaturesEXT.indexTypeUint8 == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature indexTypeUint8 not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_shader_demote_to_helper_invocation")) )
+       {
+               if ( physicalDeviceShaderDemoteToHelperInvocationFeaturesEXT.shaderDemoteToHelperInvocation == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature shaderDemoteToHelperInvocation not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_texel_buffer_alignment")) )
+       {
+               if ( physicalDeviceTexelBufferAlignmentFeaturesEXT.texelBufferAlignment == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature texelBufferAlignment not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_vulkan_memory_model")) )
+       {
+               if ( physicalDeviceVulkanMemoryModelFeatures.vulkanMemoryModel == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature vulkanMemoryModel not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_buffer_device_address")) )
+       {
+               if ( physicalDeviceBufferDeviceAddressFeatures.bufferDeviceAddress == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature bufferDeviceAddress not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_vertex_attribute_divisor")) )
+       {
+               if ( physicalDeviceVertexAttributeDivisorFeaturesEXT.vertexAttributeInstanceRateDivisor == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature vertexAttributeInstanceRateDivisor not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_shader_clock")) )
+       {
+               if ( physicalDeviceShaderClockFeaturesKHR.shaderSubgroupClock == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature shaderSubgroupClock not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_shader_atomic_int64")) )
+       {
+               if ( physicalDeviceShaderAtomicInt64Features.shaderBufferInt64Atomics == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature shaderBufferInt64Atomics not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_16bit_storage")) )
+       {
+               if ( physicalDevice16BitStorageFeatures.storageBuffer16BitAccess == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature storageBuffer16BitAccess not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_shader_float16_int8")) )
+       {
+               if ( ( physicalDeviceShaderFloat16Int8Features.shaderFloat16 == VK_FALSE ) && ( physicalDeviceShaderFloat16Int8Features.shaderInt8 == VK_FALSE ) )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature shaderFloat16 or shaderInt8 not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_fragment_shader_interlock")) )
+       {
+               if ( ( physicalDeviceFragmentShaderInterlockFeaturesEXT.fragmentShaderSampleInterlock == VK_FALSE ) && ( physicalDeviceFragmentShaderInterlockFeaturesEXT.fragmentShaderPixelInterlock == VK_FALSE ) && ( physicalDeviceFragmentShaderInterlockFeaturesEXT.fragmentShaderShadingRateInterlock == VK_FALSE ) )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature fragmentShaderSampleInterlock or fragmentShaderPixelInterlock or fragmentShaderShadingRateInterlock not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_line_rasterization")) )
+       {
+               if ( ( physicalDeviceLineRasterizationFeaturesEXT.rectangularLines == VK_FALSE ) && ( physicalDeviceLineRasterizationFeaturesEXT.bresenhamLines == VK_FALSE ) && ( physicalDeviceLineRasterizationFeaturesEXT.smoothLines == VK_FALSE ) && ( physicalDeviceLineRasterizationFeaturesEXT.stippledRectangularLines == VK_FALSE ) && ( physicalDeviceLineRasterizationFeaturesEXT.stippledBresenhamLines == VK_FALSE ) && ( physicalDeviceLineRasterizationFeaturesEXT.stippledSmoothLines == VK_FALSE ) )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature rectangularLines or bresenhamLines or smoothLines or stippledRectangularLines or stippledBresenhamLines or stippledSmoothLines not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_sampler_ycbcr_conversion")) )
+       {
+               if ( physicalDeviceSamplerYcbcrConversionFeatures.samplerYcbcrConversion == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature samplerYcbcrConversion not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( context.contextSupports(vk::ApiVersion(1, 2, 0)) && isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_draw_indirect_count")) )
+       {
+               if ( physicalDeviceVulkan12Features.drawIndirectCount == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature drawIndirectCount not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( context.contextSupports(vk::ApiVersion(1, 2, 0)) && isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_sampler_mirror_clamp_to_edge")) )
+       {
+               if ( physicalDeviceVulkan12Features.samplerMirrorClampToEdge == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature samplerMirrorClampToEdge not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( context.contextSupports(vk::ApiVersion(1, 2, 0)) && isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_sampler_filter_minmax")) )
+       {
+               if ( physicalDeviceVulkan12Features.samplerFilterMinmax == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature samplerFilterMinmax not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( context.contextSupports(vk::ApiVersion(1, 2, 0)) && isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_shader_viewport_index_layer")) )
+       {
+               if ( physicalDeviceVulkan12Features.shaderOutputViewportIndex == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature shaderOutputViewportIndex not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( context.contextSupports(vk::ApiVersion(1, 2, 0)) && isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_shader_viewport_index_layer")) )
+       {
+               if ( physicalDeviceVulkan12Features.shaderOutputLayer == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature shaderOutputLayer not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_KHR_shader_terminate_invocation")) )
+       {
+               if ( physicalDeviceShaderTerminateInvocationFeaturesKHR.shaderTerminateInvocation == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature shaderTerminateInvocation not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       if ( isExtensionSupported(deviceExtensions, RequiredExtension("VK_EXT_shader_image_atomic_int64")) )
+       {
+               if ( physicalDeviceShaderImageAtomicInt64FeaturesEXT.shaderImageInt64Atomics == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature shaderImageInt64Atomics not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
+       return result;
+}
+
diff --git a/external/vulkancts/framework/vulkan/generated/vulkansc/vkNullDriverImpl.inl b/external/vulkancts/framework/vulkan/generated/vulkansc/vkNullDriverImpl.inl
new file mode 100644 (file)
index 0000000..293454e
--- /dev/null
@@ -0,0 +1,1894 @@
+/* WARNING: This is auto-generated file. Do not modify, since changes will
+ * be lost! Modify the generating script instead.
+ */
+VKAPI_ATTR VkResult VKAPI_CALL createInstance (const VkInstanceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkInstance* pInstance)
+{
+       DE_UNREF(pAllocator);
+       VK_NULL_RETURN((*pInstance = allocateHandle<Instance, VkInstance>(pCreateInfo, pAllocator)));
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL createDevice (VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDevice* pDevice)
+{
+       DE_UNREF(pAllocator);
+       VK_NULL_RETURN((*pDevice = allocateHandle<Device, VkDevice>(physicalDevice, pCreateInfo, pAllocator)));
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL createFence (VkDevice device, const VkFenceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence)
+{
+       DE_UNREF(pAllocator);
+       VK_NULL_RETURN((*pFence = allocateNonDispHandle<Fence, VkFence>(device, pCreateInfo, pAllocator)));
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL createSemaphore (VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSemaphore* pSemaphore)
+{
+       DE_UNREF(pAllocator);
+       VK_NULL_RETURN((*pSemaphore = allocateNonDispHandle<Semaphore, VkSemaphore>(device, pCreateInfo, pAllocator)));
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL createEvent (VkDevice device, const VkEventCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkEvent* pEvent)
+{
+       DE_UNREF(pAllocator);
+       VK_NULL_RETURN((*pEvent = allocateNonDispHandle<Event, VkEvent>(device, pCreateInfo, pAllocator)));
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL createQueryPool (VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkQueryPool* pQueryPool)
+{
+       DE_UNREF(pAllocator);
+       VK_NULL_RETURN((*pQueryPool = allocateNonDispHandle<QueryPool, VkQueryPool>(device, pCreateInfo, pAllocator)));
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL createBuffer (VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBuffer* pBuffer)
+{
+       DE_UNREF(pAllocator);
+       VK_NULL_RETURN((*pBuffer = allocateNonDispHandle<Buffer, VkBuffer>(device, pCreateInfo, pAllocator)));
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL createBufferView (VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBufferView* pView)
+{
+       DE_UNREF(pAllocator);
+       VK_NULL_RETURN((*pView = allocateNonDispHandle<BufferView, VkBufferView>(device, pCreateInfo, pAllocator)));
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL createImage (VkDevice device, const VkImageCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImage* pImage)
+{
+       DE_UNREF(pAllocator);
+       VK_NULL_RETURN((*pImage = allocateNonDispHandle<Image, VkImage>(device, pCreateInfo, pAllocator)));
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL createImageView (VkDevice device, const VkImageViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImageView* pView)
+{
+       DE_UNREF(pAllocator);
+       VK_NULL_RETURN((*pView = allocateNonDispHandle<ImageView, VkImageView>(device, pCreateInfo, pAllocator)));
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL createPipelineCache (VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineCache* pPipelineCache)
+{
+       DE_UNREF(pAllocator);
+       VK_NULL_RETURN((*pPipelineCache = allocateNonDispHandle<PipelineCache, VkPipelineCache>(device, pCreateInfo, pAllocator)));
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL createPipelineLayout (VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineLayout* pPipelineLayout)
+{
+       DE_UNREF(pAllocator);
+       VK_NULL_RETURN((*pPipelineLayout = allocateNonDispHandle<PipelineLayout, VkPipelineLayout>(device, pCreateInfo, pAllocator)));
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL createSampler (VkDevice device, const VkSamplerCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSampler* pSampler)
+{
+       DE_UNREF(pAllocator);
+       VK_NULL_RETURN((*pSampler = allocateNonDispHandle<Sampler, VkSampler>(device, pCreateInfo, pAllocator)));
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL createDescriptorSetLayout (VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorSetLayout* pSetLayout)
+{
+       DE_UNREF(pAllocator);
+       VK_NULL_RETURN((*pSetLayout = allocateNonDispHandle<DescriptorSetLayout, VkDescriptorSetLayout>(device, pCreateInfo, pAllocator)));
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL createDescriptorPool (VkDevice device, const VkDescriptorPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorPool* pDescriptorPool)
+{
+       DE_UNREF(pAllocator);
+       VK_NULL_RETURN((*pDescriptorPool = allocateNonDispHandle<DescriptorPool, VkDescriptorPool>(device, pCreateInfo, pAllocator)));
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL createFramebuffer (VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFramebuffer* pFramebuffer)
+{
+       DE_UNREF(pAllocator);
+       VK_NULL_RETURN((*pFramebuffer = allocateNonDispHandle<Framebuffer, VkFramebuffer>(device, pCreateInfo, pAllocator)));
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL createRenderPass (VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass)
+{
+       DE_UNREF(pAllocator);
+       VK_NULL_RETURN((*pRenderPass = allocateNonDispHandle<RenderPass, VkRenderPass>(device, pCreateInfo, pAllocator)));
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL createCommandPool (VkDevice device, const VkCommandPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkCommandPool* pCommandPool)
+{
+       DE_UNREF(pAllocator);
+       VK_NULL_RETURN((*pCommandPool = allocateNonDispHandle<CommandPool, VkCommandPool>(device, pCreateInfo, pAllocator)));
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL createSamplerYcbcrConversion (VkDevice device, const VkSamplerYcbcrConversionCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSamplerYcbcrConversion* pYcbcrConversion)
+{
+       DE_UNREF(pAllocator);
+       VK_NULL_RETURN((*pYcbcrConversion = allocateNonDispHandle<SamplerYcbcrConversion, VkSamplerYcbcrConversion>(device, pCreateInfo, pAllocator)));
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL createRenderPass2 (VkDevice device, const VkRenderPassCreateInfo2* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass)
+{
+       DE_UNREF(pAllocator);
+       VK_NULL_RETURN((*pRenderPass = allocateNonDispHandle<RenderPass, VkRenderPass>(device, pCreateInfo, pAllocator)));
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL createSwapchainKHR (VkDevice device, const VkSwapchainCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSwapchainKHR* pSwapchain)
+{
+       DE_UNREF(pAllocator);
+       VK_NULL_RETURN((*pSwapchain = allocateNonDispHandle<SwapchainKHR, VkSwapchainKHR>(device, pCreateInfo, pAllocator)));
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL createDisplayPlaneSurfaceKHR (VkInstance instance, const VkDisplaySurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface)
+{
+       DE_UNREF(pAllocator);
+       VK_NULL_RETURN((*pSurface = allocateNonDispHandle<SurfaceKHR, VkSurfaceKHR>(instance, pCreateInfo, pAllocator)));
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL createHeadlessSurfaceEXT (VkInstance instance, const VkHeadlessSurfaceCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface)
+{
+       DE_UNREF(pAllocator);
+       VK_NULL_RETURN((*pSurface = allocateNonDispHandle<SurfaceKHR, VkSurfaceKHR>(instance, pCreateInfo, pAllocator)));
+}
+
+VKAPI_ATTR void VKAPI_CALL destroyInstance (VkInstance instance, const VkAllocationCallbacks* pAllocator)
+{
+       freeHandle<Instance, VkInstance>(instance, pAllocator);
+}
+
+VKAPI_ATTR void VKAPI_CALL destroyDevice (VkDevice device, const VkAllocationCallbacks* pAllocator)
+{
+       freeHandle<Device, VkDevice>(device, pAllocator);
+}
+
+VKAPI_ATTR void VKAPI_CALL destroyFence (VkDevice device, VkFence fence, const VkAllocationCallbacks* pAllocator)
+{
+       DE_UNREF(device);
+       freeNonDispHandle<Fence, VkFence>(fence, pAllocator);
+}
+
+VKAPI_ATTR void VKAPI_CALL destroySemaphore (VkDevice device, VkSemaphore semaphore, const VkAllocationCallbacks* pAllocator)
+{
+       DE_UNREF(device);
+       freeNonDispHandle<Semaphore, VkSemaphore>(semaphore, pAllocator);
+}
+
+VKAPI_ATTR void VKAPI_CALL destroyEvent (VkDevice device, VkEvent event, const VkAllocationCallbacks* pAllocator)
+{
+       DE_UNREF(device);
+       freeNonDispHandle<Event, VkEvent>(event, pAllocator);
+}
+
+VKAPI_ATTR void VKAPI_CALL destroyBuffer (VkDevice device, VkBuffer buffer, const VkAllocationCallbacks* pAllocator)
+{
+       DE_UNREF(device);
+       freeNonDispHandle<Buffer, VkBuffer>(buffer, pAllocator);
+}
+
+VKAPI_ATTR void VKAPI_CALL destroyBufferView (VkDevice device, VkBufferView bufferView, const VkAllocationCallbacks* pAllocator)
+{
+       DE_UNREF(device);
+       freeNonDispHandle<BufferView, VkBufferView>(bufferView, pAllocator);
+}
+
+VKAPI_ATTR void VKAPI_CALL destroyImage (VkDevice device, VkImage image, const VkAllocationCallbacks* pAllocator)
+{
+       DE_UNREF(device);
+       freeNonDispHandle<Image, VkImage>(image, pAllocator);
+}
+
+VKAPI_ATTR void VKAPI_CALL destroyImageView (VkDevice device, VkImageView imageView, const VkAllocationCallbacks* pAllocator)
+{
+       DE_UNREF(device);
+       freeNonDispHandle<ImageView, VkImageView>(imageView, pAllocator);
+}
+
+VKAPI_ATTR void VKAPI_CALL destroyPipelineCache (VkDevice device, VkPipelineCache pipelineCache, const VkAllocationCallbacks* pAllocator)
+{
+       DE_UNREF(device);
+       freeNonDispHandle<PipelineCache, VkPipelineCache>(pipelineCache, pAllocator);
+}
+
+VKAPI_ATTR void VKAPI_CALL destroyPipeline (VkDevice device, VkPipeline pipeline, const VkAllocationCallbacks* pAllocator)
+{
+       DE_UNREF(device);
+       freeNonDispHandle<Pipeline, VkPipeline>(pipeline, pAllocator);
+}
+
+VKAPI_ATTR void VKAPI_CALL destroyPipelineLayout (VkDevice device, VkPipelineLayout pipelineLayout, const VkAllocationCallbacks* pAllocator)
+{
+       DE_UNREF(device);
+       freeNonDispHandle<PipelineLayout, VkPipelineLayout>(pipelineLayout, pAllocator);
+}
+
+VKAPI_ATTR void VKAPI_CALL destroySampler (VkDevice device, VkSampler sampler, const VkAllocationCallbacks* pAllocator)
+{
+       DE_UNREF(device);
+       freeNonDispHandle<Sampler, VkSampler>(sampler, pAllocator);
+}
+
+VKAPI_ATTR void VKAPI_CALL destroyDescriptorSetLayout (VkDevice device, VkDescriptorSetLayout descriptorSetLayout, const VkAllocationCallbacks* pAllocator)
+{
+       DE_UNREF(device);
+       freeNonDispHandle<DescriptorSetLayout, VkDescriptorSetLayout>(descriptorSetLayout, pAllocator);
+}
+
+VKAPI_ATTR void VKAPI_CALL destroyFramebuffer (VkDevice device, VkFramebuffer framebuffer, const VkAllocationCallbacks* pAllocator)
+{
+       DE_UNREF(device);
+       freeNonDispHandle<Framebuffer, VkFramebuffer>(framebuffer, pAllocator);
+}
+
+VKAPI_ATTR void VKAPI_CALL destroyRenderPass (VkDevice device, VkRenderPass renderPass, const VkAllocationCallbacks* pAllocator)
+{
+       DE_UNREF(device);
+       freeNonDispHandle<RenderPass, VkRenderPass>(renderPass, pAllocator);
+}
+
+VKAPI_ATTR void VKAPI_CALL destroySamplerYcbcrConversion (VkDevice device, VkSamplerYcbcrConversion ycbcrConversion, const VkAllocationCallbacks* pAllocator)
+{
+       DE_UNREF(device);
+       freeNonDispHandle<SamplerYcbcrConversion, VkSamplerYcbcrConversion>(ycbcrConversion, pAllocator);
+}
+
+VKAPI_ATTR void VKAPI_CALL destroySurfaceKHR (VkInstance instance, VkSurfaceKHR surface, const VkAllocationCallbacks* pAllocator)
+{
+       DE_UNREF(instance);
+       freeNonDispHandle<SurfaceKHR, VkSurfaceKHR>(surface, pAllocator);
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL enumerateInstanceLayerProperties (deUint32* pPropertyCount, VkLayerProperties* pProperties)
+{
+       DE_UNREF(pPropertyCount);
+       DE_UNREF(pProperties);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL enumerateDeviceLayerProperties (VkPhysicalDevice physicalDevice, deUint32* pPropertyCount, VkLayerProperties* pProperties)
+{
+       DE_UNREF(physicalDevice);
+       DE_UNREF(pPropertyCount);
+       DE_UNREF(pProperties);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL queueSubmit (VkQueue queue, deUint32 submitCount, const VkSubmitInfo* pSubmits, VkFence fence)
+{
+       DE_UNREF(queue);
+       DE_UNREF(submitCount);
+       DE_UNREF(pSubmits);
+       DE_UNREF(fence);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL queueWaitIdle (VkQueue queue)
+{
+       DE_UNREF(queue);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL deviceWaitIdle (VkDevice device)
+{
+       DE_UNREF(device);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL flushMappedMemoryRanges (VkDevice device, deUint32 memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges)
+{
+       DE_UNREF(device);
+       DE_UNREF(memoryRangeCount);
+       DE_UNREF(pMemoryRanges);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL invalidateMappedMemoryRanges (VkDevice device, deUint32 memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges)
+{
+       DE_UNREF(device);
+       DE_UNREF(memoryRangeCount);
+       DE_UNREF(pMemoryRanges);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR void VKAPI_CALL getDeviceMemoryCommitment (VkDevice device, VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes)
+{
+       DE_UNREF(device);
+       DE_UNREF(memory);
+       DE_UNREF(pCommittedMemoryInBytes);
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL bindBufferMemory (VkDevice device, VkBuffer buffer, VkDeviceMemory memory, VkDeviceSize memoryOffset)
+{
+       DE_UNREF(device);
+       DE_UNREF(buffer);
+       DE_UNREF(memory);
+       DE_UNREF(memoryOffset);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL bindImageMemory (VkDevice device, VkImage image, VkDeviceMemory memory, VkDeviceSize memoryOffset)
+{
+       DE_UNREF(device);
+       DE_UNREF(image);
+       DE_UNREF(memory);
+       DE_UNREF(memoryOffset);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR void VKAPI_CALL getImageSparseMemoryRequirements (VkDevice device, VkImage image, deUint32* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
+{
+       DE_UNREF(device);
+       DE_UNREF(image);
+       DE_UNREF(pSparseMemoryRequirementCount);
+       DE_UNREF(pSparseMemoryRequirements);
+}
+
+VKAPI_ATTR void VKAPI_CALL getPhysicalDeviceSparseImageFormatProperties (VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkSampleCountFlagBits samples, VkImageUsageFlags usage, VkImageTiling tiling, deUint32* pPropertyCount, VkSparseImageFormatProperties* pProperties)
+{
+       DE_UNREF(physicalDevice);
+       DE_UNREF(format);
+       DE_UNREF(type);
+       DE_UNREF(samples);
+       DE_UNREF(usage);
+       DE_UNREF(tiling);
+       DE_UNREF(pPropertyCount);
+       DE_UNREF(pProperties);
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL queueBindSparse (VkQueue queue, deUint32 bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence)
+{
+       DE_UNREF(queue);
+       DE_UNREF(bindInfoCount);
+       DE_UNREF(pBindInfo);
+       DE_UNREF(fence);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL resetFences (VkDevice device, deUint32 fenceCount, const VkFence* pFences)
+{
+       DE_UNREF(device);
+       DE_UNREF(fenceCount);
+       DE_UNREF(pFences);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL getFenceStatus (VkDevice device, VkFence fence)
+{
+       DE_UNREF(device);
+       DE_UNREF(fence);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL waitForFences (VkDevice device, deUint32 fenceCount, const VkFence* pFences, VkBool32 waitAll, deUint64 timeout)
+{
+       DE_UNREF(device);
+       DE_UNREF(fenceCount);
+       DE_UNREF(pFences);
+       DE_UNREF(waitAll);
+       DE_UNREF(timeout);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL getEventStatus (VkDevice device, VkEvent event)
+{
+       DE_UNREF(device);
+       DE_UNREF(event);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL setEvent (VkDevice device, VkEvent event)
+{
+       DE_UNREF(device);
+       DE_UNREF(event);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL resetEvent (VkDevice device, VkEvent event)
+{
+       DE_UNREF(device);
+       DE_UNREF(event);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL getQueryPoolResults (VkDevice device, VkQueryPool queryPool, deUint32 firstQuery, deUint32 queryCount, deUintptr dataSize, void* pData, VkDeviceSize stride, VkQueryResultFlags flags)
+{
+       DE_UNREF(device);
+       DE_UNREF(queryPool);
+       DE_UNREF(firstQuery);
+       DE_UNREF(queryCount);
+       DE_UNREF(dataSize);
+       DE_UNREF(pData);
+       DE_UNREF(stride);
+       DE_UNREF(flags);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR void VKAPI_CALL getImageSubresourceLayout (VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout)
+{
+       DE_UNREF(device);
+       DE_UNREF(image);
+       DE_UNREF(pSubresource);
+       DE_UNREF(pLayout);
+}
+
+VKAPI_ATTR void VKAPI_CALL updateDescriptorSets (VkDevice device, deUint32 descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites, deUint32 descriptorCopyCount, const VkCopyDescriptorSet* pDescriptorCopies)
+{
+       DE_UNREF(device);
+       DE_UNREF(descriptorWriteCount);
+       DE_UNREF(pDescriptorWrites);
+       DE_UNREF(descriptorCopyCount);
+       DE_UNREF(pDescriptorCopies);
+}
+
+VKAPI_ATTR void VKAPI_CALL getRenderAreaGranularity (VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity)
+{
+       DE_UNREF(device);
+       DE_UNREF(renderPass);
+       DE_UNREF(pGranularity);
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL resetCommandPool (VkDevice device, VkCommandPool commandPool, VkCommandPoolResetFlags flags)
+{
+       DE_UNREF(device);
+       DE_UNREF(commandPool);
+       DE_UNREF(flags);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL beginCommandBuffer (VkCommandBuffer commandBuffer, const VkCommandBufferBeginInfo* pBeginInfo)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(pBeginInfo);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL endCommandBuffer (VkCommandBuffer commandBuffer)
+{
+       DE_UNREF(commandBuffer);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL resetCommandBuffer (VkCommandBuffer commandBuffer, VkCommandBufferResetFlags flags)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(flags);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdBindPipeline (VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(pipelineBindPoint);
+       DE_UNREF(pipeline);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdSetViewport (VkCommandBuffer commandBuffer, deUint32 firstViewport, deUint32 viewportCount, const VkViewport* pViewports)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(firstViewport);
+       DE_UNREF(viewportCount);
+       DE_UNREF(pViewports);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdSetScissor (VkCommandBuffer commandBuffer, deUint32 firstScissor, deUint32 scissorCount, const VkRect2D* pScissors)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(firstScissor);
+       DE_UNREF(scissorCount);
+       DE_UNREF(pScissors);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdSetLineWidth (VkCommandBuffer commandBuffer, float lineWidth)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(lineWidth);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdSetDepthBias (VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(depthBiasConstantFactor);
+       DE_UNREF(depthBiasClamp);
+       DE_UNREF(depthBiasSlopeFactor);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdSetBlendConstants (VkCommandBuffer commandBuffer, const float blendConstants[4])
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(blendConstants);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdSetDepthBounds (VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(minDepthBounds);
+       DE_UNREF(maxDepthBounds);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdSetStencilCompareMask (VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, deUint32 compareMask)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(faceMask);
+       DE_UNREF(compareMask);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdSetStencilWriteMask (VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, deUint32 writeMask)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(faceMask);
+       DE_UNREF(writeMask);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdSetStencilReference (VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, deUint32 reference)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(faceMask);
+       DE_UNREF(reference);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdBindDescriptorSets (VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, deUint32 firstSet, deUint32 descriptorSetCount, const VkDescriptorSet* pDescriptorSets, deUint32 dynamicOffsetCount, const deUint32* pDynamicOffsets)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(pipelineBindPoint);
+       DE_UNREF(layout);
+       DE_UNREF(firstSet);
+       DE_UNREF(descriptorSetCount);
+       DE_UNREF(pDescriptorSets);
+       DE_UNREF(dynamicOffsetCount);
+       DE_UNREF(pDynamicOffsets);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdBindIndexBuffer (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(buffer);
+       DE_UNREF(offset);
+       DE_UNREF(indexType);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdBindVertexBuffers (VkCommandBuffer commandBuffer, deUint32 firstBinding, deUint32 bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(firstBinding);
+       DE_UNREF(bindingCount);
+       DE_UNREF(pBuffers);
+       DE_UNREF(pOffsets);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdDraw (VkCommandBuffer commandBuffer, deUint32 vertexCount, deUint32 instanceCount, deUint32 firstVertex, deUint32 firstInstance)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(vertexCount);
+       DE_UNREF(instanceCount);
+       DE_UNREF(firstVertex);
+       DE_UNREF(firstInstance);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdDrawIndexed (VkCommandBuffer commandBuffer, deUint32 indexCount, deUint32 instanceCount, deUint32 firstIndex, deInt32 vertexOffset, deUint32 firstInstance)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(indexCount);
+       DE_UNREF(instanceCount);
+       DE_UNREF(firstIndex);
+       DE_UNREF(vertexOffset);
+       DE_UNREF(firstInstance);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdDrawIndirect (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, deUint32 drawCount, deUint32 stride)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(buffer);
+       DE_UNREF(offset);
+       DE_UNREF(drawCount);
+       DE_UNREF(stride);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdDrawIndexedIndirect (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, deUint32 drawCount, deUint32 stride)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(buffer);
+       DE_UNREF(offset);
+       DE_UNREF(drawCount);
+       DE_UNREF(stride);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdDispatch (VkCommandBuffer commandBuffer, deUint32 groupCountX, deUint32 groupCountY, deUint32 groupCountZ)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(groupCountX);
+       DE_UNREF(groupCountY);
+       DE_UNREF(groupCountZ);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdDispatchIndirect (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(buffer);
+       DE_UNREF(offset);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdCopyBuffer (VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkBuffer dstBuffer, deUint32 regionCount, const VkBufferCopy* pRegions)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(srcBuffer);
+       DE_UNREF(dstBuffer);
+       DE_UNREF(regionCount);
+       DE_UNREF(pRegions);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdCopyImage (VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, deUint32 regionCount, const VkImageCopy* pRegions)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(srcImage);
+       DE_UNREF(srcImageLayout);
+       DE_UNREF(dstImage);
+       DE_UNREF(dstImageLayout);
+       DE_UNREF(regionCount);
+       DE_UNREF(pRegions);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdBlitImage (VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, deUint32 regionCount, const VkImageBlit* pRegions, VkFilter filter)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(srcImage);
+       DE_UNREF(srcImageLayout);
+       DE_UNREF(dstImage);
+       DE_UNREF(dstImageLayout);
+       DE_UNREF(regionCount);
+       DE_UNREF(pRegions);
+       DE_UNREF(filter);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdCopyBufferToImage (VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkImage dstImage, VkImageLayout dstImageLayout, deUint32 regionCount, const VkBufferImageCopy* pRegions)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(srcBuffer);
+       DE_UNREF(dstImage);
+       DE_UNREF(dstImageLayout);
+       DE_UNREF(regionCount);
+       DE_UNREF(pRegions);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdCopyImageToBuffer (VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer dstBuffer, deUint32 regionCount, const VkBufferImageCopy* pRegions)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(srcImage);
+       DE_UNREF(srcImageLayout);
+       DE_UNREF(dstBuffer);
+       DE_UNREF(regionCount);
+       DE_UNREF(pRegions);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdUpdateBuffer (VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize dataSize, const void* pData)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(dstBuffer);
+       DE_UNREF(dstOffset);
+       DE_UNREF(dataSize);
+       DE_UNREF(pData);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdFillBuffer (VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize size, deUint32 data)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(dstBuffer);
+       DE_UNREF(dstOffset);
+       DE_UNREF(size);
+       DE_UNREF(data);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdClearColorImage (VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, deUint32 rangeCount, const VkImageSubresourceRange* pRanges)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(image);
+       DE_UNREF(imageLayout);
+       DE_UNREF(pColor);
+       DE_UNREF(rangeCount);
+       DE_UNREF(pRanges);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdClearDepthStencilImage (VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, deUint32 rangeCount, const VkImageSubresourceRange* pRanges)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(image);
+       DE_UNREF(imageLayout);
+       DE_UNREF(pDepthStencil);
+       DE_UNREF(rangeCount);
+       DE_UNREF(pRanges);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdClearAttachments (VkCommandBuffer commandBuffer, deUint32 attachmentCount, const VkClearAttachment* pAttachments, deUint32 rectCount, const VkClearRect* pRects)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(attachmentCount);
+       DE_UNREF(pAttachments);
+       DE_UNREF(rectCount);
+       DE_UNREF(pRects);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdResolveImage (VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, deUint32 regionCount, const VkImageResolve* pRegions)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(srcImage);
+       DE_UNREF(srcImageLayout);
+       DE_UNREF(dstImage);
+       DE_UNREF(dstImageLayout);
+       DE_UNREF(regionCount);
+       DE_UNREF(pRegions);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdSetEvent (VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(event);
+       DE_UNREF(stageMask);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdResetEvent (VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(event);
+       DE_UNREF(stageMask);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdWaitEvents (VkCommandBuffer commandBuffer, deUint32 eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, deUint32 memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, deUint32 bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, deUint32 imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(eventCount);
+       DE_UNREF(pEvents);
+       DE_UNREF(srcStageMask);
+       DE_UNREF(dstStageMask);
+       DE_UNREF(memoryBarrierCount);
+       DE_UNREF(pMemoryBarriers);
+       DE_UNREF(bufferMemoryBarrierCount);
+       DE_UNREF(pBufferMemoryBarriers);
+       DE_UNREF(imageMemoryBarrierCount);
+       DE_UNREF(pImageMemoryBarriers);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdPipelineBarrier (VkCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, deUint32 memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, deUint32 bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, deUint32 imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(srcStageMask);
+       DE_UNREF(dstStageMask);
+       DE_UNREF(dependencyFlags);
+       DE_UNREF(memoryBarrierCount);
+       DE_UNREF(pMemoryBarriers);
+       DE_UNREF(bufferMemoryBarrierCount);
+       DE_UNREF(pBufferMemoryBarriers);
+       DE_UNREF(imageMemoryBarrierCount);
+       DE_UNREF(pImageMemoryBarriers);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdBeginQuery (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 query, VkQueryControlFlags flags)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(queryPool);
+       DE_UNREF(query);
+       DE_UNREF(flags);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdEndQuery (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 query)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(queryPool);
+       DE_UNREF(query);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdResetQueryPool (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 firstQuery, deUint32 queryCount)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(queryPool);
+       DE_UNREF(firstQuery);
+       DE_UNREF(queryCount);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdWriteTimestamp (VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, deUint32 query)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(pipelineStage);
+       DE_UNREF(queryPool);
+       DE_UNREF(query);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdCopyQueryPoolResults (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 firstQuery, deUint32 queryCount, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize stride, VkQueryResultFlags flags)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(queryPool);
+       DE_UNREF(firstQuery);
+       DE_UNREF(queryCount);
+       DE_UNREF(dstBuffer);
+       DE_UNREF(dstOffset);
+       DE_UNREF(stride);
+       DE_UNREF(flags);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdPushConstants (VkCommandBuffer commandBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, deUint32 offset, deUint32 size, const void* pValues)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(layout);
+       DE_UNREF(stageFlags);
+       DE_UNREF(offset);
+       DE_UNREF(size);
+       DE_UNREF(pValues);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdBeginRenderPass (VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkSubpassContents contents)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(pRenderPassBegin);
+       DE_UNREF(contents);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdNextSubpass (VkCommandBuffer commandBuffer, VkSubpassContents contents)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(contents);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdEndRenderPass (VkCommandBuffer commandBuffer)
+{
+       DE_UNREF(commandBuffer);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdExecuteCommands (VkCommandBuffer commandBuffer, deUint32 commandBufferCount, const VkCommandBuffer* pCommandBuffers)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(commandBufferCount);
+       DE_UNREF(pCommandBuffers);
+}
+
+VKAPI_ATTR void VKAPI_CALL getCommandPoolMemoryConsumption (VkDevice device, VkCommandPool commandPool, VkCommandBuffer commandBuffer, VkCommandPoolMemoryConsumption* pConsumption)
+{
+       DE_UNREF(device);
+       DE_UNREF(commandPool);
+       DE_UNREF(commandBuffer);
+       DE_UNREF(pConsumption);
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL getFaultData (VkDevice device, VkFaultQueryBehavior faultQueryBehavior, VkBool32* pUnrecordedFaults, deUint32* pFaultCount, VkFaultData* pFaults)
+{
+       DE_UNREF(device);
+       DE_UNREF(faultQueryBehavior);
+       DE_UNREF(pUnrecordedFaults);
+       DE_UNREF(pFaultCount);
+       DE_UNREF(pFaults);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL enumerateInstanceVersion (deUint32* pApiVersion)
+{
+       DE_UNREF(pApiVersion);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL bindBufferMemory2 (VkDevice device, deUint32 bindInfoCount, const VkBindBufferMemoryInfo* pBindInfos)
+{
+       DE_UNREF(device);
+       DE_UNREF(bindInfoCount);
+       DE_UNREF(pBindInfos);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL bindImageMemory2 (VkDevice device, deUint32 bindInfoCount, const VkBindImageMemoryInfo* pBindInfos)
+{
+       DE_UNREF(device);
+       DE_UNREF(bindInfoCount);
+       DE_UNREF(pBindInfos);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR void VKAPI_CALL getDeviceGroupPeerMemoryFeatures (VkDevice device, deUint32 heapIndex, deUint32 localDeviceIndex, deUint32 remoteDeviceIndex, VkPeerMemoryFeatureFlags* pPeerMemoryFeatures)
+{
+       DE_UNREF(device);
+       DE_UNREF(heapIndex);
+       DE_UNREF(localDeviceIndex);
+       DE_UNREF(remoteDeviceIndex);
+       DE_UNREF(pPeerMemoryFeatures);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdSetDeviceMask (VkCommandBuffer commandBuffer, deUint32 deviceMask)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(deviceMask);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdDispatchBase (VkCommandBuffer commandBuffer, deUint32 baseGroupX, deUint32 baseGroupY, deUint32 baseGroupZ, deUint32 groupCountX, deUint32 groupCountY, deUint32 groupCountZ)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(baseGroupX);
+       DE_UNREF(baseGroupY);
+       DE_UNREF(baseGroupZ);
+       DE_UNREF(groupCountX);
+       DE_UNREF(groupCountY);
+       DE_UNREF(groupCountZ);
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL enumeratePhysicalDeviceGroups (VkInstance instance, deUint32* pPhysicalDeviceGroupCount, VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties)
+{
+       DE_UNREF(instance);
+       DE_UNREF(pPhysicalDeviceGroupCount);
+       DE_UNREF(pPhysicalDeviceGroupProperties);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR void VKAPI_CALL getImageMemoryRequirements2 (VkDevice device, const VkImageMemoryRequirementsInfo2* pInfo, VkMemoryRequirements2* pMemoryRequirements)
+{
+       DE_UNREF(device);
+       DE_UNREF(pInfo);
+       DE_UNREF(pMemoryRequirements);
+}
+
+VKAPI_ATTR void VKAPI_CALL getBufferMemoryRequirements2 (VkDevice device, const VkBufferMemoryRequirementsInfo2* pInfo, VkMemoryRequirements2* pMemoryRequirements)
+{
+       DE_UNREF(device);
+       DE_UNREF(pInfo);
+       DE_UNREF(pMemoryRequirements);
+}
+
+VKAPI_ATTR void VKAPI_CALL getImageSparseMemoryRequirements2 (VkDevice device, const VkImageSparseMemoryRequirementsInfo2* pInfo, deUint32* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2* pSparseMemoryRequirements)
+{
+       DE_UNREF(device);
+       DE_UNREF(pInfo);
+       DE_UNREF(pSparseMemoryRequirementCount);
+       DE_UNREF(pSparseMemoryRequirements);
+}
+
+VKAPI_ATTR void VKAPI_CALL getPhysicalDeviceFeatures2 (VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures2* pFeatures)
+{
+       DE_UNREF(physicalDevice);
+       DE_UNREF(pFeatures);
+}
+
+VKAPI_ATTR void VKAPI_CALL getPhysicalDeviceProperties2 (VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties2* pProperties)
+{
+       DE_UNREF(physicalDevice);
+       DE_UNREF(pProperties);
+}
+
+VKAPI_ATTR void VKAPI_CALL getPhysicalDeviceFormatProperties2 (VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties2* pFormatProperties)
+{
+       DE_UNREF(physicalDevice);
+       DE_UNREF(format);
+       DE_UNREF(pFormatProperties);
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL getPhysicalDeviceImageFormatProperties2 (VkPhysicalDevice physicalDevice, const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo, VkImageFormatProperties2* pImageFormatProperties)
+{
+       DE_UNREF(physicalDevice);
+       DE_UNREF(pImageFormatInfo);
+       DE_UNREF(pImageFormatProperties);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR void VKAPI_CALL getPhysicalDeviceQueueFamilyProperties2 (VkPhysicalDevice physicalDevice, deUint32* pQueueFamilyPropertyCount, VkQueueFamilyProperties2* pQueueFamilyProperties)
+{
+       DE_UNREF(physicalDevice);
+       DE_UNREF(pQueueFamilyPropertyCount);
+       DE_UNREF(pQueueFamilyProperties);
+}
+
+VKAPI_ATTR void VKAPI_CALL getPhysicalDeviceMemoryProperties2 (VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties2* pMemoryProperties)
+{
+       DE_UNREF(physicalDevice);
+       DE_UNREF(pMemoryProperties);
+}
+
+VKAPI_ATTR void VKAPI_CALL getPhysicalDeviceSparseImageFormatProperties2 (VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo, deUint32* pPropertyCount, VkSparseImageFormatProperties2* pProperties)
+{
+       DE_UNREF(physicalDevice);
+       DE_UNREF(pFormatInfo);
+       DE_UNREF(pPropertyCount);
+       DE_UNREF(pProperties);
+}
+
+VKAPI_ATTR void VKAPI_CALL getDeviceQueue2 (VkDevice device, const VkDeviceQueueInfo2* pQueueInfo, VkQueue* pQueue)
+{
+       DE_UNREF(device);
+       DE_UNREF(pQueueInfo);
+       DE_UNREF(pQueue);
+}
+
+VKAPI_ATTR void VKAPI_CALL getPhysicalDeviceExternalBufferProperties (VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo, VkExternalBufferProperties* pExternalBufferProperties)
+{
+       DE_UNREF(physicalDevice);
+       DE_UNREF(pExternalBufferInfo);
+       DE_UNREF(pExternalBufferProperties);
+}
+
+VKAPI_ATTR void VKAPI_CALL getPhysicalDeviceExternalFenceProperties (VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo, VkExternalFenceProperties* pExternalFenceProperties)
+{
+       DE_UNREF(physicalDevice);
+       DE_UNREF(pExternalFenceInfo);
+       DE_UNREF(pExternalFenceProperties);
+}
+
+VKAPI_ATTR void VKAPI_CALL getPhysicalDeviceExternalSemaphoreProperties (VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo, VkExternalSemaphoreProperties* pExternalSemaphoreProperties)
+{
+       DE_UNREF(physicalDevice);
+       DE_UNREF(pExternalSemaphoreInfo);
+       DE_UNREF(pExternalSemaphoreProperties);
+}
+
+VKAPI_ATTR void VKAPI_CALL getDescriptorSetLayoutSupport (VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, VkDescriptorSetLayoutSupport* pSupport)
+{
+       DE_UNREF(device);
+       DE_UNREF(pCreateInfo);
+       DE_UNREF(pSupport);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdDrawIndirectCount (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, deUint32 maxDrawCount, deUint32 stride)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(buffer);
+       DE_UNREF(offset);
+       DE_UNREF(countBuffer);
+       DE_UNREF(countBufferOffset);
+       DE_UNREF(maxDrawCount);
+       DE_UNREF(stride);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdDrawIndexedIndirectCount (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, deUint32 maxDrawCount, deUint32 stride)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(buffer);
+       DE_UNREF(offset);
+       DE_UNREF(countBuffer);
+       DE_UNREF(countBufferOffset);
+       DE_UNREF(maxDrawCount);
+       DE_UNREF(stride);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdBeginRenderPass2 (VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, const VkSubpassBeginInfo* pSubpassBeginInfo)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(pRenderPassBegin);
+       DE_UNREF(pSubpassBeginInfo);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdNextSubpass2 (VkCommandBuffer commandBuffer, const VkSubpassBeginInfo* pSubpassBeginInfo, const VkSubpassEndInfo* pSubpassEndInfo)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(pSubpassBeginInfo);
+       DE_UNREF(pSubpassEndInfo);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdEndRenderPass2 (VkCommandBuffer commandBuffer, const VkSubpassEndInfo* pSubpassEndInfo)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(pSubpassEndInfo);
+}
+
+VKAPI_ATTR void VKAPI_CALL resetQueryPool (VkDevice device, VkQueryPool queryPool, deUint32 firstQuery, deUint32 queryCount)
+{
+       DE_UNREF(device);
+       DE_UNREF(queryPool);
+       DE_UNREF(firstQuery);
+       DE_UNREF(queryCount);
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL getSemaphoreCounterValue (VkDevice device, VkSemaphore semaphore, deUint64* pValue)
+{
+       DE_UNREF(device);
+       DE_UNREF(semaphore);
+       DE_UNREF(pValue);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL waitSemaphores (VkDevice device, const VkSemaphoreWaitInfo* pWaitInfo, deUint64 timeout)
+{
+       DE_UNREF(device);
+       DE_UNREF(pWaitInfo);
+       DE_UNREF(timeout);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL signalSemaphore (VkDevice device, const VkSemaphoreSignalInfo* pSignalInfo)
+{
+       DE_UNREF(device);
+       DE_UNREF(pSignalInfo);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkDeviceAddress VKAPI_CALL getBufferDeviceAddress (VkDevice device, const VkBufferDeviceAddressInfo* pInfo)
+{
+       DE_UNREF(device);
+       DE_UNREF(pInfo);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR uint64_t VKAPI_CALL getBufferOpaqueCaptureAddress (VkDevice device, const VkBufferDeviceAddressInfo* pInfo)
+{
+       DE_UNREF(device);
+       DE_UNREF(pInfo);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR uint64_t VKAPI_CALL getDeviceMemoryOpaqueCaptureAddress (VkDevice device, const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo)
+{
+       DE_UNREF(device);
+       DE_UNREF(pInfo);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL getPhysicalDeviceSurfaceSupportKHR (VkPhysicalDevice physicalDevice, deUint32 queueFamilyIndex, VkSurfaceKHR surface, VkBool32* pSupported)
+{
+       DE_UNREF(physicalDevice);
+       DE_UNREF(queueFamilyIndex);
+       DE_UNREF(surface);
+       DE_UNREF(pSupported);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL getPhysicalDeviceSurfaceCapabilitiesKHR (VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, VkSurfaceCapabilitiesKHR* pSurfaceCapabilities)
+{
+       DE_UNREF(physicalDevice);
+       DE_UNREF(surface);
+       DE_UNREF(pSurfaceCapabilities);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL getPhysicalDeviceSurfaceFormatsKHR (VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, deUint32* pSurfaceFormatCount, VkSurfaceFormatKHR* pSurfaceFormats)
+{
+       DE_UNREF(physicalDevice);
+       DE_UNREF(surface);
+       DE_UNREF(pSurfaceFormatCount);
+       DE_UNREF(pSurfaceFormats);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL getPhysicalDeviceSurfacePresentModesKHR (VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, deUint32* pPresentModeCount, VkPresentModeKHR* pPresentModes)
+{
+       DE_UNREF(physicalDevice);
+       DE_UNREF(surface);
+       DE_UNREF(pPresentModeCount);
+       DE_UNREF(pPresentModes);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL getSwapchainImagesKHR (VkDevice device, VkSwapchainKHR swapchain, deUint32* pSwapchainImageCount, VkImage* pSwapchainImages)
+{
+       DE_UNREF(device);
+       DE_UNREF(swapchain);
+       DE_UNREF(pSwapchainImageCount);
+       DE_UNREF(pSwapchainImages);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL acquireNextImageKHR (VkDevice device, VkSwapchainKHR swapchain, deUint64 timeout, VkSemaphore semaphore, VkFence fence, deUint32* pImageIndex)
+{
+       DE_UNREF(device);
+       DE_UNREF(swapchain);
+       DE_UNREF(timeout);
+       DE_UNREF(semaphore);
+       DE_UNREF(fence);
+       DE_UNREF(pImageIndex);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL queuePresentKHR (VkQueue queue, const VkPresentInfoKHR* pPresentInfo)
+{
+       DE_UNREF(queue);
+       DE_UNREF(pPresentInfo);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL getDeviceGroupPresentCapabilitiesKHR (VkDevice device, VkDeviceGroupPresentCapabilitiesKHR* pDeviceGroupPresentCapabilities)
+{
+       DE_UNREF(device);
+       DE_UNREF(pDeviceGroupPresentCapabilities);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL getDeviceGroupSurfacePresentModesKHR (VkDevice device, VkSurfaceKHR surface, VkDeviceGroupPresentModeFlagsKHR* pModes)
+{
+       DE_UNREF(device);
+       DE_UNREF(surface);
+       DE_UNREF(pModes);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL getPhysicalDevicePresentRectanglesKHR (VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, deUint32* pRectCount, VkRect2D* pRects)
+{
+       DE_UNREF(physicalDevice);
+       DE_UNREF(surface);
+       DE_UNREF(pRectCount);
+       DE_UNREF(pRects);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL acquireNextImage2KHR (VkDevice device, const VkAcquireNextImageInfoKHR* pAcquireInfo, deUint32* pImageIndex)
+{
+       DE_UNREF(device);
+       DE_UNREF(pAcquireInfo);
+       DE_UNREF(pImageIndex);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL getPhysicalDeviceDisplayPropertiesKHR (VkPhysicalDevice physicalDevice, deUint32* pPropertyCount, VkDisplayPropertiesKHR* pProperties)
+{
+       DE_UNREF(physicalDevice);
+       DE_UNREF(pPropertyCount);
+       DE_UNREF(pProperties);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL getPhysicalDeviceDisplayPlanePropertiesKHR (VkPhysicalDevice physicalDevice, deUint32* pPropertyCount, VkDisplayPlanePropertiesKHR* pProperties)
+{
+       DE_UNREF(physicalDevice);
+       DE_UNREF(pPropertyCount);
+       DE_UNREF(pProperties);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL getDisplayPlaneSupportedDisplaysKHR (VkPhysicalDevice physicalDevice, deUint32 planeIndex, deUint32* pDisplayCount, VkDisplayKHR* pDisplays)
+{
+       DE_UNREF(physicalDevice);
+       DE_UNREF(planeIndex);
+       DE_UNREF(pDisplayCount);
+       DE_UNREF(pDisplays);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL getDisplayModePropertiesKHR (VkPhysicalDevice physicalDevice, VkDisplayKHR display, deUint32* pPropertyCount, VkDisplayModePropertiesKHR* pProperties)
+{
+       DE_UNREF(physicalDevice);
+       DE_UNREF(display);
+       DE_UNREF(pPropertyCount);
+       DE_UNREF(pProperties);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL getDisplayPlaneCapabilitiesKHR (VkPhysicalDevice physicalDevice, VkDisplayModeKHR mode, deUint32 planeIndex, VkDisplayPlaneCapabilitiesKHR* pCapabilities)
+{
+       DE_UNREF(physicalDevice);
+       DE_UNREF(mode);
+       DE_UNREF(planeIndex);
+       DE_UNREF(pCapabilities);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL getMemoryFdKHR (VkDevice device, const VkMemoryGetFdInfoKHR* pGetFdInfo, int* pFd)
+{
+       DE_UNREF(device);
+       DE_UNREF(pGetFdInfo);
+       DE_UNREF(pFd);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL getMemoryFdPropertiesKHR (VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, int fd, VkMemoryFdPropertiesKHR* pMemoryFdProperties)
+{
+       DE_UNREF(device);
+       DE_UNREF(handleType);
+       DE_UNREF(fd);
+       DE_UNREF(pMemoryFdProperties);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL importSemaphoreFdKHR (VkDevice device, const VkImportSemaphoreFdInfoKHR* pImportSemaphoreFdInfo)
+{
+       DE_UNREF(device);
+       DE_UNREF(pImportSemaphoreFdInfo);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL getSemaphoreFdKHR (VkDevice device, const VkSemaphoreGetFdInfoKHR* pGetFdInfo, int* pFd)
+{
+       DE_UNREF(device);
+       DE_UNREF(pGetFdInfo);
+       DE_UNREF(pFd);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL getSwapchainStatusKHR (VkDevice device, VkSwapchainKHR swapchain)
+{
+       DE_UNREF(device);
+       DE_UNREF(swapchain);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL importFenceFdKHR (VkDevice device, const VkImportFenceFdInfoKHR* pImportFenceFdInfo)
+{
+       DE_UNREF(device);
+       DE_UNREF(pImportFenceFdInfo);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL getFenceFdKHR (VkDevice device, const VkFenceGetFdInfoKHR* pGetFdInfo, int* pFd)
+{
+       DE_UNREF(device);
+       DE_UNREF(pGetFdInfo);
+       DE_UNREF(pFd);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL getPhysicalDeviceSurfaceCapabilities2KHR (VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, VkSurfaceCapabilities2KHR* pSurfaceCapabilities)
+{
+       DE_UNREF(physicalDevice);
+       DE_UNREF(pSurfaceInfo);
+       DE_UNREF(pSurfaceCapabilities);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL getPhysicalDeviceSurfaceFormats2KHR (VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, deUint32* pSurfaceFormatCount, VkSurfaceFormat2KHR* pSurfaceFormats)
+{
+       DE_UNREF(physicalDevice);
+       DE_UNREF(pSurfaceInfo);
+       DE_UNREF(pSurfaceFormatCount);
+       DE_UNREF(pSurfaceFormats);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL getPhysicalDeviceDisplayProperties2KHR (VkPhysicalDevice physicalDevice, deUint32* pPropertyCount, VkDisplayProperties2KHR* pProperties)
+{
+       DE_UNREF(physicalDevice);
+       DE_UNREF(pPropertyCount);
+       DE_UNREF(pProperties);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL getPhysicalDeviceDisplayPlaneProperties2KHR (VkPhysicalDevice physicalDevice, deUint32* pPropertyCount, VkDisplayPlaneProperties2KHR* pProperties)
+{
+       DE_UNREF(physicalDevice);
+       DE_UNREF(pPropertyCount);
+       DE_UNREF(pProperties);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL getDisplayModeProperties2KHR (VkPhysicalDevice physicalDevice, VkDisplayKHR display, deUint32* pPropertyCount, VkDisplayModeProperties2KHR* pProperties)
+{
+       DE_UNREF(physicalDevice);
+       DE_UNREF(display);
+       DE_UNREF(pPropertyCount);
+       DE_UNREF(pProperties);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL getDisplayPlaneCapabilities2KHR (VkPhysicalDevice physicalDevice, const VkDisplayPlaneInfo2KHR* pDisplayPlaneInfo, VkDisplayPlaneCapabilities2KHR* pCapabilities)
+{
+       DE_UNREF(physicalDevice);
+       DE_UNREF(pDisplayPlaneInfo);
+       DE_UNREF(pCapabilities);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL getPhysicalDeviceFragmentShadingRatesKHR (VkPhysicalDevice physicalDevice, deUint32* pFragmentShadingRateCount, VkPhysicalDeviceFragmentShadingRateKHR* pFragmentShadingRates)
+{
+       DE_UNREF(physicalDevice);
+       DE_UNREF(pFragmentShadingRateCount);
+       DE_UNREF(pFragmentShadingRates);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdSetFragmentShadingRateKHR (VkCommandBuffer commandBuffer, const VkExtent2D* pFragmentSize, const VkFragmentShadingRateCombinerOpKHR combinerOps[2])
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(pFragmentSize);
+       DE_UNREF(combinerOps);
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL getFaultDataKHR (VkDevice device, VkFaultQueryBehavior faultQueryBehavior, VkBool32* pUnrecordedFaults, deUint32* pFaultCount, VkFaultData* pFaults)
+{
+       DE_UNREF(device);
+       DE_UNREF(faultQueryBehavior);
+       DE_UNREF(pUnrecordedFaults);
+       DE_UNREF(pFaultCount);
+       DE_UNREF(pFaults);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdRefreshObjectsKHR (VkCommandBuffer commandBuffer, const VkRefreshObjectListKHR* pRefreshObjects)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(pRefreshObjects);
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL getPhysicalDeviceRefreshableObjectTypesKHR (VkPhysicalDevice physicalDevice, deUint32* pRefreshableObjectCount, VkObjectType* pRefreshableObjectTypes)
+{
+       DE_UNREF(physicalDevice);
+       DE_UNREF(pRefreshableObjectCount);
+       DE_UNREF(pRefreshableObjectTypes);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdCopyBuffer2KHR (VkCommandBuffer commandBuffer, const VkCopyBufferInfo2KHR* pCopyBufferInfo)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(pCopyBufferInfo);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdCopyImage2KHR (VkCommandBuffer commandBuffer, const VkCopyImageInfo2KHR* pCopyImageInfo)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(pCopyImageInfo);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdCopyBufferToImage2KHR (VkCommandBuffer commandBuffer, const VkCopyBufferToImageInfo2KHR* pCopyBufferToImageInfo)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(pCopyBufferToImageInfo);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdCopyImageToBuffer2KHR (VkCommandBuffer commandBuffer, const VkCopyImageToBufferInfo2KHR* pCopyImageToBufferInfo)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(pCopyImageToBufferInfo);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdBlitImage2KHR (VkCommandBuffer commandBuffer, const VkBlitImageInfo2KHR* pBlitImageInfo)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(pBlitImageInfo);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdResolveImage2KHR (VkCommandBuffer commandBuffer, const VkResolveImageInfo2KHR* pResolveImageInfo)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(pResolveImageInfo);
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL releaseDisplayEXT (VkPhysicalDevice physicalDevice, VkDisplayKHR display)
+{
+       DE_UNREF(physicalDevice);
+       DE_UNREF(display);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL getPhysicalDeviceSurfaceCapabilities2EXT (VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, VkSurfaceCapabilities2EXT* pSurfaceCapabilities)
+{
+       DE_UNREF(physicalDevice);
+       DE_UNREF(surface);
+       DE_UNREF(pSurfaceCapabilities);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL displayPowerControlEXT (VkDevice device, VkDisplayKHR display, const VkDisplayPowerInfoEXT* pDisplayPowerInfo)
+{
+       DE_UNREF(device);
+       DE_UNREF(display);
+       DE_UNREF(pDisplayPowerInfo);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL registerDeviceEventEXT (VkDevice device, const VkDeviceEventInfoEXT* pDeviceEventInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence)
+{
+       DE_UNREF(device);
+       DE_UNREF(pDeviceEventInfo);
+       DE_UNREF(pAllocator);
+       DE_UNREF(pFence);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL registerDisplayEventEXT (VkDevice device, VkDisplayKHR display, const VkDisplayEventInfoEXT* pDisplayEventInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence)
+{
+       DE_UNREF(device);
+       DE_UNREF(display);
+       DE_UNREF(pDisplayEventInfo);
+       DE_UNREF(pAllocator);
+       DE_UNREF(pFence);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL getSwapchainCounterEXT (VkDevice device, VkSwapchainKHR swapchain, VkSurfaceCounterFlagBitsEXT counter, deUint64* pCounterValue)
+{
+       DE_UNREF(device);
+       DE_UNREF(swapchain);
+       DE_UNREF(counter);
+       DE_UNREF(pCounterValue);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdSetDiscardRectangleEXT (VkCommandBuffer commandBuffer, deUint32 firstDiscardRectangle, deUint32 discardRectangleCount, const VkRect2D* pDiscardRectangles)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(firstDiscardRectangle);
+       DE_UNREF(discardRectangleCount);
+       DE_UNREF(pDiscardRectangles);
+}
+
+VKAPI_ATTR void VKAPI_CALL setHdrMetadataEXT (VkDevice device, deUint32 swapchainCount, const VkSwapchainKHR* pSwapchains, const VkHdrMetadataEXT* pMetadata)
+{
+       DE_UNREF(device);
+       DE_UNREF(swapchainCount);
+       DE_UNREF(pSwapchains);
+       DE_UNREF(pMetadata);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdSetSampleLocationsEXT (VkCommandBuffer commandBuffer, const VkSampleLocationsInfoEXT* pSampleLocationsInfo)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(pSampleLocationsInfo);
+}
+
+VKAPI_ATTR void VKAPI_CALL getPhysicalDeviceMultisamplePropertiesEXT (VkPhysicalDevice physicalDevice, VkSampleCountFlagBits samples, VkMultisamplePropertiesEXT* pMultisampleProperties)
+{
+       DE_UNREF(physicalDevice);
+       DE_UNREF(samples);
+       DE_UNREF(pMultisampleProperties);
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL getImageDrmFormatModifierPropertiesEXT (VkDevice device, VkImage image, VkImageDrmFormatModifierPropertiesEXT* pProperties)
+{
+       DE_UNREF(device);
+       DE_UNREF(image);
+       DE_UNREF(pProperties);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL getMemoryHostPointerPropertiesEXT (VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, const void* pHostPointer, VkMemoryHostPointerPropertiesEXT* pMemoryHostPointerProperties)
+{
+       DE_UNREF(device);
+       DE_UNREF(handleType);
+       DE_UNREF(pHostPointer);
+       DE_UNREF(pMemoryHostPointerProperties);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL getPhysicalDeviceCalibrateableTimeDomainsEXT (VkPhysicalDevice physicalDevice, deUint32* pTimeDomainCount, VkTimeDomainEXT* pTimeDomains)
+{
+       DE_UNREF(physicalDevice);
+       DE_UNREF(pTimeDomainCount);
+       DE_UNREF(pTimeDomains);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL getCalibratedTimestampsEXT (VkDevice device, deUint32 timestampCount, const VkCalibratedTimestampInfoEXT* pTimestampInfos, deUint64* pTimestamps, deUint64* pMaxDeviation)
+{
+       DE_UNREF(device);
+       DE_UNREF(timestampCount);
+       DE_UNREF(pTimestampInfos);
+       DE_UNREF(pTimestamps);
+       DE_UNREF(pMaxDeviation);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdSetLineStippleEXT (VkCommandBuffer commandBuffer, deUint32 lineStippleFactor, deUint16 lineStipplePattern)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(lineStippleFactor);
+       DE_UNREF(lineStipplePattern);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdSetCullModeEXT (VkCommandBuffer commandBuffer, VkCullModeFlags cullMode)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(cullMode);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdSetFrontFaceEXT (VkCommandBuffer commandBuffer, VkFrontFace frontFace)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(frontFace);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdSetPrimitiveTopologyEXT (VkCommandBuffer commandBuffer, VkPrimitiveTopology primitiveTopology)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(primitiveTopology);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdSetViewportWithCountEXT (VkCommandBuffer commandBuffer, deUint32 viewportCount, const VkViewport* pViewports)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(viewportCount);
+       DE_UNREF(pViewports);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdSetScissorWithCountEXT (VkCommandBuffer commandBuffer, deUint32 scissorCount, const VkRect2D* pScissors)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(scissorCount);
+       DE_UNREF(pScissors);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdBindVertexBuffers2EXT (VkCommandBuffer commandBuffer, deUint32 firstBinding, deUint32 bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets, const VkDeviceSize* pSizes, const VkDeviceSize* pStrides)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(firstBinding);
+       DE_UNREF(bindingCount);
+       DE_UNREF(pBuffers);
+       DE_UNREF(pOffsets);
+       DE_UNREF(pSizes);
+       DE_UNREF(pStrides);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdSetDepthTestEnableEXT (VkCommandBuffer commandBuffer, VkBool32 depthTestEnable)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(depthTestEnable);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdSetDepthWriteEnableEXT (VkCommandBuffer commandBuffer, VkBool32 depthWriteEnable)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(depthWriteEnable);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdSetDepthCompareOpEXT (VkCommandBuffer commandBuffer, VkCompareOp depthCompareOp)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(depthCompareOp);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdSetDepthBoundsTestEnableEXT (VkCommandBuffer commandBuffer, VkBool32 depthBoundsTestEnable)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(depthBoundsTestEnable);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdSetStencilTestEnableEXT (VkCommandBuffer commandBuffer, VkBool32 stencilTestEnable)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(stencilTestEnable);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdSetStencilOpEXT (VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, VkStencilOp failOp, VkStencilOp passOp, VkStencilOp depthFailOp, VkCompareOp compareOp)
+{
+       DE_UNREF(commandBuffer);
+       DE_UNREF(faceMask);
+       DE_UNREF(failOp);
+       DE_UNREF(passOp);
+       DE_UNREF(depthFailOp);
+       DE_UNREF(compareOp);
+}
+
+static const tcu::StaticFunctionLibrary::Entry s_platformFunctions[] =
+{
+       VK_NULL_FUNC_ENTRY(vkCreateInstance,                                            createInstance),
+       VK_NULL_FUNC_ENTRY(vkGetInstanceProcAddr,                                       getInstanceProcAddr),
+       VK_NULL_FUNC_ENTRY(vkEnumerateInstanceExtensionProperties,      enumerateInstanceExtensionProperties),
+       VK_NULL_FUNC_ENTRY(vkEnumerateInstanceLayerProperties,          enumerateInstanceLayerProperties),
+       VK_NULL_FUNC_ENTRY(vkEnumerateInstanceVersion,                          enumerateInstanceVersion),
+};
+
+static const tcu::StaticFunctionLibrary::Entry s_instanceFunctions[] =
+{
+       VK_NULL_FUNC_ENTRY(vkDestroyInstance,                                                           destroyInstance),
+       VK_NULL_FUNC_ENTRY(vkEnumeratePhysicalDevices,                                          enumeratePhysicalDevices),
+       VK_NULL_FUNC_ENTRY(vkGetPhysicalDeviceFeatures,                                         getPhysicalDeviceFeatures),
+       VK_NULL_FUNC_ENTRY(vkGetPhysicalDeviceFormatProperties,                         getPhysicalDeviceFormatProperties),
+       VK_NULL_FUNC_ENTRY(vkGetPhysicalDeviceImageFormatProperties,            getPhysicalDeviceImageFormatProperties),
+       VK_NULL_FUNC_ENTRY(vkGetPhysicalDeviceProperties,                                       getPhysicalDeviceProperties),
+       VK_NULL_FUNC_ENTRY(vkGetPhysicalDeviceQueueFamilyProperties,            getPhysicalDeviceQueueFamilyProperties),
+       VK_NULL_FUNC_ENTRY(vkGetPhysicalDeviceMemoryProperties,                         getPhysicalDeviceMemoryProperties),
+       VK_NULL_FUNC_ENTRY(vkCreateDevice,                                                                      createDevice),
+       VK_NULL_FUNC_ENTRY(vkEnumerateDeviceExtensionProperties,                        enumerateDeviceExtensionProperties),
+       VK_NULL_FUNC_ENTRY(vkEnumerateDeviceLayerProperties,                            enumerateDeviceLayerProperties),
+       VK_NULL_FUNC_ENTRY(vkGetPhysicalDeviceSparseImageFormatProperties,      getPhysicalDeviceSparseImageFormatProperties),
+       VK_NULL_FUNC_ENTRY(vkEnumeratePhysicalDeviceGroups,                                     enumeratePhysicalDeviceGroups),
+       VK_NULL_FUNC_ENTRY(vkGetPhysicalDeviceFeatures2,                                        getPhysicalDeviceFeatures2),
+       VK_NULL_FUNC_ENTRY(vkGetPhysicalDeviceProperties2,                                      getPhysicalDeviceProperties2),
+       VK_NULL_FUNC_ENTRY(vkGetPhysicalDeviceFormatProperties2,                        getPhysicalDeviceFormatProperties2),
+       VK_NULL_FUNC_ENTRY(vkGetPhysicalDeviceImageFormatProperties2,           getPhysicalDeviceImageFormatProperties2),
+       VK_NULL_FUNC_ENTRY(vkGetPhysicalDeviceQueueFamilyProperties2,           getPhysicalDeviceQueueFamilyProperties2),
+       VK_NULL_FUNC_ENTRY(vkGetPhysicalDeviceMemoryProperties2,                        getPhysicalDeviceMemoryProperties2),
+       VK_NULL_FUNC_ENTRY(vkGetPhysicalDeviceSparseImageFormatProperties2,     getPhysicalDeviceSparseImageFormatProperties2),
+       VK_NULL_FUNC_ENTRY(vkGetPhysicalDeviceExternalBufferProperties,         getPhysicalDeviceExternalBufferProperties),
+       VK_NULL_FUNC_ENTRY(vkGetPhysicalDeviceExternalFenceProperties,          getPhysicalDeviceExternalFenceProperties),
+       VK_NULL_FUNC_ENTRY(vkGetPhysicalDeviceExternalSemaphoreProperties,      getPhysicalDeviceExternalSemaphoreProperties),
+       VK_NULL_FUNC_ENTRY(vkDestroySurfaceKHR,                                                         destroySurfaceKHR),
+       VK_NULL_FUNC_ENTRY(vkGetPhysicalDeviceSurfaceSupportKHR,                        getPhysicalDeviceSurfaceSupportKHR),
+       VK_NULL_FUNC_ENTRY(vkGetPhysicalDeviceSurfaceCapabilitiesKHR,           getPhysicalDeviceSurfaceCapabilitiesKHR),
+       VK_NULL_FUNC_ENTRY(vkGetPhysicalDeviceSurfaceFormatsKHR,                        getPhysicalDeviceSurfaceFormatsKHR),
+       VK_NULL_FUNC_ENTRY(vkGetPhysicalDeviceSurfacePresentModesKHR,           getPhysicalDeviceSurfacePresentModesKHR),
+       VK_NULL_FUNC_ENTRY(vkGetPhysicalDevicePresentRectanglesKHR,                     getPhysicalDevicePresentRectanglesKHR),
+       VK_NULL_FUNC_ENTRY(vkGetPhysicalDeviceDisplayPropertiesKHR,                     getPhysicalDeviceDisplayPropertiesKHR),
+       VK_NULL_FUNC_ENTRY(vkGetPhysicalDeviceDisplayPlanePropertiesKHR,        getPhysicalDeviceDisplayPlanePropertiesKHR),
+       VK_NULL_FUNC_ENTRY(vkGetDisplayPlaneSupportedDisplaysKHR,                       getDisplayPlaneSupportedDisplaysKHR),
+       VK_NULL_FUNC_ENTRY(vkGetDisplayModePropertiesKHR,                                       getDisplayModePropertiesKHR),
+       VK_NULL_FUNC_ENTRY(vkCreateDisplayModeKHR,                                                      createDisplayModeKHR),
+       VK_NULL_FUNC_ENTRY(vkGetDisplayPlaneCapabilitiesKHR,                            getDisplayPlaneCapabilitiesKHR),
+       VK_NULL_FUNC_ENTRY(vkCreateDisplayPlaneSurfaceKHR,                                      createDisplayPlaneSurfaceKHR),
+       VK_NULL_FUNC_ENTRY(vkGetPhysicalDeviceSurfaceCapabilities2KHR,          getPhysicalDeviceSurfaceCapabilities2KHR),
+       VK_NULL_FUNC_ENTRY(vkGetPhysicalDeviceSurfaceFormats2KHR,                       getPhysicalDeviceSurfaceFormats2KHR),
+       VK_NULL_FUNC_ENTRY(vkGetPhysicalDeviceDisplayProperties2KHR,            getPhysicalDeviceDisplayProperties2KHR),
+       VK_NULL_FUNC_ENTRY(vkGetPhysicalDeviceDisplayPlaneProperties2KHR,       getPhysicalDeviceDisplayPlaneProperties2KHR),
+       VK_NULL_FUNC_ENTRY(vkGetDisplayModeProperties2KHR,                                      getDisplayModeProperties2KHR),
+       VK_NULL_FUNC_ENTRY(vkGetDisplayPlaneCapabilities2KHR,                           getDisplayPlaneCapabilities2KHR),
+       VK_NULL_FUNC_ENTRY(vkGetPhysicalDeviceFragmentShadingRatesKHR,          getPhysicalDeviceFragmentShadingRatesKHR),
+       VK_NULL_FUNC_ENTRY(vkGetPhysicalDeviceRefreshableObjectTypesKHR,        getPhysicalDeviceRefreshableObjectTypesKHR),
+       VK_NULL_FUNC_ENTRY(vkReleaseDisplayEXT,                                                         releaseDisplayEXT),
+       VK_NULL_FUNC_ENTRY(vkGetPhysicalDeviceSurfaceCapabilities2EXT,          getPhysicalDeviceSurfaceCapabilities2EXT),
+       VK_NULL_FUNC_ENTRY(vkGetPhysicalDeviceMultisamplePropertiesEXT,         getPhysicalDeviceMultisamplePropertiesEXT),
+       VK_NULL_FUNC_ENTRY(vkGetPhysicalDeviceCalibrateableTimeDomainsEXT,      getPhysicalDeviceCalibrateableTimeDomainsEXT),
+       VK_NULL_FUNC_ENTRY(vkCreateHeadlessSurfaceEXT,                                          createHeadlessSurfaceEXT),
+};
+
+static const tcu::StaticFunctionLibrary::Entry s_deviceFunctions[] =
+{
+       VK_NULL_FUNC_ENTRY(vkGetDeviceProcAddr,                                                 getDeviceProcAddr),
+       VK_NULL_FUNC_ENTRY(vkDestroyDevice,                                                             destroyDevice),
+       VK_NULL_FUNC_ENTRY(vkGetDeviceQueue,                                                    getDeviceQueue),
+       VK_NULL_FUNC_ENTRY(vkQueueSubmit,                                                               queueSubmit),
+       VK_NULL_FUNC_ENTRY(vkQueueWaitIdle,                                                             queueWaitIdle),
+       VK_NULL_FUNC_ENTRY(vkDeviceWaitIdle,                                                    deviceWaitIdle),
+       VK_NULL_FUNC_ENTRY(vkAllocateMemory,                                                    allocateMemory),
+       VK_NULL_FUNC_ENTRY(vkMapMemory,                                                                 mapMemory),
+       VK_NULL_FUNC_ENTRY(vkUnmapMemory,                                                               unmapMemory),
+       VK_NULL_FUNC_ENTRY(vkFlushMappedMemoryRanges,                                   flushMappedMemoryRanges),
+       VK_NULL_FUNC_ENTRY(vkInvalidateMappedMemoryRanges,                              invalidateMappedMemoryRanges),
+       VK_NULL_FUNC_ENTRY(vkGetDeviceMemoryCommitment,                                 getDeviceMemoryCommitment),
+       VK_NULL_FUNC_ENTRY(vkBindBufferMemory,                                                  bindBufferMemory),
+       VK_NULL_FUNC_ENTRY(vkBindImageMemory,                                                   bindImageMemory),
+       VK_NULL_FUNC_ENTRY(vkGetBufferMemoryRequirements,                               getBufferMemoryRequirements),
+       VK_NULL_FUNC_ENTRY(vkGetImageMemoryRequirements,                                getImageMemoryRequirements),
+       VK_NULL_FUNC_ENTRY(vkGetImageSparseMemoryRequirements,                  getImageSparseMemoryRequirements),
+       VK_NULL_FUNC_ENTRY(vkQueueBindSparse,                                                   queueBindSparse),
+       VK_NULL_FUNC_ENTRY(vkCreateFence,                                                               createFence),
+       VK_NULL_FUNC_ENTRY(vkDestroyFence,                                                              destroyFence),
+       VK_NULL_FUNC_ENTRY(vkResetFences,                                                               resetFences),
+       VK_NULL_FUNC_ENTRY(vkGetFenceStatus,                                                    getFenceStatus),
+       VK_NULL_FUNC_ENTRY(vkWaitForFences,                                                             waitForFences),
+       VK_NULL_FUNC_ENTRY(vkCreateSemaphore,                                                   createSemaphore),
+       VK_NULL_FUNC_ENTRY(vkDestroySemaphore,                                                  destroySemaphore),
+       VK_NULL_FUNC_ENTRY(vkCreateEvent,                                                               createEvent),
+       VK_NULL_FUNC_ENTRY(vkDestroyEvent,                                                              destroyEvent),
+       VK_NULL_FUNC_ENTRY(vkGetEventStatus,                                                    getEventStatus),
+       VK_NULL_FUNC_ENTRY(vkSetEvent,                                                                  setEvent),
+       VK_NULL_FUNC_ENTRY(vkResetEvent,                                                                resetEvent),
+       VK_NULL_FUNC_ENTRY(vkCreateQueryPool,                                                   createQueryPool),
+       VK_NULL_FUNC_ENTRY(vkGetQueryPoolResults,                                               getQueryPoolResults),
+       VK_NULL_FUNC_ENTRY(vkCreateBuffer,                                                              createBuffer),
+       VK_NULL_FUNC_ENTRY(vkDestroyBuffer,                                                             destroyBuffer),
+       VK_NULL_FUNC_ENTRY(vkCreateBufferView,                                                  createBufferView),
+       VK_NULL_FUNC_ENTRY(vkDestroyBufferView,                                                 destroyBufferView),
+       VK_NULL_FUNC_ENTRY(vkCreateImage,                                                               createImage),
+       VK_NULL_FUNC_ENTRY(vkDestroyImage,                                                              destroyImage),
+       VK_NULL_FUNC_ENTRY(vkGetImageSubresourceLayout,                                 getImageSubresourceLayout),
+       VK_NULL_FUNC_ENTRY(vkCreateImageView,                                                   createImageView),
+       VK_NULL_FUNC_ENTRY(vkDestroyImageView,                                                  destroyImageView),
+       VK_NULL_FUNC_ENTRY(vkCreatePipelineCache,                                               createPipelineCache),
+       VK_NULL_FUNC_ENTRY(vkDestroyPipelineCache,                                              destroyPipelineCache),
+       VK_NULL_FUNC_ENTRY(vkCreateGraphicsPipelines,                                   createGraphicsPipelines),
+       VK_NULL_FUNC_ENTRY(vkCreateComputePipelines,                                    createComputePipelines),
+       VK_NULL_FUNC_ENTRY(vkDestroyPipeline,                                                   destroyPipeline),
+       VK_NULL_FUNC_ENTRY(vkCreatePipelineLayout,                                              createPipelineLayout),
+       VK_NULL_FUNC_ENTRY(vkDestroyPipelineLayout,                                             destroyPipelineLayout),
+       VK_NULL_FUNC_ENTRY(vkCreateSampler,                                                             createSampler),
+       VK_NULL_FUNC_ENTRY(vkDestroySampler,                                                    destroySampler),
+       VK_NULL_FUNC_ENTRY(vkCreateDescriptorSetLayout,                                 createDescriptorSetLayout),
+       VK_NULL_FUNC_ENTRY(vkDestroyDescriptorSetLayout,                                destroyDescriptorSetLayout),
+       VK_NULL_FUNC_ENTRY(vkCreateDescriptorPool,                                              createDescriptorPool),
+       VK_NULL_FUNC_ENTRY(vkResetDescriptorPool,                                               resetDescriptorPool),
+       VK_NULL_FUNC_ENTRY(vkAllocateDescriptorSets,                                    allocateDescriptorSets),
+       VK_NULL_FUNC_ENTRY(vkFreeDescriptorSets,                                                freeDescriptorSets),
+       VK_NULL_FUNC_ENTRY(vkUpdateDescriptorSets,                                              updateDescriptorSets),
+       VK_NULL_FUNC_ENTRY(vkCreateFramebuffer,                                                 createFramebuffer),
+       VK_NULL_FUNC_ENTRY(vkDestroyFramebuffer,                                                destroyFramebuffer),
+       VK_NULL_FUNC_ENTRY(vkCreateRenderPass,                                                  createRenderPass),
+       VK_NULL_FUNC_ENTRY(vkDestroyRenderPass,                                                 destroyRenderPass),
+       VK_NULL_FUNC_ENTRY(vkGetRenderAreaGranularity,                                  getRenderAreaGranularity),
+       VK_NULL_FUNC_ENTRY(vkCreateCommandPool,                                                 createCommandPool),
+       VK_NULL_FUNC_ENTRY(vkResetCommandPool,                                                  resetCommandPool),
+       VK_NULL_FUNC_ENTRY(vkAllocateCommandBuffers,                                    allocateCommandBuffers),
+       VK_NULL_FUNC_ENTRY(vkFreeCommandBuffers,                                                freeCommandBuffers),
+       VK_NULL_FUNC_ENTRY(vkBeginCommandBuffer,                                                beginCommandBuffer),
+       VK_NULL_FUNC_ENTRY(vkEndCommandBuffer,                                                  endCommandBuffer),
+       VK_NULL_FUNC_ENTRY(vkResetCommandBuffer,                                                resetCommandBuffer),
+       VK_NULL_FUNC_ENTRY(vkCmdBindPipeline,                                                   cmdBindPipeline),
+       VK_NULL_FUNC_ENTRY(vkCmdSetViewport,                                                    cmdSetViewport),
+       VK_NULL_FUNC_ENTRY(vkCmdSetScissor,                                                             cmdSetScissor),
+       VK_NULL_FUNC_ENTRY(vkCmdSetLineWidth,                                                   cmdSetLineWidth),
+       VK_NULL_FUNC_ENTRY(vkCmdSetDepthBias,                                                   cmdSetDepthBias),
+       VK_NULL_FUNC_ENTRY(vkCmdSetBlendConstants,                                              cmdSetBlendConstants),
+       VK_NULL_FUNC_ENTRY(vkCmdSetDepthBounds,                                                 cmdSetDepthBounds),
+       VK_NULL_FUNC_ENTRY(vkCmdSetStencilCompareMask,                                  cmdSetStencilCompareMask),
+       VK_NULL_FUNC_ENTRY(vkCmdSetStencilWriteMask,                                    cmdSetStencilWriteMask),
+       VK_NULL_FUNC_ENTRY(vkCmdSetStencilReference,                                    cmdSetStencilReference),
+       VK_NULL_FUNC_ENTRY(vkCmdBindDescriptorSets,                                             cmdBindDescriptorSets),
+       VK_NULL_FUNC_ENTRY(vkCmdBindIndexBuffer,                                                cmdBindIndexBuffer),
+       VK_NULL_FUNC_ENTRY(vkCmdBindVertexBuffers,                                              cmdBindVertexBuffers),
+       VK_NULL_FUNC_ENTRY(vkCmdDraw,                                                                   cmdDraw),
+       VK_NULL_FUNC_ENTRY(vkCmdDrawIndexed,                                                    cmdDrawIndexed),
+       VK_NULL_FUNC_ENTRY(vkCmdDrawIndirect,                                                   cmdDrawIndirect),
+       VK_NULL_FUNC_ENTRY(vkCmdDrawIndexedIndirect,                                    cmdDrawIndexedIndirect),
+       VK_NULL_FUNC_ENTRY(vkCmdDispatch,                                                               cmdDispatch),
+       VK_NULL_FUNC_ENTRY(vkCmdDispatchIndirect,                                               cmdDispatchIndirect),
+       VK_NULL_FUNC_ENTRY(vkCmdCopyBuffer,                                                             cmdCopyBuffer),
+       VK_NULL_FUNC_ENTRY(vkCmdCopyImage,                                                              cmdCopyImage),
+       VK_NULL_FUNC_ENTRY(vkCmdBlitImage,                                                              cmdBlitImage),
+       VK_NULL_FUNC_ENTRY(vkCmdCopyBufferToImage,                                              cmdCopyBufferToImage),
+       VK_NULL_FUNC_ENTRY(vkCmdCopyImageToBuffer,                                              cmdCopyImageToBuffer),
+       VK_NULL_FUNC_ENTRY(vkCmdUpdateBuffer,                                                   cmdUpdateBuffer),
+       VK_NULL_FUNC_ENTRY(vkCmdFillBuffer,                                                             cmdFillBuffer),
+       VK_NULL_FUNC_ENTRY(vkCmdClearColorImage,                                                cmdClearColorImage),
+       VK_NULL_FUNC_ENTRY(vkCmdClearDepthStencilImage,                                 cmdClearDepthStencilImage),
+       VK_NULL_FUNC_ENTRY(vkCmdClearAttachments,                                               cmdClearAttachments),
+       VK_NULL_FUNC_ENTRY(vkCmdResolveImage,                                                   cmdResolveImage),
+       VK_NULL_FUNC_ENTRY(vkCmdSetEvent,                                                               cmdSetEvent),
+       VK_NULL_FUNC_ENTRY(vkCmdResetEvent,                                                             cmdResetEvent),
+       VK_NULL_FUNC_ENTRY(vkCmdWaitEvents,                                                             cmdWaitEvents),
+       VK_NULL_FUNC_ENTRY(vkCmdPipelineBarrier,                                                cmdPipelineBarrier),
+       VK_NULL_FUNC_ENTRY(vkCmdBeginQuery,                                                             cmdBeginQuery),
+       VK_NULL_FUNC_ENTRY(vkCmdEndQuery,                                                               cmdEndQuery),
+       VK_NULL_FUNC_ENTRY(vkCmdResetQueryPool,                                                 cmdResetQueryPool),
+       VK_NULL_FUNC_ENTRY(vkCmdWriteTimestamp,                                                 cmdWriteTimestamp),
+       VK_NULL_FUNC_ENTRY(vkCmdCopyQueryPoolResults,                                   cmdCopyQueryPoolResults),
+       VK_NULL_FUNC_ENTRY(vkCmdPushConstants,                                                  cmdPushConstants),
+       VK_NULL_FUNC_ENTRY(vkCmdBeginRenderPass,                                                cmdBeginRenderPass),
+       VK_NULL_FUNC_ENTRY(vkCmdNextSubpass,                                                    cmdNextSubpass),
+       VK_NULL_FUNC_ENTRY(vkCmdEndRenderPass,                                                  cmdEndRenderPass),
+       VK_NULL_FUNC_ENTRY(vkCmdExecuteCommands,                                                cmdExecuteCommands),
+       VK_NULL_FUNC_ENTRY(vkGetCommandPoolMemoryConsumption,                   getCommandPoolMemoryConsumption),
+       VK_NULL_FUNC_ENTRY(vkGetFaultData,                                                              getFaultData),
+       VK_NULL_FUNC_ENTRY(vkBindBufferMemory2,                                                 bindBufferMemory2),
+       VK_NULL_FUNC_ENTRY(vkBindImageMemory2,                                                  bindImageMemory2),
+       VK_NULL_FUNC_ENTRY(vkGetDeviceGroupPeerMemoryFeatures,                  getDeviceGroupPeerMemoryFeatures),
+       VK_NULL_FUNC_ENTRY(vkCmdSetDeviceMask,                                                  cmdSetDeviceMask),
+       VK_NULL_FUNC_ENTRY(vkCmdDispatchBase,                                                   cmdDispatchBase),
+       VK_NULL_FUNC_ENTRY(vkGetImageMemoryRequirements2,                               getImageMemoryRequirements2),
+       VK_NULL_FUNC_ENTRY(vkGetBufferMemoryRequirements2,                              getBufferMemoryRequirements2),
+       VK_NULL_FUNC_ENTRY(vkGetImageSparseMemoryRequirements2,                 getImageSparseMemoryRequirements2),
+       VK_NULL_FUNC_ENTRY(vkGetDeviceQueue2,                                                   getDeviceQueue2),
+       VK_NULL_FUNC_ENTRY(vkCreateSamplerYcbcrConversion,                              createSamplerYcbcrConversion),
+       VK_NULL_FUNC_ENTRY(vkDestroySamplerYcbcrConversion,                             destroySamplerYcbcrConversion),
+       VK_NULL_FUNC_ENTRY(vkGetDescriptorSetLayoutSupport,                             getDescriptorSetLayoutSupport),
+       VK_NULL_FUNC_ENTRY(vkCmdDrawIndirectCount,                                              cmdDrawIndirectCount),
+       VK_NULL_FUNC_ENTRY(vkCmdDrawIndexedIndirectCount,                               cmdDrawIndexedIndirectCount),
+       VK_NULL_FUNC_ENTRY(vkCreateRenderPass2,                                                 createRenderPass2),
+       VK_NULL_FUNC_ENTRY(vkCmdBeginRenderPass2,                                               cmdBeginRenderPass2),
+       VK_NULL_FUNC_ENTRY(vkCmdNextSubpass2,                                                   cmdNextSubpass2),
+       VK_NULL_FUNC_ENTRY(vkCmdEndRenderPass2,                                                 cmdEndRenderPass2),
+       VK_NULL_FUNC_ENTRY(vkResetQueryPool,                                                    resetQueryPool),
+       VK_NULL_FUNC_ENTRY(vkGetSemaphoreCounterValue,                                  getSemaphoreCounterValue),
+       VK_NULL_FUNC_ENTRY(vkWaitSemaphores,                                                    waitSemaphores),
+       VK_NULL_FUNC_ENTRY(vkSignalSemaphore,                                                   signalSemaphore),
+       VK_NULL_FUNC_ENTRY(vkGetBufferDeviceAddress,                                    getBufferDeviceAddress),
+       VK_NULL_FUNC_ENTRY(vkGetBufferOpaqueCaptureAddress,                             getBufferOpaqueCaptureAddress),
+       VK_NULL_FUNC_ENTRY(vkGetDeviceMemoryOpaqueCaptureAddress,               getDeviceMemoryOpaqueCaptureAddress),
+       VK_NULL_FUNC_ENTRY(vkCreateSwapchainKHR,                                                createSwapchainKHR),
+       VK_NULL_FUNC_ENTRY(vkGetSwapchainImagesKHR,                                             getSwapchainImagesKHR),
+       VK_NULL_FUNC_ENTRY(vkAcquireNextImageKHR,                                               acquireNextImageKHR),
+       VK_NULL_FUNC_ENTRY(vkQueuePresentKHR,                                                   queuePresentKHR),
+       VK_NULL_FUNC_ENTRY(vkGetDeviceGroupPresentCapabilitiesKHR,              getDeviceGroupPresentCapabilitiesKHR),
+       VK_NULL_FUNC_ENTRY(vkGetDeviceGroupSurfacePresentModesKHR,              getDeviceGroupSurfacePresentModesKHR),
+       VK_NULL_FUNC_ENTRY(vkAcquireNextImage2KHR,                                              acquireNextImage2KHR),
+       VK_NULL_FUNC_ENTRY(vkCreateSharedSwapchainsKHR,                                 createSharedSwapchainsKHR),
+       VK_NULL_FUNC_ENTRY(vkGetMemoryFdKHR,                                                    getMemoryFdKHR),
+       VK_NULL_FUNC_ENTRY(vkGetMemoryFdPropertiesKHR,                                  getMemoryFdPropertiesKHR),
+       VK_NULL_FUNC_ENTRY(vkImportSemaphoreFdKHR,                                              importSemaphoreFdKHR),
+       VK_NULL_FUNC_ENTRY(vkGetSemaphoreFdKHR,                                                 getSemaphoreFdKHR),
+       VK_NULL_FUNC_ENTRY(vkGetSwapchainStatusKHR,                                             getSwapchainStatusKHR),
+       VK_NULL_FUNC_ENTRY(vkImportFenceFdKHR,                                                  importFenceFdKHR),
+       VK_NULL_FUNC_ENTRY(vkGetFenceFdKHR,                                                             getFenceFdKHR),
+       VK_NULL_FUNC_ENTRY(vkCmdSetFragmentShadingRateKHR,                              cmdSetFragmentShadingRateKHR),
+       VK_NULL_FUNC_ENTRY(vkGetFaultDataKHR,                                                   getFaultDataKHR),
+       VK_NULL_FUNC_ENTRY(vkCmdRefreshObjectsKHR,                                              cmdRefreshObjectsKHR),
+       VK_NULL_FUNC_ENTRY(vkCmdCopyBuffer2KHR,                                                 cmdCopyBuffer2KHR),
+       VK_NULL_FUNC_ENTRY(vkCmdCopyImage2KHR,                                                  cmdCopyImage2KHR),
+       VK_NULL_FUNC_ENTRY(vkCmdCopyBufferToImage2KHR,                                  cmdCopyBufferToImage2KHR),
+       VK_NULL_FUNC_ENTRY(vkCmdCopyImageToBuffer2KHR,                                  cmdCopyImageToBuffer2KHR),
+       VK_NULL_FUNC_ENTRY(vkCmdBlitImage2KHR,                                                  cmdBlitImage2KHR),
+       VK_NULL_FUNC_ENTRY(vkCmdResolveImage2KHR,                                               cmdResolveImage2KHR),
+       VK_NULL_FUNC_ENTRY(vkDisplayPowerControlEXT,                                    displayPowerControlEXT),
+       VK_NULL_FUNC_ENTRY(vkRegisterDeviceEventEXT,                                    registerDeviceEventEXT),
+       VK_NULL_FUNC_ENTRY(vkRegisterDisplayEventEXT,                                   registerDisplayEventEXT),
+       VK_NULL_FUNC_ENTRY(vkGetSwapchainCounterEXT,                                    getSwapchainCounterEXT),
+       VK_NULL_FUNC_ENTRY(vkCmdSetDiscardRectangleEXT,                                 cmdSetDiscardRectangleEXT),
+       VK_NULL_FUNC_ENTRY(vkSetHdrMetadataEXT,                                                 setHdrMetadataEXT),
+       VK_NULL_FUNC_ENTRY(vkCmdSetSampleLocationsEXT,                                  cmdSetSampleLocationsEXT),
+       VK_NULL_FUNC_ENTRY(vkGetImageDrmFormatModifierPropertiesEXT,    getImageDrmFormatModifierPropertiesEXT),
+       VK_NULL_FUNC_ENTRY(vkGetMemoryHostPointerPropertiesEXT,                 getMemoryHostPointerPropertiesEXT),
+       VK_NULL_FUNC_ENTRY(vkGetCalibratedTimestampsEXT,                                getCalibratedTimestampsEXT),
+       VK_NULL_FUNC_ENTRY(vkCmdSetLineStippleEXT,                                              cmdSetLineStippleEXT),
+       VK_NULL_FUNC_ENTRY(vkCmdSetCullModeEXT,                                                 cmdSetCullModeEXT),
+       VK_NULL_FUNC_ENTRY(vkCmdSetFrontFaceEXT,                                                cmdSetFrontFaceEXT),
+       VK_NULL_FUNC_ENTRY(vkCmdSetPrimitiveTopologyEXT,                                cmdSetPrimitiveTopologyEXT),
+       VK_NULL_FUNC_ENTRY(vkCmdSetViewportWithCountEXT,                                cmdSetViewportWithCountEXT),
+       VK_NULL_FUNC_ENTRY(vkCmdSetScissorWithCountEXT,                                 cmdSetScissorWithCountEXT),
+       VK_NULL_FUNC_ENTRY(vkCmdBindVertexBuffers2EXT,                                  cmdBindVertexBuffers2EXT),
+       VK_NULL_FUNC_ENTRY(vkCmdSetDepthTestEnableEXT,                                  cmdSetDepthTestEnableEXT),
+       VK_NULL_FUNC_ENTRY(vkCmdSetDepthWriteEnableEXT,                                 cmdSetDepthWriteEnableEXT),
+       VK_NULL_FUNC_ENTRY(vkCmdSetDepthCompareOpEXT,                                   cmdSetDepthCompareOpEXT),
+       VK_NULL_FUNC_ENTRY(vkCmdSetDepthBoundsTestEnableEXT,                    cmdSetDepthBoundsTestEnableEXT),
+       VK_NULL_FUNC_ENTRY(vkCmdSetStencilTestEnableEXT,                                cmdSetStencilTestEnableEXT),
+       VK_NULL_FUNC_ENTRY(vkCmdSetStencilOpEXT,                                                cmdSetStencilOpEXT),
+};
+
diff --git a/external/vulkancts/framework/vulkan/generated/vulkansc/vkObjTypeImpl.inl b/external/vulkancts/framework/vulkan/generated/vulkansc/vkObjTypeImpl.inl
new file mode 100644 (file)
index 0000000..3e1aca4
--- /dev/null
@@ -0,0 +1,37 @@
+/* WARNING: This is auto-generated file. Do not modify, since changes will
+ * be lost! Modify the generating script instead.
+ */
+namespace vk
+{
+template<typename T> VkObjectType getObjectType        (void);
+template<> inline VkObjectType getObjectType<VkBuffer>                                 (void) { return VK_OBJECT_TYPE_BUFFER;                                          }
+template<> inline VkObjectType getObjectType<VkImage>                                  (void) { return VK_OBJECT_TYPE_IMAGE;                                           }
+template<> inline VkObjectType getObjectType<VkInstance>                               (void) { return VK_OBJECT_TYPE_INSTANCE;                                        }
+template<> inline VkObjectType getObjectType<VkPhysicalDevice>                 (void) { return VK_OBJECT_TYPE_PHYSICAL_DEVICE;                         }
+template<> inline VkObjectType getObjectType<VkDevice>                                 (void) { return VK_OBJECT_TYPE_DEVICE;                                          }
+template<> inline VkObjectType getObjectType<VkQueue>                                  (void) { return VK_OBJECT_TYPE_QUEUE;                                           }
+template<> inline VkObjectType getObjectType<VkSemaphore>                              (void) { return VK_OBJECT_TYPE_SEMAPHORE;                                       }
+template<> inline VkObjectType getObjectType<VkCommandBuffer>                  (void) { return VK_OBJECT_TYPE_COMMAND_BUFFER;                          }
+template<> inline VkObjectType getObjectType<VkFence>                                  (void) { return VK_OBJECT_TYPE_FENCE;                                           }
+template<> inline VkObjectType getObjectType<VkDeviceMemory>                   (void) { return VK_OBJECT_TYPE_DEVICE_MEMORY;                           }
+template<> inline VkObjectType getObjectType<VkEvent>                                  (void) { return VK_OBJECT_TYPE_EVENT;                                           }
+template<> inline VkObjectType getObjectType<VkQueryPool>                              (void) { return VK_OBJECT_TYPE_QUERY_POOL;                                      }
+template<> inline VkObjectType getObjectType<VkBufferView>                             (void) { return VK_OBJECT_TYPE_BUFFER_VIEW;                                     }
+template<> inline VkObjectType getObjectType<VkImageView>                              (void) { return VK_OBJECT_TYPE_IMAGE_VIEW;                                      }
+template<> inline VkObjectType getObjectType<VkShaderModule>                   (void) { return VK_OBJECT_TYPE_SHADER_MODULE;                           }
+template<> inline VkObjectType getObjectType<VkPipelineCache>                  (void) { return VK_OBJECT_TYPE_PIPELINE_CACHE;                          }
+template<> inline VkObjectType getObjectType<VkPipelineLayout>                 (void) { return VK_OBJECT_TYPE_PIPELINE_LAYOUT;                         }
+template<> inline VkObjectType getObjectType<VkPipeline>                               (void) { return VK_OBJECT_TYPE_PIPELINE;                                        }
+template<> inline VkObjectType getObjectType<VkRenderPass>                             (void) { return VK_OBJECT_TYPE_RENDER_PASS;                                     }
+template<> inline VkObjectType getObjectType<VkDescriptorSetLayout>    (void) { return VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT;           }
+template<> inline VkObjectType getObjectType<VkSampler>                                (void) { return VK_OBJECT_TYPE_SAMPLER;                                         }
+template<> inline VkObjectType getObjectType<VkDescriptorSet>                  (void) { return VK_OBJECT_TYPE_DESCRIPTOR_SET;                          }
+template<> inline VkObjectType getObjectType<VkDescriptorPool>                 (void) { return VK_OBJECT_TYPE_DESCRIPTOR_POOL;                         }
+template<> inline VkObjectType getObjectType<VkFramebuffer>                    (void) { return VK_OBJECT_TYPE_FRAMEBUFFER;                                     }
+template<> inline VkObjectType getObjectType<VkCommandPool>                    (void) { return VK_OBJECT_TYPE_COMMAND_POOL;                            }
+template<> inline VkObjectType getObjectType<VkSamplerYcbcrConversion> (void) { return VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION;        }
+template<> inline VkObjectType getObjectType<VkSurfaceKHR>                             (void) { return VK_OBJECT_TYPE_SURFACE_KHR;                                     }
+template<> inline VkObjectType getObjectType<VkSwapchainKHR>                   (void) { return VK_OBJECT_TYPE_SWAPCHAIN_KHR;                           }
+template<> inline VkObjectType getObjectType<VkDisplayKHR>                             (void) { return VK_OBJECT_TYPE_DISPLAY_KHR;                                     }
+template<> inline VkObjectType getObjectType<VkDisplayModeKHR>                 (void) { return VK_OBJECT_TYPE_DISPLAY_MODE_KHR;                        }
+}
diff --git a/external/vulkancts/framework/vulkan/generated/vulkansc/vkPlatformDriverImpl.inl b/external/vulkancts/framework/vulkan/generated/vulkansc/vkPlatformDriverImpl.inl
new file mode 100644 (file)
index 0000000..07880fe
--- /dev/null
@@ -0,0 +1,32 @@
+/* WARNING: This is auto-generated file. Do not modify, since changes will
+ * be lost! Modify the generating script instead.
+ */
+
+VkResult PlatformDriver::createInstance (const VkInstanceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkInstance* pInstance) const
+{
+       return m_vk.createInstance(pCreateInfo, pAllocator, pInstance);
+}
+
+PFN_vkVoidFunction PlatformDriver::getInstanceProcAddr (VkInstance instance, const char* pName) const
+{
+       return m_vk.getInstanceProcAddr(instance, pName);
+}
+
+VkResult PlatformDriver::enumerateInstanceExtensionProperties (const char* pLayerName, deUint32* pPropertyCount, VkExtensionProperties* pProperties) const
+{
+       return m_vk.enumerateInstanceExtensionProperties(pLayerName, pPropertyCount, pProperties);
+}
+
+VkResult PlatformDriver::enumerateInstanceLayerProperties (deUint32* pPropertyCount, VkLayerProperties* pProperties) const
+{
+       return m_vk.enumerateInstanceLayerProperties(pPropertyCount, pProperties);
+}
+
+VkResult PlatformDriver::enumerateInstanceVersion (deUint32* pApiVersion) const
+{
+       if (m_vk.enumerateInstanceVersion)
+               return m_vk.enumerateInstanceVersion(pApiVersion);
+
+       *pApiVersion = VK_API_VERSION_1_0;
+       return VK_SUCCESS;
+}
diff --git a/external/vulkancts/framework/vulkan/generated/vulkansc/vkPlatformFunctionPointers.inl b/external/vulkancts/framework/vulkan/generated/vulkansc/vkPlatformFunctionPointers.inl
new file mode 100644 (file)
index 0000000..62c6b14
--- /dev/null
@@ -0,0 +1,8 @@
+/* WARNING: This is auto-generated file. Do not modify, since changes will
+ * be lost! Modify the generating script instead.
+ */
+CreateInstanceFunc                                                     createInstance;
+GetInstanceProcAddrFunc                                                getInstanceProcAddr;
+EnumerateInstanceExtensionPropertiesFunc       enumerateInstanceExtensionProperties;
+EnumerateInstanceLayerPropertiesFunc           enumerateInstanceLayerProperties;
+EnumerateInstanceVersionFunc                           enumerateInstanceVersion;
diff --git a/external/vulkancts/framework/vulkan/generated/vulkansc/vkRefUtil.inl b/external/vulkancts/framework/vulkan/generated/vulkansc/vkRefUtil.inl
new file mode 100644 (file)
index 0000000..b977990
--- /dev/null
@@ -0,0 +1,28 @@
+/* WARNING: This is auto-generated file. Do not modify, since changes will
+ * be lost! Modify the generating script instead.
+ */
+Move<VkInstance>                               createInstance                                  (const PlatformInterface& vk, const VkInstanceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator = DE_NULL);
+Move<VkDevice>                                 createDevice                                    (const PlatformInterface& vkp, VkInstance instance, const InstanceInterface& vk, VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator = DE_NULL);
+Move<VkDeviceMemory>                   allocateMemory                                  (const DeviceInterface& vk, VkDevice device, const VkMemoryAllocateInfo* pAllocateInfo, const VkAllocationCallbacks* pAllocator = DE_NULL);
+Move<VkFence>                                  createFence                                             (const DeviceInterface& vk, VkDevice device, const VkFenceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator = DE_NULL);
+Move<VkSemaphore>                              createSemaphore                                 (const DeviceInterface& vk, VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator = DE_NULL);
+Move<VkEvent>                                  createEvent                                             (const DeviceInterface& vk, VkDevice device, const VkEventCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator = DE_NULL);
+Move<VkQueryPool>                              createQueryPool                                 (const DeviceInterface& vk, VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator = DE_NULL);
+Move<VkBuffer>                                 createBuffer                                    (const DeviceInterface& vk, VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator = DE_NULL);
+Move<VkBufferView>                             createBufferView                                (const DeviceInterface& vk, VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator = DE_NULL);
+Move<VkImage>                                  createImage                                             (const DeviceInterface& vk, VkDevice device, const VkImageCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator = DE_NULL);
+Move<VkImageView>                              createImageView                                 (const DeviceInterface& vk, VkDevice device, const VkImageViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator = DE_NULL);
+Move<VkPipelineCache>                  createPipelineCache                             (const DeviceInterface& vk, VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator = DE_NULL);
+Move<VkPipelineLayout>                 createPipelineLayout                    (const DeviceInterface& vk, VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator = DE_NULL);
+Move<VkSampler>                                        createSampler                                   (const DeviceInterface& vk, VkDevice device, const VkSamplerCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator = DE_NULL);
+Move<VkDescriptorSetLayout>            createDescriptorSetLayout               (const DeviceInterface& vk, VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator = DE_NULL);
+Move<VkDescriptorPool>                 createDescriptorPool                    (const DeviceInterface& vk, VkDevice device, const VkDescriptorPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator = DE_NULL);
+Move<VkFramebuffer>                            createFramebuffer                               (const DeviceInterface& vk, VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator = DE_NULL);
+Move<VkRenderPass>                             createRenderPass                                (const DeviceInterface& vk, VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator = DE_NULL);
+Move<VkCommandPool>                            createCommandPool                               (const DeviceInterface& vk, VkDevice device, const VkCommandPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator = DE_NULL);
+Move<VkSamplerYcbcrConversion> createSamplerYcbcrConversion    (const DeviceInterface& vk, VkDevice device, const VkSamplerYcbcrConversionCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator = DE_NULL);
+Move<VkRenderPass>                             createRenderPass2                               (const DeviceInterface& vk, VkDevice device, const VkRenderPassCreateInfo2* pCreateInfo, const VkAllocationCallbacks* pAllocator = DE_NULL);
+Move<VkSwapchainKHR>                   createSwapchainKHR                              (const DeviceInterface& vk, VkDevice device, const VkSwapchainCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator = DE_NULL);
+Move<VkSurfaceKHR>                             createDisplayPlaneSurfaceKHR    (const InstanceInterface& vk, VkInstance instance, const VkDisplaySurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator = DE_NULL);
+Move<VkSwapchainKHR>                   createSharedSwapchainsKHR               (const DeviceInterface& vk, VkDevice device, deUint32 swapchainCount, const VkSwapchainCreateInfoKHR* pCreateInfos, const VkAllocationCallbacks* pAllocator = DE_NULL);
+Move<VkSurfaceKHR>                             createHeadlessSurfaceEXT                (const InstanceInterface& vk, VkInstance instance, const VkHeadlessSurfaceCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator = DE_NULL);
diff --git a/external/vulkancts/framework/vulkan/generated/vulkansc/vkRefUtilImpl.inl b/external/vulkancts/framework/vulkan/generated/vulkansc/vkRefUtilImpl.inl
new file mode 100644 (file)
index 0000000..1bf0225
--- /dev/null
@@ -0,0 +1,273 @@
+/* WARNING: This is auto-generated file. Do not modify, since changes will
+ * be lost! Modify the generating script instead.
+ */
+namespace refdetails
+{
+
+template<>
+void Deleter<VkFence>::operator() (VkFence obj) const
+{
+       m_deviceIface->destroyFence(m_device, obj, m_allocator);
+}
+
+template<>
+void Deleter<VkSemaphore>::operator() (VkSemaphore obj) const
+{
+       m_deviceIface->destroySemaphore(m_device, obj, m_allocator);
+}
+
+template<>
+void Deleter<VkEvent>::operator() (VkEvent obj) const
+{
+       m_deviceIface->destroyEvent(m_device, obj, m_allocator);
+}
+
+template<>
+void Deleter<VkBuffer>::operator() (VkBuffer obj) const
+{
+       m_deviceIface->destroyBuffer(m_device, obj, m_allocator);
+}
+
+template<>
+void Deleter<VkBufferView>::operator() (VkBufferView obj) const
+{
+       m_deviceIface->destroyBufferView(m_device, obj, m_allocator);
+}
+
+template<>
+void Deleter<VkImage>::operator() (VkImage obj) const
+{
+       m_deviceIface->destroyImage(m_device, obj, m_allocator);
+}
+
+template<>
+void Deleter<VkImageView>::operator() (VkImageView obj) const
+{
+       m_deviceIface->destroyImageView(m_device, obj, m_allocator);
+}
+
+template<>
+void Deleter<VkPipelineCache>::operator() (VkPipelineCache obj) const
+{
+       m_deviceIface->destroyPipelineCache(m_device, obj, m_allocator);
+}
+
+template<>
+void Deleter<VkPipeline>::operator() (VkPipeline obj) const
+{
+       m_deviceIface->destroyPipeline(m_device, obj, m_allocator);
+}
+
+template<>
+void Deleter<VkPipelineLayout>::operator() (VkPipelineLayout obj) const
+{
+       m_deviceIface->destroyPipelineLayout(m_device, obj, m_allocator);
+}
+
+template<>
+void Deleter<VkSampler>::operator() (VkSampler obj) const
+{
+       m_deviceIface->destroySampler(m_device, obj, m_allocator);
+}
+
+template<>
+void Deleter<VkDescriptorSetLayout>::operator() (VkDescriptorSetLayout obj) const
+{
+       m_deviceIface->destroyDescriptorSetLayout(m_device, obj, m_allocator);
+}
+
+template<>
+void Deleter<VkFramebuffer>::operator() (VkFramebuffer obj) const
+{
+       m_deviceIface->destroyFramebuffer(m_device, obj, m_allocator);
+}
+
+template<>
+void Deleter<VkRenderPass>::operator() (VkRenderPass obj) const
+{
+       m_deviceIface->destroyRenderPass(m_device, obj, m_allocator);
+}
+
+template<>
+void Deleter<VkSamplerYcbcrConversion>::operator() (VkSamplerYcbcrConversion obj) const
+{
+       m_deviceIface->destroySamplerYcbcrConversion(m_device, obj, m_allocator);
+}
+
+} // refdetails
+
+Move<VkInstance> createInstance (const PlatformInterface& vk, const VkInstanceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator)
+{
+       VkInstance object = 0;
+       VK_CHECK(vk.createInstance(pCreateInfo, pAllocator, &object));
+       return Move<VkInstance>(check<VkInstance>(object), Deleter<VkInstance>(vk, object, pAllocator));
+}
+
+Move<VkDevice> createDevice (const PlatformInterface& vkp, VkInstance instance, const InstanceInterface& vk, VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator)
+{
+       VkDevice object = 0;
+       VK_CHECK(vk.createDevice(physicalDevice, pCreateInfo, pAllocator, &object));
+       return Move<VkDevice>(check<VkDevice>(object), Deleter<VkDevice>(vkp, instance, object, pAllocator));
+}
+
+Move<VkDeviceMemory> allocateMemory (const DeviceInterface& vk, VkDevice device, const VkMemoryAllocateInfo* pAllocateInfo, const VkAllocationCallbacks* pAllocator)
+{
+       VkDeviceMemory object = 0;
+       VK_CHECK(vk.allocateMemory(device, pAllocateInfo, pAllocator, &object));
+       return Move<VkDeviceMemory>(check<VkDeviceMemory>(object), Deleter<VkDeviceMemory>(vk, device, pAllocator));
+}
+
+Move<VkFence> createFence (const DeviceInterface& vk, VkDevice device, const VkFenceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator)
+{
+       VkFence object = 0;
+       VK_CHECK(vk.createFence(device, pCreateInfo, pAllocator, &object));
+       return Move<VkFence>(check<VkFence>(object), Deleter<VkFence>(vk, device, pAllocator));
+}
+
+Move<VkSemaphore> createSemaphore (const DeviceInterface& vk, VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator)
+{
+       VkSemaphore object = 0;
+       VK_CHECK(vk.createSemaphore(device, pCreateInfo, pAllocator, &object));
+       return Move<VkSemaphore>(check<VkSemaphore>(object), Deleter<VkSemaphore>(vk, device, pAllocator));
+}
+
+Move<VkEvent> createEvent (const DeviceInterface& vk, VkDevice device, const VkEventCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator)
+{
+       VkEvent object = 0;
+       VK_CHECK(vk.createEvent(device, pCreateInfo, pAllocator, &object));
+       return Move<VkEvent>(check<VkEvent>(object), Deleter<VkEvent>(vk, device, pAllocator));
+}
+
+Move<VkQueryPool> createQueryPool (const DeviceInterface& vk, VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator)
+{
+       VkQueryPool object = 0;
+       VK_CHECK(vk.createQueryPool(device, pCreateInfo, pAllocator, &object));
+       return Move<VkQueryPool>(check<VkQueryPool>(object), Deleter<VkQueryPool>(vk, device, pAllocator));
+}
+
+Move<VkBuffer> createBuffer (const DeviceInterface& vk, VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator)
+{
+       VkBuffer object = 0;
+       VK_CHECK(vk.createBuffer(device, pCreateInfo, pAllocator, &object));
+       return Move<VkBuffer>(check<VkBuffer>(object), Deleter<VkBuffer>(vk, device, pAllocator));
+}
+
+Move<VkBufferView> createBufferView (const DeviceInterface& vk, VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator)
+{
+       VkBufferView object = 0;
+       VK_CHECK(vk.createBufferView(device, pCreateInfo, pAllocator, &object));
+       return Move<VkBufferView>(check<VkBufferView>(object), Deleter<VkBufferView>(vk, device, pAllocator));
+}
+
+Move<VkImage> createImage (const DeviceInterface& vk, VkDevice device, const VkImageCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator)
+{
+       VkImage object = 0;
+       VK_CHECK(vk.createImage(device, pCreateInfo, pAllocator, &object));
+       return Move<VkImage>(check<VkImage>(object), Deleter<VkImage>(vk, device, pAllocator));
+}
+
+Move<VkImageView> createImageView (const DeviceInterface& vk, VkDevice device, const VkImageViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator)
+{
+       VkImageView object = 0;
+       VK_CHECK(vk.createImageView(device, pCreateInfo, pAllocator, &object));
+       return Move<VkImageView>(check<VkImageView>(object), Deleter<VkImageView>(vk, device, pAllocator));
+}
+
+Move<VkPipelineCache> createPipelineCache (const DeviceInterface& vk, VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator)
+{
+       VkPipelineCache object = 0;
+       VK_CHECK(vk.createPipelineCache(device, pCreateInfo, pAllocator, &object));
+       return Move<VkPipelineCache>(check<VkPipelineCache>(object), Deleter<VkPipelineCache>(vk, device, pAllocator));
+}
+
+Move<VkPipelineLayout> createPipelineLayout (const DeviceInterface& vk, VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator)
+{
+       VkPipelineLayout object = 0;
+       VK_CHECK(vk.createPipelineLayout(device, pCreateInfo, pAllocator, &object));
+       return Move<VkPipelineLayout>(check<VkPipelineLayout>(object), Deleter<VkPipelineLayout>(vk, device, pAllocator));
+}
+
+Move<VkSampler> createSampler (const DeviceInterface& vk, VkDevice device, const VkSamplerCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator)
+{
+       VkSampler object = 0;
+       VK_CHECK(vk.createSampler(device, pCreateInfo, pAllocator, &object));
+       return Move<VkSampler>(check<VkSampler>(object), Deleter<VkSampler>(vk, device, pAllocator));
+}
+
+Move<VkDescriptorSetLayout> createDescriptorSetLayout (const DeviceInterface& vk, VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator)
+{
+       VkDescriptorSetLayout object = 0;
+       VK_CHECK(vk.createDescriptorSetLayout(device, pCreateInfo, pAllocator, &object));
+       return Move<VkDescriptorSetLayout>(check<VkDescriptorSetLayout>(object), Deleter<VkDescriptorSetLayout>(vk, device, pAllocator));
+}
+
+Move<VkDescriptorPool> createDescriptorPool (const DeviceInterface& vk, VkDevice device, const VkDescriptorPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator)
+{
+       VkDescriptorPool object = 0;
+       VK_CHECK(vk.createDescriptorPool(device, pCreateInfo, pAllocator, &object));
+       return Move<VkDescriptorPool>(check<VkDescriptorPool>(object), Deleter<VkDescriptorPool>(vk, device, pAllocator));
+}
+
+Move<VkFramebuffer> createFramebuffer (const DeviceInterface& vk, VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator)
+{
+       VkFramebuffer object = 0;
+       VK_CHECK(vk.createFramebuffer(device, pCreateInfo, pAllocator, &object));
+       return Move<VkFramebuffer>(check<VkFramebuffer>(object), Deleter<VkFramebuffer>(vk, device, pAllocator));
+}
+
+Move<VkRenderPass> createRenderPass (const DeviceInterface& vk, VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator)
+{
+       VkRenderPass object = 0;
+       VK_CHECK(vk.createRenderPass(device, pCreateInfo, pAllocator, &object));
+       return Move<VkRenderPass>(check<VkRenderPass>(object), Deleter<VkRenderPass>(vk, device, pAllocator));
+}
+
+Move<VkCommandPool> createCommandPool (const DeviceInterface& vk, VkDevice device, const VkCommandPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator)
+{
+       VkCommandPool object = 0;
+       VK_CHECK(vk.createCommandPool(device, pCreateInfo, pAllocator, &object));
+       return Move<VkCommandPool>(check<VkCommandPool>(object), Deleter<VkCommandPool>(vk, device, pAllocator));
+}
+
+Move<VkSamplerYcbcrConversion> createSamplerYcbcrConversion (const DeviceInterface& vk, VkDevice device, const VkSamplerYcbcrConversionCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator)
+{
+       VkSamplerYcbcrConversion object = 0;
+       VK_CHECK(vk.createSamplerYcbcrConversion(device, pCreateInfo, pAllocator, &object));
+       return Move<VkSamplerYcbcrConversion>(check<VkSamplerYcbcrConversion>(object), Deleter<VkSamplerYcbcrConversion>(vk, device, pAllocator));
+}
+
+Move<VkRenderPass> createRenderPass2 (const DeviceInterface& vk, VkDevice device, const VkRenderPassCreateInfo2* pCreateInfo, const VkAllocationCallbacks* pAllocator)
+{
+       VkRenderPass object = 0;
+       VK_CHECK(vk.createRenderPass2(device, pCreateInfo, pAllocator, &object));
+       return Move<VkRenderPass>(check<VkRenderPass>(object), Deleter<VkRenderPass>(vk, device, pAllocator));
+}
+
+Move<VkSwapchainKHR> createSwapchainKHR (const DeviceInterface& vk, VkDevice device, const VkSwapchainCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator)
+{
+       VkSwapchainKHR object = 0;
+       VK_CHECK(vk.createSwapchainKHR(device, pCreateInfo, pAllocator, &object));
+       return Move<VkSwapchainKHR>(check<VkSwapchainKHR>(object), Deleter<VkSwapchainKHR>(vk, device, pAllocator));
+}
+
+Move<VkSurfaceKHR> createDisplayPlaneSurfaceKHR (const InstanceInterface& vk, VkInstance instance, const VkDisplaySurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator)
+{
+       VkSurfaceKHR object = 0;
+       VK_CHECK(vk.createDisplayPlaneSurfaceKHR(instance, pCreateInfo, pAllocator, &object));
+       return Move<VkSurfaceKHR>(check<VkSurfaceKHR>(object), Deleter<VkSurfaceKHR>(vk, instance, pAllocator));
+}
+
+Move<VkSwapchainKHR> createSharedSwapchainsKHR (const DeviceInterface& vk, VkDevice device, deUint32 swapchainCount, const VkSwapchainCreateInfoKHR* pCreateInfos, const VkAllocationCallbacks* pAllocator)
+{
+       VkSwapchainKHR object = 0;
+       VK_CHECK(vk.createSharedSwapchainsKHR(device, swapchainCount, pCreateInfos, pAllocator, &object));
+       return Move<VkSwapchainKHR>(check<VkSwapchainKHR>(object), Deleter<VkSwapchainKHR>(vk, device, pAllocator));
+}
+
+Move<VkSurfaceKHR> createHeadlessSurfaceEXT (const InstanceInterface& vk, VkInstance instance, const VkHeadlessSurfaceCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator)
+{
+       VkSurfaceKHR object = 0;
+       VK_CHECK(vk.createHeadlessSurfaceEXT(instance, pCreateInfo, pAllocator, &object));
+       return Move<VkSurfaceKHR>(check<VkSurfaceKHR>(object), Deleter<VkSurfaceKHR>(vk, instance, pAllocator));
+}
+
diff --git a/external/vulkancts/framework/vulkan/generated/vulkansc/vkStrUtil.inl b/external/vulkancts/framework/vulkan/generated/vulkansc/vkStrUtil.inl
new file mode 100644 (file)
index 0000000..b47b094
--- /dev/null
@@ -0,0 +1,640 @@
+/* WARNING: This is auto-generated file. Do not modify, since changes will
+ * be lost! Modify the generating script instead.
+ */
+const char*    getResultName                                                   (VkResult value);
+const char*    getStructureTypeName                                    (VkStructureType value);
+const char*    getImageLayoutName                                              (VkImageLayout value);
+const char*    getObjectTypeName                                               (VkObjectType value);
+const char*    getVendorIdName                                                 (VkVendorId value);
+const char*    getPipelineCacheHeaderVersionName               (VkPipelineCacheHeaderVersion value);
+const char*    getSystemAllocationScopeName                    (VkSystemAllocationScope value);
+const char*    getInternalAllocationTypeName                   (VkInternalAllocationType value);
+const char*    getFormatName                                                   (VkFormat value);
+const char*    getImageTilingName                                              (VkImageTiling value);
+const char*    getImageTypeName                                                (VkImageType value);
+const char*    getPhysicalDeviceTypeName                               (VkPhysicalDeviceType value);
+const char*    getQueryTypeName                                                (VkQueryType value);
+const char*    getSharingModeName                                              (VkSharingMode value);
+const char*    getComponentSwizzleName                                 (VkComponentSwizzle value);
+const char*    getImageViewTypeName                                    (VkImageViewType value);
+const char*    getBlendFactorName                                              (VkBlendFactor value);
+const char*    getBlendOpName                                                  (VkBlendOp value);
+const char*    getCompareOpName                                                (VkCompareOp value);
+const char*    getDynamicStateName                                             (VkDynamicState value);
+const char*    getFrontFaceName                                                (VkFrontFace value);
+const char*    getVertexInputRateName                                  (VkVertexInputRate value);
+const char*    getPrimitiveTopologyName                                (VkPrimitiveTopology value);
+const char*    getPolygonModeName                                              (VkPolygonMode value);
+const char*    getStencilOpName                                                (VkStencilOp value);
+const char*    getLogicOpName                                                  (VkLogicOp value);
+const char*    getBorderColorName                                              (VkBorderColor value);
+const char*    getFilterName                                                   (VkFilter value);
+const char*    getSamplerAddressModeName                               (VkSamplerAddressMode value);
+const char*    getSamplerMipmapModeName                                (VkSamplerMipmapMode value);
+const char*    getDescriptorTypeName                                   (VkDescriptorType value);
+const char*    getAttachmentLoadOpName                                 (VkAttachmentLoadOp value);
+const char*    getAttachmentStoreOpName                                (VkAttachmentStoreOp value);
+const char*    getPipelineBindPointName                                (VkPipelineBindPoint value);
+const char*    getCommandBufferLevelName                               (VkCommandBufferLevel value);
+const char*    getIndexTypeName                                                (VkIndexType value);
+const char*    getSubpassContentsName                                  (VkSubpassContents value);
+const char*    getFaultLevelName                                               (VkFaultLevel value);
+const char*    getFaultTypeName                                                (VkFaultType value);
+const char*    getFaultQueryBehaviorName                               (VkFaultQueryBehavior value);
+const char*    getPipelineMatchControlName                             (VkPipelineMatchControl value);
+const char*    getPointClippingBehaviorName                    (VkPointClippingBehavior value);
+const char*    getTessellationDomainOriginName                 (VkTessellationDomainOrigin value);
+const char*    getSamplerYcbcrModelConversionName              (VkSamplerYcbcrModelConversion value);
+const char*    getSamplerYcbcrRangeName                                (VkSamplerYcbcrRange value);
+const char*    getChromaLocationName                                   (VkChromaLocation value);
+const char*    getDriverIdName                                                 (VkDriverId value);
+const char*    getShaderFloatControlsIndependenceName  (VkShaderFloatControlsIndependence value);
+const char*    getSamplerReductionModeName                             (VkSamplerReductionMode value);
+const char*    getSemaphoreTypeName                                    (VkSemaphoreType value);
+const char*    getPresentModeKHRName                                   (VkPresentModeKHR value);
+const char*    getColorSpaceKHRName                                    (VkColorSpaceKHR value);
+const char*    getFragmentShadingRateCombinerOpKHRName (VkFragmentShadingRateCombinerOpKHR value);
+const char*    getDisplayPowerStateEXTName                             (VkDisplayPowerStateEXT value);
+const char*    getDeviceEventTypeEXTName                               (VkDeviceEventTypeEXT value);
+const char*    getDisplayEventTypeEXTName                              (VkDisplayEventTypeEXT value);
+const char*    getDiscardRectangleModeEXTName                  (VkDiscardRectangleModeEXT value);
+const char*    getConservativeRasterizationModeEXTName (VkConservativeRasterizationModeEXT value);
+const char*    getBlendOverlapEXTName                                  (VkBlendOverlapEXT value);
+const char*    getQueueGlobalPriorityEXTName                   (VkQueueGlobalPriorityEXT value);
+const char*    getTimeDomainEXTName                                    (VkTimeDomainEXT value);
+const char*    getLineRasterizationModeEXTName                 (VkLineRasterizationModeEXT value);
+
+inline tcu::Format::Enum<VkResult>                                                             getResultStr                                                    (VkResult value)                                                        { return tcu::Format::Enum<VkResult>(getResultName, value);                                                                                                             }
+inline tcu::Format::Enum<VkStructureType>                                              getStructureTypeStr                                             (VkStructureType value)                                         { return tcu::Format::Enum<VkStructureType>(getStructureTypeName, value);                                                                               }
+inline tcu::Format::Enum<VkImageLayout>                                                        getImageLayoutStr                                               (VkImageLayout value)                                           { return tcu::Format::Enum<VkImageLayout>(getImageLayoutName, value);                                                                                   }
+inline tcu::Format::Enum<VkObjectType>                                                 getObjectTypeStr                                                (VkObjectType value)                                            { return tcu::Format::Enum<VkObjectType>(getObjectTypeName, value);                                                                                             }
+inline tcu::Format::Enum<VkVendorId>                                                   getVendorIdStr                                                  (VkVendorId value)                                                      { return tcu::Format::Enum<VkVendorId>(getVendorIdName, value);                                                                                                 }
+inline tcu::Format::Enum<VkPipelineCacheHeaderVersion>                 getPipelineCacheHeaderVersionStr                (VkPipelineCacheHeaderVersion value)            { return tcu::Format::Enum<VkPipelineCacheHeaderVersion>(getPipelineCacheHeaderVersionName, value);                             }
+inline tcu::Format::Enum<VkSystemAllocationScope>                              getSystemAllocationScopeStr                             (VkSystemAllocationScope value)                         { return tcu::Format::Enum<VkSystemAllocationScope>(getSystemAllocationScopeName, value);                                               }
+inline tcu::Format::Enum<VkInternalAllocationType>                             getInternalAllocationTypeStr                    (VkInternalAllocationType value)                        { return tcu::Format::Enum<VkInternalAllocationType>(getInternalAllocationTypeName, value);                                             }
+inline tcu::Format::Enum<VkFormat>                                                             getFormatStr                                                    (VkFormat value)                                                        { return tcu::Format::Enum<VkFormat>(getFormatName, value);                                                                                                             }
+inline tcu::Format::Enum<VkImageTiling>                                                        getImageTilingStr                                               (VkImageTiling value)                                           { return tcu::Format::Enum<VkImageTiling>(getImageTilingName, value);                                                                                   }
+inline tcu::Format::Enum<VkImageType>                                                  getImageTypeStr                                                 (VkImageType value)                                                     { return tcu::Format::Enum<VkImageType>(getImageTypeName, value);                                                                                               }
+inline tcu::Format::Enum<VkPhysicalDeviceType>                                 getPhysicalDeviceTypeStr                                (VkPhysicalDeviceType value)                            { return tcu::Format::Enum<VkPhysicalDeviceType>(getPhysicalDeviceTypeName, value);                                                             }
+inline tcu::Format::Enum<VkQueryType>                                                  getQueryTypeStr                                                 (VkQueryType value)                                                     { return tcu::Format::Enum<VkQueryType>(getQueryTypeName, value);                                                                                               }
+inline tcu::Format::Enum<VkSharingMode>                                                        getSharingModeStr                                               (VkSharingMode value)                                           { return tcu::Format::Enum<VkSharingMode>(getSharingModeName, value);                                                                                   }
+inline tcu::Format::Enum<VkComponentSwizzle>                                   getComponentSwizzleStr                                  (VkComponentSwizzle value)                                      { return tcu::Format::Enum<VkComponentSwizzle>(getComponentSwizzleName, value);                                                                 }
+inline tcu::Format::Enum<VkImageViewType>                                              getImageViewTypeStr                                             (VkImageViewType value)                                         { return tcu::Format::Enum<VkImageViewType>(getImageViewTypeName, value);                                                                               }
+inline tcu::Format::Enum<VkBlendFactor>                                                        getBlendFactorStr                                               (VkBlendFactor value)                                           { return tcu::Format::Enum<VkBlendFactor>(getBlendFactorName, value);                                                                                   }
+inline tcu::Format::Enum<VkBlendOp>                                                            getBlendOpStr                                                   (VkBlendOp value)                                                       { return tcu::Format::Enum<VkBlendOp>(getBlendOpName, value);                                                                                                   }
+inline tcu::Format::Enum<VkCompareOp>                                                  getCompareOpStr                                                 (VkCompareOp value)                                                     { return tcu::Format::Enum<VkCompareOp>(getCompareOpName, value);                                                                                               }
+inline tcu::Format::Enum<VkDynamicState>                                               getDynamicStateStr                                              (VkDynamicState value)                                          { return tcu::Format::Enum<VkDynamicState>(getDynamicStateName, value);                                                                                 }
+inline tcu::Format::Enum<VkFrontFace>                                                  getFrontFaceStr                                                 (VkFrontFace value)                                                     { return tcu::Format::Enum<VkFrontFace>(getFrontFaceName, value);                                                                                               }
+inline tcu::Format::Enum<VkVertexInputRate>                                            getVertexInputRateStr                                   (VkVertexInputRate value)                                       { return tcu::Format::Enum<VkVertexInputRate>(getVertexInputRateName, value);                                                                   }
+inline tcu::Format::Enum<VkPrimitiveTopology>                                  getPrimitiveTopologyStr                                 (VkPrimitiveTopology value)                                     { return tcu::Format::Enum<VkPrimitiveTopology>(getPrimitiveTopologyName, value);                                                               }
+inline tcu::Format::Enum<VkPolygonMode>                                                        getPolygonModeStr                                               (VkPolygonMode value)                                           { return tcu::Format::Enum<VkPolygonMode>(getPolygonModeName, value);                                                                                   }
+inline tcu::Format::Enum<VkStencilOp>                                                  getStencilOpStr                                                 (VkStencilOp value)                                                     { return tcu::Format::Enum<VkStencilOp>(getStencilOpName, value);                                                                                               }
+inline tcu::Format::Enum<VkLogicOp>                                                            getLogicOpStr                                                   (VkLogicOp value)                                                       { return tcu::Format::Enum<VkLogicOp>(getLogicOpName, value);                                                                                                   }
+inline tcu::Format::Enum<VkBorderColor>                                                        getBorderColorStr                                               (VkBorderColor value)                                           { return tcu::Format::Enum<VkBorderColor>(getBorderColorName, value);                                                                                   }
+inline tcu::Format::Enum<VkFilter>                                                             getFilterStr                                                    (VkFilter value)                                                        { return tcu::Format::Enum<VkFilter>(getFilterName, value);                                                                                                             }
+inline tcu::Format::Enum<VkSamplerAddressMode>                                 getSamplerAddressModeStr                                (VkSamplerAddressMode value)                            { return tcu::Format::Enum<VkSamplerAddressMode>(getSamplerAddressModeName, value);                                                             }
+inline tcu::Format::Enum<VkSamplerMipmapMode>                                  getSamplerMipmapModeStr                                 (VkSamplerMipmapMode value)                                     { return tcu::Format::Enum<VkSamplerMipmapMode>(getSamplerMipmapModeName, value);                                                               }
+inline tcu::Format::Enum<VkDescriptorType>                                             getDescriptorTypeStr                                    (VkDescriptorType value)                                        { return tcu::Format::Enum<VkDescriptorType>(getDescriptorTypeName, value);                                                                             }
+inline tcu::Format::Enum<VkAttachmentLoadOp>                                   getAttachmentLoadOpStr                                  (VkAttachmentLoadOp value)                                      { return tcu::Format::Enum<VkAttachmentLoadOp>(getAttachmentLoadOpName, value);                                                                 }
+inline tcu::Format::Enum<VkAttachmentStoreOp>                                  getAttachmentStoreOpStr                                 (VkAttachmentStoreOp value)                                     { return tcu::Format::Enum<VkAttachmentStoreOp>(getAttachmentStoreOpName, value);                                                               }
+inline tcu::Format::Enum<VkPipelineBindPoint>                                  getPipelineBindPointStr                                 (VkPipelineBindPoint value)                                     { return tcu::Format::Enum<VkPipelineBindPoint>(getPipelineBindPointName, value);                                                               }
+inline tcu::Format::Enum<VkCommandBufferLevel>                                 getCommandBufferLevelStr                                (VkCommandBufferLevel value)                            { return tcu::Format::Enum<VkCommandBufferLevel>(getCommandBufferLevelName, value);                                                             }
+inline tcu::Format::Enum<VkIndexType>                                                  getIndexTypeStr                                                 (VkIndexType value)                                                     { return tcu::Format::Enum<VkIndexType>(getIndexTypeName, value);                                                                                               }
+inline tcu::Format::Enum<VkSubpassContents>                                            getSubpassContentsStr                                   (VkSubpassContents value)                                       { return tcu::Format::Enum<VkSubpassContents>(getSubpassContentsName, value);                                                                   }
+inline tcu::Format::Enum<VkFaultLevel>                                                 getFaultLevelStr                                                (VkFaultLevel value)                                            { return tcu::Format::Enum<VkFaultLevel>(getFaultLevelName, value);                                                                                             }
+inline tcu::Format::Enum<VkFaultType>                                                  getFaultTypeStr                                                 (VkFaultType value)                                                     { return tcu::Format::Enum<VkFaultType>(getFaultTypeName, value);                                                                                               }
+inline tcu::Format::Enum<VkFaultQueryBehavior>                                 getFaultQueryBehaviorStr                                (VkFaultQueryBehavior value)                            { return tcu::Format::Enum<VkFaultQueryBehavior>(getFaultQueryBehaviorName, value);                                                             }
+inline tcu::Format::Enum<VkPipelineMatchControl>                               getPipelineMatchControlStr                              (VkPipelineMatchControl value)                          { return tcu::Format::Enum<VkPipelineMatchControl>(getPipelineMatchControlName, value);                                                 }
+inline tcu::Format::Enum<VkPointClippingBehavior>                              getPointClippingBehaviorStr                             (VkPointClippingBehavior value)                         { return tcu::Format::Enum<VkPointClippingBehavior>(getPointClippingBehaviorName, value);                                               }
+inline tcu::Format::Enum<VkTessellationDomainOrigin>                   getTessellationDomainOriginStr                  (VkTessellationDomainOrigin value)                      { return tcu::Format::Enum<VkTessellationDomainOrigin>(getTessellationDomainOriginName, value);                                 }
+inline tcu::Format::Enum<VkSamplerYcbcrModelConversion>                        getSamplerYcbcrModelConversionStr               (VkSamplerYcbcrModelConversion value)           { return tcu::Format::Enum<VkSamplerYcbcrModelConversion>(getSamplerYcbcrModelConversionName, value);                   }
+inline tcu::Format::Enum<VkSamplerYcbcrRange>                                  getSamplerYcbcrRangeStr                                 (VkSamplerYcbcrRange value)                                     { return tcu::Format::Enum<VkSamplerYcbcrRange>(getSamplerYcbcrRangeName, value);                                                               }
+inline tcu::Format::Enum<VkChromaLocation>                                             getChromaLocationStr                                    (VkChromaLocation value)                                        { return tcu::Format::Enum<VkChromaLocation>(getChromaLocationName, value);                                                                             }
+inline tcu::Format::Enum<VkDriverId>                                                   getDriverIdStr                                                  (VkDriverId value)                                                      { return tcu::Format::Enum<VkDriverId>(getDriverIdName, value);                                                                                                 }
+inline tcu::Format::Enum<VkShaderFloatControlsIndependence>            getShaderFloatControlsIndependenceStr   (VkShaderFloatControlsIndependence value)       { return tcu::Format::Enum<VkShaderFloatControlsIndependence>(getShaderFloatControlsIndependenceName, value);   }
+inline tcu::Format::Enum<VkSamplerReductionMode>                               getSamplerReductionModeStr                              (VkSamplerReductionMode value)                          { return tcu::Format::Enum<VkSamplerReductionMode>(getSamplerReductionModeName, value);                                                 }
+inline tcu::Format::Enum<VkSemaphoreType>                                              getSemaphoreTypeStr                                             (VkSemaphoreType value)                                         { return tcu::Format::Enum<VkSemaphoreType>(getSemaphoreTypeName, value);                                                                               }
+inline tcu::Format::Enum<VkPresentModeKHR>                                             getPresentModeKHRStr                                    (VkPresentModeKHR value)                                        { return tcu::Format::Enum<VkPresentModeKHR>(getPresentModeKHRName, value);                                                                             }
+inline tcu::Format::Enum<VkColorSpaceKHR>                                              getColorSpaceKHRStr                                             (VkColorSpaceKHR value)                                         { return tcu::Format::Enum<VkColorSpaceKHR>(getColorSpaceKHRName, value);                                                                               }
+inline tcu::Format::Enum<VkFragmentShadingRateCombinerOpKHR>   getFragmentShadingRateCombinerOpKHRStr  (VkFragmentShadingRateCombinerOpKHR value)      { return tcu::Format::Enum<VkFragmentShadingRateCombinerOpKHR>(getFragmentShadingRateCombinerOpKHRName, value); }
+inline tcu::Format::Enum<VkDisplayPowerStateEXT>                               getDisplayPowerStateEXTStr                              (VkDisplayPowerStateEXT value)                          { return tcu::Format::Enum<VkDisplayPowerStateEXT>(getDisplayPowerStateEXTName, value);                                                 }
+inline tcu::Format::Enum<VkDeviceEventTypeEXT>                                 getDeviceEventTypeEXTStr                                (VkDeviceEventTypeEXT value)                            { return tcu::Format::Enum<VkDeviceEventTypeEXT>(getDeviceEventTypeEXTName, value);                                                             }
+inline tcu::Format::Enum<VkDisplayEventTypeEXT>                                        getDisplayEventTypeEXTStr                               (VkDisplayEventTypeEXT value)                           { return tcu::Format::Enum<VkDisplayEventTypeEXT>(getDisplayEventTypeEXTName, value);                                                   }
+inline tcu::Format::Enum<VkDiscardRectangleModeEXT>                            getDiscardRectangleModeEXTStr                   (VkDiscardRectangleModeEXT value)                       { return tcu::Format::Enum<VkDiscardRectangleModeEXT>(getDiscardRectangleModeEXTName, value);                                   }
+inline tcu::Format::Enum<VkConservativeRasterizationModeEXT>   getConservativeRasterizationModeEXTStr  (VkConservativeRasterizationModeEXT value)      { return tcu::Format::Enum<VkConservativeRasterizationModeEXT>(getConservativeRasterizationModeEXTName, value); }
+inline tcu::Format::Enum<VkBlendOverlapEXT>                                            getBlendOverlapEXTStr                                   (VkBlendOverlapEXT value)                                       { return tcu::Format::Enum<VkBlendOverlapEXT>(getBlendOverlapEXTName, value);                                                                   }
+inline tcu::Format::Enum<VkQueueGlobalPriorityEXT>                             getQueueGlobalPriorityEXTStr                    (VkQueueGlobalPriorityEXT value)                        { return tcu::Format::Enum<VkQueueGlobalPriorityEXT>(getQueueGlobalPriorityEXTName, value);                                             }
+inline tcu::Format::Enum<VkTimeDomainEXT>                                              getTimeDomainEXTStr                                             (VkTimeDomainEXT value)                                         { return tcu::Format::Enum<VkTimeDomainEXT>(getTimeDomainEXTName, value);                                                                               }
+inline tcu::Format::Enum<VkLineRasterizationModeEXT>                   getLineRasterizationModeEXTStr                  (VkLineRasterizationModeEXT value)                      { return tcu::Format::Enum<VkLineRasterizationModeEXT>(getLineRasterizationModeEXTName, value);                                 }
+
+inline std::ostream&   operator<<      (std::ostream& s, VkResult value)                                                       { return s << getResultStr(value);                                                              }
+inline std::ostream&   operator<<      (std::ostream& s, VkStructureType value)                                        { return s << getStructureTypeStr(value);                                               }
+inline std::ostream&   operator<<      (std::ostream& s, VkImageLayout value)                                          { return s << getImageLayoutStr(value);                                                 }
+inline std::ostream&   operator<<      (std::ostream& s, VkObjectType value)                                           { return s << getObjectTypeStr(value);                                                  }
+inline std::ostream&   operator<<      (std::ostream& s, VkVendorId value)                                                     { return s << getVendorIdStr(value);                                                    }
+inline std::ostream&   operator<<      (std::ostream& s, VkPipelineCacheHeaderVersion value)           { return s << getPipelineCacheHeaderVersionStr(value);                  }
+inline std::ostream&   operator<<      (std::ostream& s, VkSystemAllocationScope value)                        { return s << getSystemAllocationScopeStr(value);                               }
+inline std::ostream&   operator<<      (std::ostream& s, VkInternalAllocationType value)                       { return s << getInternalAllocationTypeStr(value);                              }
+inline std::ostream&   operator<<      (std::ostream& s, VkFormat value)                                                       { return s << getFormatStr(value);                                                              }
+inline std::ostream&   operator<<      (std::ostream& s, VkImageTiling value)                                          { return s << getImageTilingStr(value);                                                 }
+inline std::ostream&   operator<<      (std::ostream& s, VkImageType value)                                            { return s << getImageTypeStr(value);                                                   }
+inline std::ostream&   operator<<      (std::ostream& s, VkPhysicalDeviceType value)                           { return s << getPhysicalDeviceTypeStr(value);                                  }
+inline std::ostream&   operator<<      (std::ostream& s, VkQueryType value)                                            { return s << getQueryTypeStr(value);                                                   }
+inline std::ostream&   operator<<      (std::ostream& s, VkSharingMode value)                                          { return s << getSharingModeStr(value);                                                 }
+inline std::ostream&   operator<<      (std::ostream& s, VkComponentSwizzle value)                                     { return s << getComponentSwizzleStr(value);                                    }
+inline std::ostream&   operator<<      (std::ostream& s, VkImageViewType value)                                        { return s << getImageViewTypeStr(value);                                               }
+inline std::ostream&   operator<<      (std::ostream& s, VkBlendFactor value)                                          { return s << getBlendFactorStr(value);                                                 }
+inline std::ostream&   operator<<      (std::ostream& s, VkBlendOp value)                                                      { return s << getBlendOpStr(value);                                                             }
+inline std::ostream&   operator<<      (std::ostream& s, VkCompareOp value)                                            { return s << getCompareOpStr(value);                                                   }
+inline std::ostream&   operator<<      (std::ostream& s, VkDynamicState value)                                         { return s << getDynamicStateStr(value);                                                }
+inline std::ostream&   operator<<      (std::ostream& s, VkFrontFace value)                                            { return s << getFrontFaceStr(value);                                                   }
+inline std::ostream&   operator<<      (std::ostream& s, VkVertexInputRate value)                                      { return s << getVertexInputRateStr(value);                                             }
+inline std::ostream&   operator<<      (std::ostream& s, VkPrimitiveTopology value)                            { return s << getPrimitiveTopologyStr(value);                                   }
+inline std::ostream&   operator<<      (std::ostream& s, VkPolygonMode value)                                          { return s << getPolygonModeStr(value);                                                 }
+inline std::ostream&   operator<<      (std::ostream& s, VkStencilOp value)                                            { return s << getStencilOpStr(value);                                                   }
+inline std::ostream&   operator<<      (std::ostream& s, VkLogicOp value)                                                      { return s << getLogicOpStr(value);                                                             }
+inline std::ostream&   operator<<      (std::ostream& s, VkBorderColor value)                                          { return s << getBorderColorStr(value);                                                 }
+inline std::ostream&   operator<<      (std::ostream& s, VkFilter value)                                                       { return s << getFilterStr(value);                                                              }
+inline std::ostream&   operator<<      (std::ostream& s, VkSamplerAddressMode value)                           { return s << getSamplerAddressModeStr(value);                                  }
+inline std::ostream&   operator<<      (std::ostream& s, VkSamplerMipmapMode value)                            { return s << getSamplerMipmapModeStr(value);                                   }
+inline std::ostream&   operator<<      (std::ostream& s, VkDescriptorType value)                                       { return s << getDescriptorTypeStr(value);                                              }
+inline std::ostream&   operator<<      (std::ostream& s, VkAttachmentLoadOp value)                                     { return s << getAttachmentLoadOpStr(value);                                    }
+inline std::ostream&   operator<<      (std::ostream& s, VkAttachmentStoreOp value)                            { return s << getAttachmentStoreOpStr(value);                                   }
+inline std::ostream&   operator<<      (std::ostream& s, VkPipelineBindPoint value)                            { return s << getPipelineBindPointStr(value);                                   }
+inline std::ostream&   operator<<      (std::ostream& s, VkCommandBufferLevel value)                           { return s << getCommandBufferLevelStr(value);                                  }
+inline std::ostream&   operator<<      (std::ostream& s, VkIndexType value)                                            { return s << getIndexTypeStr(value);                                                   }
+inline std::ostream&   operator<<      (std::ostream& s, VkSubpassContents value)                                      { return s << getSubpassContentsStr(value);                                             }
+inline std::ostream&   operator<<      (std::ostream& s, VkFaultLevel value)                                           { return s << getFaultLevelStr(value);                                                  }
+inline std::ostream&   operator<<      (std::ostream& s, VkFaultType value)                                            { return s << getFaultTypeStr(value);                                                   }
+inline std::ostream&   operator<<      (std::ostream& s, VkFaultQueryBehavior value)                           { return s << getFaultQueryBehaviorStr(value);                                  }
+inline std::ostream&   operator<<      (std::ostream& s, VkPipelineMatchControl value)                         { return s << getPipelineMatchControlStr(value);                                }
+inline std::ostream&   operator<<      (std::ostream& s, VkPointClippingBehavior value)                        { return s << getPointClippingBehaviorStr(value);                               }
+inline std::ostream&   operator<<      (std::ostream& s, VkTessellationDomainOrigin value)                     { return s << getTessellationDomainOriginStr(value);                    }
+inline std::ostream&   operator<<      (std::ostream& s, VkSamplerYcbcrModelConversion value)          { return s << getSamplerYcbcrModelConversionStr(value);                 }
+inline std::ostream&   operator<<      (std::ostream& s, VkSamplerYcbcrRange value)                            { return s << getSamplerYcbcrRangeStr(value);                                   }
+inline std::ostream&   operator<<      (std::ostream& s, VkChromaLocation value)                                       { return s << getChromaLocationStr(value);                                              }
+inline std::ostream&   operator<<      (std::ostream& s, VkDriverId value)                                                     { return s << getDriverIdStr(value);                                                    }
+inline std::ostream&   operator<<      (std::ostream& s, VkShaderFloatControlsIndependence value)      { return s << getShaderFloatControlsIndependenceStr(value);             }
+inline std::ostream&   operator<<      (std::ostream& s, VkSamplerReductionMode value)                         { return s << getSamplerReductionModeStr(value);                                }
+inline std::ostream&   operator<<      (std::ostream& s, VkSemaphoreType value)                                        { return s << getSemaphoreTypeStr(value);                                               }
+inline std::ostream&   operator<<      (std::ostream& s, VkPresentModeKHR value)                                       { return s << getPresentModeKHRStr(value);                                              }
+inline std::ostream&   operator<<      (std::ostream& s, VkColorSpaceKHR value)                                        { return s << getColorSpaceKHRStr(value);                                               }
+inline std::ostream&   operator<<      (std::ostream& s, VkFragmentShadingRateCombinerOpKHR value)     { return s << getFragmentShadingRateCombinerOpKHRStr(value);    }
+inline std::ostream&   operator<<      (std::ostream& s, VkDisplayPowerStateEXT value)                         { return s << getDisplayPowerStateEXTStr(value);                                }
+inline std::ostream&   operator<<      (std::ostream& s, VkDeviceEventTypeEXT value)                           { return s << getDeviceEventTypeEXTStr(value);                                  }
+inline std::ostream&   operator<<      (std::ostream& s, VkDisplayEventTypeEXT value)                          { return s << getDisplayEventTypeEXTStr(value);                                 }
+inline std::ostream&   operator<<      (std::ostream& s, VkDiscardRectangleModeEXT value)                      { return s << getDiscardRectangleModeEXTStr(value);                             }
+inline std::ostream&   operator<<      (std::ostream& s, VkConservativeRasterizationModeEXT value)     { return s << getConservativeRasterizationModeEXTStr(value);    }
+inline std::ostream&   operator<<      (std::ostream& s, VkBlendOverlapEXT value)                                      { return s << getBlendOverlapEXTStr(value);                                             }
+inline std::ostream&   operator<<      (std::ostream& s, VkQueueGlobalPriorityEXT value)                       { return s << getQueueGlobalPriorityEXTStr(value);                              }
+inline std::ostream&   operator<<      (std::ostream& s, VkTimeDomainEXT value)                                        { return s << getTimeDomainEXTStr(value);                                               }
+inline std::ostream&   operator<<      (std::ostream& s, VkLineRasterizationModeEXT value)                     { return s << getLineRasterizationModeEXTStr(value);                    }
+
+tcu::Format::Bitfield<32>      getAccessFlagsStr                                                                                       (VkAccessFlags value);
+tcu::Format::Bitfield<32>      getImageAspectFlagsStr                                                                          (VkImageAspectFlags value);
+tcu::Format::Bitfield<32>      getFormatFeatureFlagsStr                                                                        (VkFormatFeatureFlags value);
+tcu::Format::Bitfield<32>      getImageCreateFlagsStr                                                                          (VkImageCreateFlags value);
+tcu::Format::Bitfield<32>      getSampleCountFlagsStr                                                                          (VkSampleCountFlags value);
+tcu::Format::Bitfield<32>      getImageUsageFlagsStr                                                                           (VkImageUsageFlags value);
+tcu::Format::Bitfield<32>      getMemoryHeapFlagsStr                                                                           (VkMemoryHeapFlags value);
+tcu::Format::Bitfield<32>      getMemoryPropertyFlagsStr                                                                       (VkMemoryPropertyFlags value);
+tcu::Format::Bitfield<32>      getQueueFlagsStr                                                                                        (VkQueueFlags value);
+tcu::Format::Bitfield<32>      getDeviceQueueCreateFlagsStr                                                            (VkDeviceQueueCreateFlags value);
+tcu::Format::Bitfield<32>      getPipelineStageFlagsStr                                                                        (VkPipelineStageFlags value);
+tcu::Format::Bitfield<32>      getSparseMemoryBindFlagsStr                                                                     (VkSparseMemoryBindFlags value);
+tcu::Format::Bitfield<32>      getSparseImageFormatFlagsStr                                                            (VkSparseImageFormatFlags value);
+tcu::Format::Bitfield<32>      getFenceCreateFlagsStr                                                                          (VkFenceCreateFlags value);
+tcu::Format::Bitfield<32>      getQueryPipelineStatisticFlagsStr                                                       (VkQueryPipelineStatisticFlags value);
+tcu::Format::Bitfield<32>      getQueryResultFlagsStr                                                                          (VkQueryResultFlags value);
+tcu::Format::Bitfield<32>      getBufferCreateFlagsStr                                                                         (VkBufferCreateFlags value);
+tcu::Format::Bitfield<32>      getBufferUsageFlagsStr                                                                          (VkBufferUsageFlags value);
+tcu::Format::Bitfield<32>      getImageViewCreateFlagsStr                                                                      (VkImageViewCreateFlags value);
+tcu::Format::Bitfield<32>      getPipelineCacheCreateFlagsStr                                                          (VkPipelineCacheCreateFlags value);
+tcu::Format::Bitfield<32>      getColorComponentFlagsStr                                                                       (VkColorComponentFlags value);
+tcu::Format::Bitfield<32>      getPipelineCreateFlagsStr                                                                       (VkPipelineCreateFlags value);
+tcu::Format::Bitfield<32>      getPipelineShaderStageCreateFlagsStr                                            (VkPipelineShaderStageCreateFlags value);
+tcu::Format::Bitfield<32>      getShaderStageFlagsStr                                                                          (VkShaderStageFlags value);
+tcu::Format::Bitfield<32>      getCullModeFlagsStr                                                                                     (VkCullModeFlags value);
+tcu::Format::Bitfield<32>      getSamplerCreateFlagsStr                                                                        (VkSamplerCreateFlags value);
+tcu::Format::Bitfield<32>      getDescriptorPoolCreateFlagsStr                                                         (VkDescriptorPoolCreateFlags value);
+tcu::Format::Bitfield<32>      getDescriptorSetLayoutCreateFlagsStr                                            (VkDescriptorSetLayoutCreateFlags value);
+tcu::Format::Bitfield<32>      getAttachmentDescriptionFlagsStr                                                        (VkAttachmentDescriptionFlags value);
+tcu::Format::Bitfield<32>      getDependencyFlagsStr                                                                           (VkDependencyFlags value);
+tcu::Format::Bitfield<32>      getFramebufferCreateFlagsStr                                                            (VkFramebufferCreateFlags value);
+tcu::Format::Bitfield<32>      getRenderPassCreateFlagsStr                                                                     (VkRenderPassCreateFlags value);
+tcu::Format::Bitfield<32>      getSubpassDescriptionFlagsStr                                                           (VkSubpassDescriptionFlags value);
+tcu::Format::Bitfield<32>      getCommandPoolCreateFlagsStr                                                            (VkCommandPoolCreateFlags value);
+tcu::Format::Bitfield<32>      getCommandPoolResetFlagsStr                                                                     (VkCommandPoolResetFlags value);
+tcu::Format::Bitfield<32>      getCommandBufferUsageFlagsStr                                                           (VkCommandBufferUsageFlags value);
+tcu::Format::Bitfield<32>      getQueryControlFlagsStr                                                                         (VkQueryControlFlags value);
+tcu::Format::Bitfield<32>      getCommandBufferResetFlagsStr                                                           (VkCommandBufferResetFlags value);
+tcu::Format::Bitfield<32>      getStencilFaceFlagsStr                                                                          (VkStencilFaceFlags value);
+tcu::Format::Bitfield<32>      getSubgroupFeatureFlagsStr                                                                      (VkSubgroupFeatureFlags value);
+tcu::Format::Bitfield<32>      getPeerMemoryFeatureFlagsStr                                                            (VkPeerMemoryFeatureFlags value);
+tcu::Format::Bitfield<32>      getMemoryAllocateFlagsStr                                                                       (VkMemoryAllocateFlags value);
+tcu::Format::Bitfield<32>      getExternalMemoryHandleTypeFlagsStr                                                     (VkExternalMemoryHandleTypeFlags value);
+tcu::Format::Bitfield<32>      getExternalMemoryFeatureFlagsStr                                                        (VkExternalMemoryFeatureFlags value);
+tcu::Format::Bitfield<32>      getExternalFenceHandleTypeFlagsStr                                                      (VkExternalFenceHandleTypeFlags value);
+tcu::Format::Bitfield<32>      getExternalFenceFeatureFlagsStr                                                         (VkExternalFenceFeatureFlags value);
+tcu::Format::Bitfield<32>      getFenceImportFlagsStr                                                                          (VkFenceImportFlags value);
+tcu::Format::Bitfield<32>      getSemaphoreImportFlagsStr                                                                      (VkSemaphoreImportFlags value);
+tcu::Format::Bitfield<32>      getExternalSemaphoreHandleTypeFlagsStr                                          (VkExternalSemaphoreHandleTypeFlags value);
+tcu::Format::Bitfield<32>      getExternalSemaphoreFeatureFlagsStr                                                     (VkExternalSemaphoreFeatureFlags value);
+tcu::Format::Bitfield<32>      getResolveModeFlagsStr                                                                          (VkResolveModeFlags value);
+tcu::Format::Bitfield<32>      getDescriptorBindingFlagsStr                                                            (VkDescriptorBindingFlags value);
+tcu::Format::Bitfield<32>      getSemaphoreWaitFlagsStr                                                                        (VkSemaphoreWaitFlags value);
+tcu::Format::Bitfield<32>      getSurfaceTransformFlagsKHRStr                                                          (VkSurfaceTransformFlagsKHR value);
+tcu::Format::Bitfield<32>      getCompositeAlphaFlagsKHRStr                                                            (VkCompositeAlphaFlagsKHR value);
+tcu::Format::Bitfield<32>      getSwapchainCreateFlagsKHRStr                                                           (VkSwapchainCreateFlagsKHR value);
+tcu::Format::Bitfield<32>      getDeviceGroupPresentModeFlagsKHRStr                                            (VkDeviceGroupPresentModeFlagsKHR value);
+tcu::Format::Bitfield<32>      getDisplayPlaneAlphaFlagsKHRStr                                                         (VkDisplayPlaneAlphaFlagsKHR value);
+tcu::Format::Bitfield<32>      getRefreshObjectFlagsKHRStr                                                                     (VkRefreshObjectFlagsKHR value);
+tcu::Format::Bitfield<32>      getSurfaceCounterFlagsEXTStr                                                            (VkSurfaceCounterFlagsEXT value);
+tcu::Format::Bitfield<32>      getInstanceCreateFlagsStr                                                                       (VkInstanceCreateFlags value);
+tcu::Format::Bitfield<32>      getDeviceCreateFlagsStr                                                                         (VkDeviceCreateFlags value);
+tcu::Format::Bitfield<32>      getMemoryMapFlagsStr                                                                            (VkMemoryMapFlags value);
+tcu::Format::Bitfield<32>      getSemaphoreCreateFlagsStr                                                                      (VkSemaphoreCreateFlags value);
+tcu::Format::Bitfield<32>      getEventCreateFlagsStr                                                                          (VkEventCreateFlags value);
+tcu::Format::Bitfield<32>      getQueryPoolCreateFlagsStr                                                                      (VkQueryPoolCreateFlags value);
+tcu::Format::Bitfield<32>      getBufferViewCreateFlagsStr                                                                     (VkBufferViewCreateFlags value);
+tcu::Format::Bitfield<32>      getPipelineVertexInputStateCreateFlagsStr                                       (VkPipelineVertexInputStateCreateFlags value);
+tcu::Format::Bitfield<32>      getPipelineInputAssemblyStateCreateFlagsStr                                     (VkPipelineInputAssemblyStateCreateFlags value);
+tcu::Format::Bitfield<32>      getPipelineTessellationStateCreateFlagsStr                                      (VkPipelineTessellationStateCreateFlags value);
+tcu::Format::Bitfield<32>      getPipelineViewportStateCreateFlagsStr                                          (VkPipelineViewportStateCreateFlags value);
+tcu::Format::Bitfield<32>      getPipelineRasterizationStateCreateFlagsStr                                     (VkPipelineRasterizationStateCreateFlags value);
+tcu::Format::Bitfield<32>      getPipelineMultisampleStateCreateFlagsStr                                       (VkPipelineMultisampleStateCreateFlags value);
+tcu::Format::Bitfield<32>      getPipelineDepthStencilStateCreateFlagsStr                                      (VkPipelineDepthStencilStateCreateFlags value);
+tcu::Format::Bitfield<32>      getPipelineColorBlendStateCreateFlagsStr                                        (VkPipelineColorBlendStateCreateFlags value);
+tcu::Format::Bitfield<32>      getPipelineDynamicStateCreateFlagsStr                                           (VkPipelineDynamicStateCreateFlags value);
+tcu::Format::Bitfield<32>      getPipelineLayoutCreateFlagsStr                                                         (VkPipelineLayoutCreateFlags value);
+tcu::Format::Bitfield<32>      getDescriptorPoolResetFlagsStr                                                          (VkDescriptorPoolResetFlags value);
+tcu::Format::Bitfield<32>      getDisplayModeCreateFlagsKHRStr                                                         (VkDisplayModeCreateFlagsKHR value);
+tcu::Format::Bitfield<32>      getDisplaySurfaceCreateFlagsKHRStr                                                      (VkDisplaySurfaceCreateFlagsKHR value);
+tcu::Format::Bitfield<32>      getPipelineDiscardRectangleStateCreateFlagsEXTStr                       (VkPipelineDiscardRectangleStateCreateFlagsEXT value);
+tcu::Format::Bitfield<32>      getPipelineRasterizationConservativeStateCreateFlagsEXTStr      (VkPipelineRasterizationConservativeStateCreateFlagsEXT value);
+tcu::Format::Bitfield<32>      getPipelineRasterizationDepthClipStateCreateFlagsEXTStr         (VkPipelineRasterizationDepthClipStateCreateFlagsEXT value);
+tcu::Format::Bitfield<32>      getHeadlessSurfaceCreateFlagsEXTStr                                                     (VkHeadlessSurfaceCreateFlagsEXT value);
+
+std::ostream&  operator<<      (std::ostream& s, const VkExtent2D& value);
+std::ostream&  operator<<      (std::ostream& s, const VkExtent3D& value);
+std::ostream&  operator<<      (std::ostream& s, const VkOffset2D& value);
+std::ostream&  operator<<      (std::ostream& s, const VkOffset3D& value);
+std::ostream&  operator<<      (std::ostream& s, const VkRect2D& value);
+std::ostream&  operator<<      (std::ostream& s, const VkBaseInStructure& value);
+std::ostream&  operator<<      (std::ostream& s, const VkBaseOutStructure& value);
+std::ostream&  operator<<      (std::ostream& s, const VkBufferMemoryBarrier& value);
+std::ostream&  operator<<      (std::ostream& s, const VkDispatchIndirectCommand& value);
+std::ostream&  operator<<      (std::ostream& s, const VkDrawIndexedIndirectCommand& value);
+std::ostream&  operator<<      (std::ostream& s, const VkDrawIndirectCommand& value);
+std::ostream&  operator<<      (std::ostream& s, const VkImageSubresourceRange& value);
+std::ostream&  operator<<      (std::ostream& s, const VkImageMemoryBarrier& value);
+std::ostream&  operator<<      (std::ostream& s, const VkMemoryBarrier& value);
+std::ostream&  operator<<      (std::ostream& s, const VkAllocationCallbacks& value);
+std::ostream&  operator<<      (std::ostream& s, const VkApplicationInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkFormatProperties& value);
+std::ostream&  operator<<      (std::ostream& s, const VkImageFormatProperties& value);
+std::ostream&  operator<<      (std::ostream& s, const VkInstanceCreateInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkMemoryHeap& value);
+std::ostream&  operator<<      (std::ostream& s, const VkMemoryType& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceFeatures& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceLimits& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceMemoryProperties& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceSparseProperties& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceProperties& value);
+std::ostream&  operator<<      (std::ostream& s, const VkQueueFamilyProperties& value);
+std::ostream&  operator<<      (std::ostream& s, const VkDeviceQueueCreateInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkDeviceCreateInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkExtensionProperties& value);
+std::ostream&  operator<<      (std::ostream& s, const VkLayerProperties& value);
+std::ostream&  operator<<      (std::ostream& s, const VkSubmitInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkMappedMemoryRange& value);
+std::ostream&  operator<<      (std::ostream& s, const VkMemoryAllocateInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkMemoryRequirements& value);
+std::ostream&  operator<<      (std::ostream& s, const VkSparseMemoryBind& value);
+std::ostream&  operator<<      (std::ostream& s, const VkSparseBufferMemoryBindInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkSparseImageOpaqueMemoryBindInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkImageSubresource& value);
+std::ostream&  operator<<      (std::ostream& s, const VkSparseImageMemoryBind& value);
+std::ostream&  operator<<      (std::ostream& s, const VkSparseImageMemoryBindInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkBindSparseInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkSparseImageFormatProperties& value);
+std::ostream&  operator<<      (std::ostream& s, const VkSparseImageMemoryRequirements& value);
+std::ostream&  operator<<      (std::ostream& s, const VkFenceCreateInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkSemaphoreCreateInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkEventCreateInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkQueryPoolCreateInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkBufferCreateInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkBufferViewCreateInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkImageCreateInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkSubresourceLayout& value);
+std::ostream&  operator<<      (std::ostream& s, const VkComponentMapping& value);
+std::ostream&  operator<<      (std::ostream& s, const VkImageViewCreateInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPipelineCacheCreateInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkSpecializationMapEntry& value);
+std::ostream&  operator<<      (std::ostream& s, const VkSpecializationInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPipelineShaderStageCreateInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkComputePipelineCreateInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkVertexInputBindingDescription& value);
+std::ostream&  operator<<      (std::ostream& s, const VkVertexInputAttributeDescription& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPipelineVertexInputStateCreateInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPipelineInputAssemblyStateCreateInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPipelineTessellationStateCreateInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkViewport& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPipelineViewportStateCreateInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPipelineRasterizationStateCreateInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPipelineMultisampleStateCreateInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkStencilOpState& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPipelineDepthStencilStateCreateInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPipelineColorBlendAttachmentState& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPipelineColorBlendStateCreateInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPipelineDynamicStateCreateInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkGraphicsPipelineCreateInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPushConstantRange& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPipelineLayoutCreateInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkSamplerCreateInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkCopyDescriptorSet& value);
+std::ostream&  operator<<      (std::ostream& s, const VkDescriptorBufferInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkDescriptorImageInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkDescriptorPoolSize& value);
+std::ostream&  operator<<      (std::ostream& s, const VkDescriptorPoolCreateInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkDescriptorSetAllocateInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkDescriptorSetLayoutBinding& value);
+std::ostream&  operator<<      (std::ostream& s, const VkDescriptorSetLayoutCreateInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkWriteDescriptorSet& value);
+std::ostream&  operator<<      (std::ostream& s, const VkAttachmentDescription& value);
+std::ostream&  operator<<      (std::ostream& s, const VkAttachmentReference& value);
+std::ostream&  operator<<      (std::ostream& s, const VkFramebufferCreateInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkSubpassDescription& value);
+std::ostream&  operator<<      (std::ostream& s, const VkSubpassDependency& value);
+std::ostream&  operator<<      (std::ostream& s, const VkRenderPassCreateInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkCommandPoolCreateInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkCommandBufferAllocateInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkCommandBufferInheritanceInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkCommandBufferBeginInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkBufferCopy& value);
+std::ostream&  operator<<      (std::ostream& s, const VkImageSubresourceLayers& value);
+std::ostream&  operator<<      (std::ostream& s, const VkBufferImageCopy& value);
+std::ostream&  operator<<      (std::ostream& s, const VkClearColorValue& value);
+std::ostream&  operator<<      (std::ostream& s, const VkClearDepthStencilValue& value);
+std::ostream&  operator<<      (std::ostream& s, const VkClearValue& value);
+std::ostream&  operator<<      (std::ostream& s, const VkClearAttachment& value);
+std::ostream&  operator<<      (std::ostream& s, const VkClearRect& value);
+std::ostream&  operator<<      (std::ostream& s, const VkImageBlit& value);
+std::ostream&  operator<<      (std::ostream& s, const VkImageCopy& value);
+std::ostream&  operator<<      (std::ostream& s, const VkImageResolve& value);
+std::ostream&  operator<<      (std::ostream& s, const VkRenderPassBeginInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceVulkanSC10Features& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceVulkanSC10Properties& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPipelinePoolSize& value);
+std::ostream&  operator<<      (std::ostream& s, const VkDeviceMemoryReservationCreateInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkCommandPoolMemoryReservationCreateInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkCommandPoolMemoryConsumption& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPipelinePoolEntrySizeCreateInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkFaultData& value);
+std::ostream&  operator<<      (std::ostream& s, const VkFaultCallbackInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceFaultHandlingProperties& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDevicePipelineIdentifierFeatures& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPipelineIdentifierInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceSubgroupProperties& value);
+std::ostream&  operator<<      (std::ostream& s, const VkBindBufferMemoryInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkBindImageMemoryInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDevice16BitStorageFeatures& value);
+std::ostream&  operator<<      (std::ostream& s, const VkMemoryDedicatedRequirements& value);
+std::ostream&  operator<<      (std::ostream& s, const VkMemoryDedicatedAllocateInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkMemoryAllocateFlagsInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkDeviceGroupRenderPassBeginInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkDeviceGroupCommandBufferBeginInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkDeviceGroupSubmitInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkDeviceGroupBindSparseInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkBindBufferMemoryDeviceGroupInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkBindImageMemoryDeviceGroupInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceGroupProperties& value);
+std::ostream&  operator<<      (std::ostream& s, const VkDeviceGroupDeviceCreateInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkBufferMemoryRequirementsInfo2& value);
+std::ostream&  operator<<      (std::ostream& s, const VkImageMemoryRequirementsInfo2& value);
+std::ostream&  operator<<      (std::ostream& s, const VkImageSparseMemoryRequirementsInfo2& value);
+std::ostream&  operator<<      (std::ostream& s, const VkMemoryRequirements2& value);
+std::ostream&  operator<<      (std::ostream& s, const VkSparseImageMemoryRequirements2& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceFeatures2& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceProperties2& value);
+std::ostream&  operator<<      (std::ostream& s, const VkFormatProperties2& value);
+std::ostream&  operator<<      (std::ostream& s, const VkImageFormatProperties2& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceImageFormatInfo2& value);
+std::ostream&  operator<<      (std::ostream& s, const VkQueueFamilyProperties2& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceMemoryProperties2& value);
+std::ostream&  operator<<      (std::ostream& s, const VkSparseImageFormatProperties2& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceSparseImageFormatInfo2& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDevicePointClippingProperties& value);
+std::ostream&  operator<<      (std::ostream& s, const VkInputAttachmentAspectReference& value);
+std::ostream&  operator<<      (std::ostream& s, const VkRenderPassInputAttachmentAspectCreateInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkImageViewUsageCreateInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPipelineTessellationDomainOriginStateCreateInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkRenderPassMultiviewCreateInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceMultiviewFeatures& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceMultiviewProperties& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceVariablePointersFeatures& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceProtectedMemoryFeatures& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceProtectedMemoryProperties& value);
+std::ostream&  operator<<      (std::ostream& s, const VkDeviceQueueInfo2& value);
+std::ostream&  operator<<      (std::ostream& s, const VkProtectedSubmitInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkSamplerYcbcrConversionCreateInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkSamplerYcbcrConversionInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkBindImagePlaneMemoryInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkImagePlaneMemoryRequirementsInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceSamplerYcbcrConversionFeatures& value);
+std::ostream&  operator<<      (std::ostream& s, const VkSamplerYcbcrConversionImageFormatProperties& value);
+std::ostream&  operator<<      (std::ostream& s, const VkExternalMemoryProperties& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceExternalImageFormatInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkExternalImageFormatProperties& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceExternalBufferInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkExternalBufferProperties& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceIDProperties& value);
+std::ostream&  operator<<      (std::ostream& s, const VkExternalMemoryImageCreateInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkExternalMemoryBufferCreateInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkExportMemoryAllocateInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceExternalFenceInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkExternalFenceProperties& value);
+std::ostream&  operator<<      (std::ostream& s, const VkExportFenceCreateInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkExportSemaphoreCreateInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceExternalSemaphoreInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkExternalSemaphoreProperties& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceMaintenance3Properties& value);
+std::ostream&  operator<<      (std::ostream& s, const VkDescriptorSetLayoutSupport& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceShaderDrawParametersFeatures& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceVulkan11Features& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceVulkan11Properties& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceVulkan12Features& value);
+std::ostream&  operator<<      (std::ostream& s, const VkConformanceVersion& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceVulkan12Properties& value);
+std::ostream&  operator<<      (std::ostream& s, const VkImageFormatListCreateInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkAttachmentDescription2& value);
+std::ostream&  operator<<      (std::ostream& s, const VkAttachmentReference2& value);
+std::ostream&  operator<<      (std::ostream& s, const VkSubpassDescription2& value);
+std::ostream&  operator<<      (std::ostream& s, const VkSubpassDependency2& value);
+std::ostream&  operator<<      (std::ostream& s, const VkRenderPassCreateInfo2& value);
+std::ostream&  operator<<      (std::ostream& s, const VkSubpassBeginInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkSubpassEndInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDevice8BitStorageFeatures& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceDriverProperties& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceShaderAtomicInt64Features& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceShaderFloat16Int8Features& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceFloatControlsProperties& value);
+std::ostream&  operator<<      (std::ostream& s, const VkDescriptorSetLayoutBindingFlagsCreateInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceDescriptorIndexingFeatures& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceDescriptorIndexingProperties& value);
+std::ostream&  operator<<      (std::ostream& s, const VkDescriptorSetVariableDescriptorCountAllocateInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkDescriptorSetVariableDescriptorCountLayoutSupport& value);
+std::ostream&  operator<<      (std::ostream& s, const VkSubpassDescriptionDepthStencilResolve& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceDepthStencilResolveProperties& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceScalarBlockLayoutFeatures& value);
+std::ostream&  operator<<      (std::ostream& s, const VkImageStencilUsageCreateInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkSamplerReductionModeCreateInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceSamplerFilterMinmaxProperties& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceVulkanMemoryModelFeatures& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceImagelessFramebufferFeatures& value);
+std::ostream&  operator<<      (std::ostream& s, const VkFramebufferAttachmentImageInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkFramebufferAttachmentsCreateInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkRenderPassAttachmentBeginInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceUniformBufferStandardLayoutFeatures& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures& value);
+std::ostream&  operator<<      (std::ostream& s, const VkAttachmentReferenceStencilLayout& value);
+std::ostream&  operator<<      (std::ostream& s, const VkAttachmentDescriptionStencilLayout& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceHostQueryResetFeatures& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceTimelineSemaphoreFeatures& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceTimelineSemaphoreProperties& value);
+std::ostream&  operator<<      (std::ostream& s, const VkSemaphoreTypeCreateInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkTimelineSemaphoreSubmitInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkSemaphoreWaitInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkSemaphoreSignalInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceBufferDeviceAddressFeatures& value);
+std::ostream&  operator<<      (std::ostream& s, const VkBufferDeviceAddressInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkBufferOpaqueCaptureAddressCreateInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkMemoryOpaqueCaptureAddressAllocateInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkDeviceMemoryOpaqueCaptureAddressInfo& value);
+std::ostream&  operator<<      (std::ostream& s, const VkSurfaceCapabilitiesKHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkSurfaceFormatKHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkSwapchainCreateInfoKHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPresentInfoKHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkImageSwapchainCreateInfoKHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkBindImageMemorySwapchainInfoKHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkAcquireNextImageInfoKHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkDeviceGroupPresentCapabilitiesKHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkDeviceGroupPresentInfoKHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkDeviceGroupSwapchainCreateInfoKHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkDisplayModeParametersKHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkDisplayModeCreateInfoKHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkDisplayModePropertiesKHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkDisplayPlaneCapabilitiesKHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkDisplayPlanePropertiesKHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkDisplayPropertiesKHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkDisplaySurfaceCreateInfoKHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkDisplayPresentInfoKHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkImportMemoryFdInfoKHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkMemoryFdPropertiesKHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkMemoryGetFdInfoKHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkImportSemaphoreFdInfoKHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkSemaphoreGetFdInfoKHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkRectLayerKHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPresentRegionKHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPresentRegionsKHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkSharedPresentSurfaceCapabilitiesKHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkImportFenceFdInfoKHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkFenceGetFdInfoKHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceSurfaceInfo2KHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkSurfaceCapabilities2KHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkSurfaceFormat2KHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkDisplayProperties2KHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkDisplayPlaneProperties2KHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkDisplayModeProperties2KHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkDisplayPlaneInfo2KHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkDisplayPlaneCapabilities2KHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceShaderClockFeaturesKHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkFragmentShadingRateAttachmentInfoKHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPipelineFragmentShadingRateStateCreateInfoKHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceFragmentShadingRateFeaturesKHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceFragmentShadingRatePropertiesKHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceFragmentShadingRateKHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkRefreshObjectKHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkRefreshObjectListKHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkBufferCopy2KHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkCopyBufferInfo2KHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkImageCopy2KHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkCopyImageInfo2KHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkBufferImageCopy2KHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkCopyBufferToImageInfo2KHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkCopyImageToBufferInfo2KHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkImageBlit2KHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkBlitImageInfo2KHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkImageResolve2KHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkResolveImageInfo2KHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkImageViewASTCDecodeModeEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceASTCDecodeFeaturesEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkSurfaceCapabilities2EXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkDisplayPowerInfoEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkDeviceEventInfoEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkDisplayEventInfoEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkSwapchainCounterCreateInfoEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceDiscardRectanglePropertiesEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPipelineDiscardRectangleStateCreateInfoEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceConservativeRasterizationPropertiesEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPipelineRasterizationConservativeStateCreateInfoEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceDepthClipEnableFeaturesEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPipelineRasterizationDepthClipStateCreateInfoEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkXYColorEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkHdrMetadataEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkSampleLocationEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkSampleLocationsInfoEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkAttachmentSampleLocationsEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkSubpassSampleLocationsEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkRenderPassSampleLocationsBeginInfoEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPipelineSampleLocationsStateCreateInfoEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceSampleLocationsPropertiesEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkMultisamplePropertiesEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPipelineColorBlendAdvancedStateCreateInfoEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkDrmFormatModifierPropertiesEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkDrmFormatModifierPropertiesListEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceImageDrmFormatModifierInfoEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkImageDrmFormatModifierListCreateInfoEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkImageDrmFormatModifierExplicitCreateInfoEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkImageDrmFormatModifierPropertiesEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceImageViewImageFormatInfoEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkFilterCubicImageViewImageFormatPropertiesEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkDeviceQueueGlobalPriorityCreateInfoEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkImportMemoryHostPointerInfoEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkMemoryHostPointerPropertiesEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceExternalMemoryHostPropertiesEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkCalibratedTimestampInfoEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkVertexInputBindingDivisorDescriptionEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPipelineVertexInputDivisorStateCreateInfoEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDevicePCIBusInfoPropertiesEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceSubgroupSizeControlFeaturesEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceSubgroupSizeControlPropertiesEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceMemoryBudgetPropertiesEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceYcbcrImageArraysFeaturesEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkHeadlessSurfaceCreateInfoEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceLineRasterizationFeaturesEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceLineRasterizationPropertiesEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPipelineRasterizationLineStateCreateInfoEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceShaderAtomicFloatFeaturesEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceIndexTypeUint8FeaturesEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceExtendedDynamicStateFeaturesEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceRobustness2FeaturesEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceRobustness2PropertiesEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkSamplerCustomBorderColorCreateInfoEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceCustomBorderColorPropertiesEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceCustomBorderColorFeaturesEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceImageRobustnessFeaturesEXT& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDevice4444FormatsFeaturesEXT& value);
diff --git a/external/vulkancts/framework/vulkan/generated/vulkansc/vkStrUtilImpl.inl b/external/vulkancts/framework/vulkan/generated/vulkansc/vkStrUtilImpl.inl
new file mode 100644 (file)
index 0000000..419329f
--- /dev/null
@@ -0,0 +1,7149 @@
+/* WARNING: This is auto-generated file. Do not modify, since changes will
+ * be lost! Modify the generating script instead.
+ */
+template<> const char* getTypeName<VkBuffer>                                   (void) { return "VkBuffer";                                     }
+template<> const char* getTypeName<VkImage>                                    (void) { return "VkImage";                                      }
+template<> const char* getTypeName<VkInstance>                                 (void) { return "VkInstance";                           }
+template<> const char* getTypeName<VkPhysicalDevice>                   (void) { return "VkPhysicalDevice";                     }
+template<> const char* getTypeName<VkDevice>                                   (void) { return "VkDevice";                                     }
+template<> const char* getTypeName<VkQueue>                                    (void) { return "VkQueue";                                      }
+template<> const char* getTypeName<VkSemaphore>                                (void) { return "VkSemaphore";                          }
+template<> const char* getTypeName<VkCommandBuffer>                    (void) { return "VkCommandBuffer";                      }
+template<> const char* getTypeName<VkFence>                                    (void) { return "VkFence";                                      }
+template<> const char* getTypeName<VkDeviceMemory>                             (void) { return "VkDeviceMemory";                       }
+template<> const char* getTypeName<VkEvent>                                    (void) { return "VkEvent";                                      }
+template<> const char* getTypeName<VkQueryPool>                                (void) { return "VkQueryPool";                          }
+template<> const char* getTypeName<VkBufferView>                               (void) { return "VkBufferView";                         }
+template<> const char* getTypeName<VkImageView>                                (void) { return "VkImageView";                          }
+template<> const char* getTypeName<VkShaderModule>                             (void) { return "VkShaderModule";                       }
+template<> const char* getTypeName<VkPipelineCache>                    (void) { return "VkPipelineCache";                      }
+template<> const char* getTypeName<VkPipelineLayout>                   (void) { return "VkPipelineLayout";                     }
+template<> const char* getTypeName<VkPipeline>                                 (void) { return "VkPipeline";                           }
+template<> const char* getTypeName<VkRenderPass>                               (void) { return "VkRenderPass";                         }
+template<> const char* getTypeName<VkDescriptorSetLayout>              (void) { return "VkDescriptorSetLayout";        }
+template<> const char* getTypeName<VkSampler>                                  (void) { return "VkSampler";                            }
+template<> const char* getTypeName<VkDescriptorSet>                    (void) { return "VkDescriptorSet";                      }
+template<> const char* getTypeName<VkDescriptorPool>                   (void) { return "VkDescriptorPool";                     }
+template<> const char* getTypeName<VkFramebuffer>                              (void) { return "VkFramebuffer";                        }
+template<> const char* getTypeName<VkCommandPool>                              (void) { return "VkCommandPool";                        }
+template<> const char* getTypeName<VkSamplerYcbcrConversion>   (void) { return "VkSamplerYcbcrConversion";     }
+template<> const char* getTypeName<VkSurfaceKHR>                               (void) { return "VkSurfaceKHR";                         }
+template<> const char* getTypeName<VkSwapchainKHR>                             (void) { return "VkSwapchainKHR";                       }
+template<> const char* getTypeName<VkDisplayKHR>                               (void) { return "VkDisplayKHR";                         }
+template<> const char* getTypeName<VkDisplayModeKHR>                   (void) { return "VkDisplayModeKHR";                     }
+
+namespace pt
+{
+std::ostream& operator<< (std::ostream& s, XlibDisplayPtr                              v) { return s << tcu::toHex(v.internal); }
+std::ostream& operator<< (std::ostream& s, XlibWindow                                  v) { return s << tcu::toHex(v.internal); }
+std::ostream& operator<< (std::ostream& s, XlibVisualID                                        v) { return s << tcu::toHex(v.internal); }
+std::ostream& operator<< (std::ostream& s, XcbConnectionPtr                            v) { return s << tcu::toHex(v.internal); }
+std::ostream& operator<< (std::ostream& s, XcbWindow                                   v) { return s << tcu::toHex(v.internal); }
+std::ostream& operator<< (std::ostream& s, XcbVisualid                                 v) { return s << tcu::toHex(v.internal); }
+std::ostream& operator<< (std::ostream& s, WaylandDisplayPtr                   v) { return s << tcu::toHex(v.internal); }
+std::ostream& operator<< (std::ostream& s, WaylandSurfacePtr                   v) { return s << tcu::toHex(v.internal); }
+std::ostream& operator<< (std::ostream& s, MirConnectionPtr                            v) { return s << tcu::toHex(v.internal); }
+std::ostream& operator<< (std::ostream& s, MirSurfacePtr                               v) { return s << tcu::toHex(v.internal); }
+std::ostream& operator<< (std::ostream& s, AndroidNativeWindowPtr              v) { return s << tcu::toHex(v.internal); }
+std::ostream& operator<< (std::ostream& s, Win32InstanceHandle                 v) { return s << tcu::toHex(v.internal); }
+std::ostream& operator<< (std::ostream& s, Win32WindowHandle                   v) { return s << tcu::toHex(v.internal); }
+std::ostream& operator<< (std::ostream& s, Win32Handle                                 v) { return s << tcu::toHex(v.internal); }
+std::ostream& operator<< (std::ostream& s, Win32SecurityAttributesPtr  v) { return s << tcu::toHex(v.internal); }
+std::ostream& operator<< (std::ostream& s, AndroidHardwareBufferPtr            v) { return s << tcu::toHex(v.internal); }
+std::ostream& operator<< (std::ostream& s, Win32MonitorHandle                  v) { return s << tcu::toHex(v.internal); }
+std::ostream& operator<< (std::ostream& s, Win32LPCWSTR                                        v) { return s << tcu::toHex(v.internal); }
+std::ostream& operator<< (std::ostream& s, RROutput                                            v) { return s << tcu::toHex(v.internal); }
+std::ostream& operator<< (std::ostream& s, zx_handle_t                                 v) { return s << tcu::toHex(v.internal); }
+std::ostream& operator<< (std::ostream& s, GgpFrameToken                               v) { return s << tcu::toHex(v.internal); }
+std::ostream& operator<< (std::ostream& s, GgpStreamDescriptor                 v) { return s << tcu::toHex(v.internal); }
+std::ostream& operator<< (std::ostream& s, CAMetalLayer                                        v) { return s << tcu::toHex(v.internal); }
+}
+
+const char* getResultName (VkResult value)
+{
+       switch (value)
+       {
+               case VK_SUCCESS:                                                                                        return "VK_SUCCESS";
+               case VK_NOT_READY:                                                                                      return "VK_NOT_READY";
+               case VK_TIMEOUT:                                                                                        return "VK_TIMEOUT";
+               case VK_EVENT_SET:                                                                                      return "VK_EVENT_SET";
+               case VK_EVENT_RESET:                                                                            return "VK_EVENT_RESET";
+               case VK_INCOMPLETE:                                                                                     return "VK_INCOMPLETE";
+               case VK_ERROR_OUT_OF_HOST_MEMORY:                                                       return "VK_ERROR_OUT_OF_HOST_MEMORY";
+               case VK_ERROR_OUT_OF_DEVICE_MEMORY:                                                     return "VK_ERROR_OUT_OF_DEVICE_MEMORY";
+               case VK_ERROR_INITIALIZATION_FAILED:                                            return "VK_ERROR_INITIALIZATION_FAILED";
+               case VK_ERROR_DEVICE_LOST:                                                                      return "VK_ERROR_DEVICE_LOST";
+               case VK_ERROR_MEMORY_MAP_FAILED:                                                        return "VK_ERROR_MEMORY_MAP_FAILED";
+               case VK_ERROR_LAYER_NOT_PRESENT:                                                        return "VK_ERROR_LAYER_NOT_PRESENT";
+               case VK_ERROR_EXTENSION_NOT_PRESENT:                                            return "VK_ERROR_EXTENSION_NOT_PRESENT";
+               case VK_ERROR_FEATURE_NOT_PRESENT:                                                      return "VK_ERROR_FEATURE_NOT_PRESENT";
+               case VK_ERROR_INCOMPATIBLE_DRIVER:                                                      return "VK_ERROR_INCOMPATIBLE_DRIVER";
+               case VK_ERROR_TOO_MANY_OBJECTS:                                                         return "VK_ERROR_TOO_MANY_OBJECTS";
+               case VK_ERROR_FORMAT_NOT_SUPPORTED:                                                     return "VK_ERROR_FORMAT_NOT_SUPPORTED";
+               case VK_ERROR_FRAGMENTED_POOL:                                                          return "VK_ERROR_FRAGMENTED_POOL";
+               case VK_ERROR_UNKNOWN:                                                                          return "VK_ERROR_UNKNOWN";
+               case VK_ERROR_OUT_OF_POOL_MEMORY:                                                       return "VK_ERROR_OUT_OF_POOL_MEMORY";
+               case VK_ERROR_INVALID_EXTERNAL_HANDLE:                                          return "VK_ERROR_INVALID_EXTERNAL_HANDLE";
+               case VK_ERROR_FRAGMENTATION:                                                            return "VK_ERROR_FRAGMENTATION";
+               case VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS:                           return "VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS";
+               case VK_ERROR_INVALID_PIPELINE_CACHE_DATA:                                      return "VK_ERROR_INVALID_PIPELINE_CACHE_DATA";
+               case VK_ERROR_NO_PIPELINE_MATCH:                                                        return "VK_ERROR_NO_PIPELINE_MATCH";
+               case VK_ERROR_SURFACE_LOST_KHR:                                                         return "VK_ERROR_SURFACE_LOST_KHR";
+               case VK_ERROR_NATIVE_WINDOW_IN_USE_KHR:                                         return "VK_ERROR_NATIVE_WINDOW_IN_USE_KHR";
+               case VK_SUBOPTIMAL_KHR:                                                                         return "VK_SUBOPTIMAL_KHR";
+               case VK_ERROR_OUT_OF_DATE_KHR:                                                          return "VK_ERROR_OUT_OF_DATE_KHR";
+               case VK_ERROR_INCOMPATIBLE_DISPLAY_KHR:                                         return "VK_ERROR_INCOMPATIBLE_DISPLAY_KHR";
+               case VK_ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT:     return "VK_ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT";
+               case VK_ERROR_NOT_PERMITTED_EXT:                                                        return "VK_ERROR_NOT_PERMITTED_EXT";
+               case VK_RESULT_MAX_ENUM:                                                                        return "VK_RESULT_MAX_ENUM";
+               default:                                                                                                        return DE_NULL;
+       }
+}
+
+const char* getStructureTypeName (VkStructureType value)
+{
+       switch (value)
+       {
+               case VK_STRUCTURE_TYPE_APPLICATION_INFO:                                                                                                return "VK_STRUCTURE_TYPE_APPLICATION_INFO";
+               case VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO:                                                                                    return "VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO";
+               case VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO:                                                                                return "VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO";
+               case VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO:                                                                                              return "VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO";
+               case VK_STRUCTURE_TYPE_SUBMIT_INFO:                                                                                                             return "VK_STRUCTURE_TYPE_SUBMIT_INFO";
+               case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO:                                                                                    return "VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO";
+               case VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE:                                                                                             return "VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE";
+               case VK_STRUCTURE_TYPE_BIND_SPARSE_INFO:                                                                                                return "VK_STRUCTURE_TYPE_BIND_SPARSE_INFO";
+               case VK_STRUCTURE_TYPE_FENCE_CREATE_INFO:                                                                                               return "VK_STRUCTURE_TYPE_FENCE_CREATE_INFO";
+               case VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO:                                                                                   return "VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO";
+               case VK_STRUCTURE_TYPE_EVENT_CREATE_INFO:                                                                                               return "VK_STRUCTURE_TYPE_EVENT_CREATE_INFO";
+               case VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO:                                                                                  return "VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO";
+               case VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO:                                                                                              return "VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO";
+               case VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO:                                                                                 return "VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO";
+               case VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO:                                                                                               return "VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO";
+               case VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO:                                                                                  return "VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO";
+               case VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO:                                                                               return "VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO";
+               case VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO:                                                                              return "VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO";
+               case VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO:                                                               return "VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO";
+               case VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO:                                                 return "VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO";
+               case VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO:                                               return "VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO";
+               case VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO:                                                 return "VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO";
+               case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO:                                                             return "VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO";
+               case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO:                                                return "VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO";
+               case VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO:                                                  return "VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO";
+               case VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO:                                                return "VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO";
+               case VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO:                                                  return "VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO";
+               case VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO:                                                              return "VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO";
+               case VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO:                                                                   return "VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO";
+               case VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO:                                                                    return "VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO";
+               case VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO:                                                                             return "VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO";
+               case VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO:                                                                                             return "VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO";
+               case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO:                                                               return "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO";
+               case VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO:                                                                             return "VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO";
+               case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO:                                                                    return "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO";
+               case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET:                                                                                    return "VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET";
+               case VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET:                                                                                             return "VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET";
+               case VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO:                                                                                 return "VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO";
+               case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO:                                                                                 return "VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO";
+               case VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO:                                                                                return "VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO";
+               case VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO:                                                                    return "VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO";
+               case VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO:                                                                 return "VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO";
+               case VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO:                                                                               return "VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO";
+               case VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO:                                                                                  return "VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO";
+               case VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER:                                                                                   return "VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER";
+               case VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER:                                                                                    return "VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER";
+               case VK_STRUCTURE_TYPE_MEMORY_BARRIER:                                                                                                  return "VK_STRUCTURE_TYPE_MEMORY_BARRIER";
+               case VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO:                                                                             return "VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO";
+               case VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO:                                                                               return "VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES:                                                             return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES";
+               case VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO:                                                                                 return "VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO";
+               case VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO:                                                                                  return "VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES:                                                  return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES";
+               case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS:                                                                   return "VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS";
+               case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO:                                                                  return "VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO";
+               case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO:                                                                              return "VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO";
+               case VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO:                                                             return "VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO";
+               case VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO:                                                  return "VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO";
+               case VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO:                                                                                return "VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO";
+               case VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO:                                                                   return "VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO";
+               case VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO:                                                    return "VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO";
+               case VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO:                                                             return "VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES:                                                                return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES";
+               case VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO:                                                                 return "VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO";
+               case VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2:                                                               return "VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2";
+               case VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2:                                                                return "VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2";
+               case VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2:                                                 return "VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2";
+               case VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2:                                                                                   return "VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2";
+               case VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2:                                                              return "VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2:                                                                              return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2:                                                                    return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2";
+               case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2:                                                                                             return "VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2";
+               case VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2:                                                                               return "VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2:                                                             return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2";
+               case VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2:                                                                               return "VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2:                                                             return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2";
+               case VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2:                                                                return "VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2:                                              return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES:                                               return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES";
+               case VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO:                                 return "VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO";
+               case VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO:                                                                    return "VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO";
+               case VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO:                   return "VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO";
+               case VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO:                                                               return "VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES:                                                              return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES:                                                    return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES:                                              return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES";
+               case VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO:                                                                                   return "VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES:                                               return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES:                                             return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES";
+               case VK_STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2:                                                                                             return "VK_STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2";
+               case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO:                                                    return "VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO";
+               case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO:                                                                   return "VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO";
+               case VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO:                                                                    return "VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO";
+               case VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO:                                                    return "VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES:                               return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES";
+               case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES:                                return "VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO:                                              return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO";
+               case VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES:                                                                return "VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO:                                                    return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO";
+               case VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES:                                                                              return "VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES:                                                                   return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES";
+               case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO:                                                              return "VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO";
+               case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO:                                                               return "VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO";
+               case VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO:                                                                             return "VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO:                                                             return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO";
+               case VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES:                                                                               return "VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES";
+               case VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO:                                                                                return "VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO";
+               case VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO:                                                                    return "VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO:                                                 return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO";
+               case VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES:                                                                   return "VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES:                                                return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES";
+               case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT:                                                                   return "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES:                                 return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES:                                                             return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES:                                                   return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES:                                                             return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES:                                                   return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES";
+               case VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO:                                                                   return "VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO";
+               case VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2:                                                                                return "VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2";
+               case VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2:                                                                                  return "VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2";
+               case VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2:                                                                                   return "VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2";
+               case VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2:                                                                                    return "VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2";
+               case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2:                                                                               return "VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2";
+               case VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO:                                                                                              return "VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO";
+               case VK_STRUCTURE_TYPE_SUBPASS_END_INFO:                                                                                                return "VK_STRUCTURE_TYPE_SUBPASS_END_INFO";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES:                                                   return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES:                                                               return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES:                                    return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES:                                    return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES:                                               return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES";
+               case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO:                                 return "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES:                                    return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES:                                  return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES";
+               case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO:                  return "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO";
+               case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT:                 return "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES:                                return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES";
+               case VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE:                                               return "VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES:                                    return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES";
+               case VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO:                                                                 return "VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES:                                return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES";
+               case VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO:                                                              return "VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES:                                    return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES:                                  return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES";
+               case VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO:                                                             return "VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO";
+               case VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO:                                                               return "VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO";
+               case VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO:                                                               return "VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES:                 return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES:                 return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES:                 return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES";
+               case VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT:                                                             return "VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT";
+               case VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT:                                                   return "VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES:                                               return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES:                                             return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES:                                   return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES";
+               case VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO:                                                                              return "VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO";
+               case VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO:                                                                  return "VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO";
+               case VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO:                                                                                             return "VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO";
+               case VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO:                                                                                   return "VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES:                                  return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES";
+               case VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO:                                                                              return "VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO";
+               case VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO:                                               return "VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO";
+               case VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO:                                             return "VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO";
+               case VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO:                                               return "VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_SC_1_0_PROPERTIES:                                                return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_SC_1_0_PROPERTIES";
+               case VK_STRUCTURE_TYPE_DEVICE_MEMORY_RESERVATION_CREATE_INFO:                                                   return "VK_STRUCTURE_TYPE_DEVICE_MEMORY_RESERVATION_CREATE_INFO";
+               case VK_STRUCTURE_TYPE_COMMAND_POOL_MEMORY_RESERVATION_CREATE_INFO:                                             return "VK_STRUCTURE_TYPE_COMMAND_POOL_MEMORY_RESERVATION_CREATE_INFO";
+               case VK_STRUCTURE_TYPE_COMMAND_POOL_MEMORY_CONSUMPTION:                                                                 return "VK_STRUCTURE_TYPE_COMMAND_POOL_MEMORY_CONSUMPTION";
+               case VK_STRUCTURE_TYPE_PIPELINE_POOL_SIZE:                                                                                              return "VK_STRUCTURE_TYPE_PIPELINE_POOL_SIZE";
+               case VK_STRUCTURE_TYPE_PIPELINE_POOL_ENTRY_SIZE_CREATE_INFO:                                                    return "VK_STRUCTURE_TYPE_PIPELINE_POOL_ENTRY_SIZE_CREATE_INFO";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_SC_1_0_FEATURES:                                                  return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_SC_1_0_FEATURES";
+               case VK_STRUCTURE_TYPE_FAULT_DATA:                                                                                                              return "VK_STRUCTURE_TYPE_FAULT_DATA";
+               case VK_STRUCTURE_TYPE_FAULT_CALLBACK_INFO:                                                                                             return "VK_STRUCTURE_TYPE_FAULT_CALLBACK_INFO";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FAULT_HANDLING_PROPERTIES:                                               return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FAULT_HANDLING_PROPERTIES";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_IDENTIFIER_FEATURES:                                    return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_IDENTIFIER_FEATURES";
+               case VK_STRUCTURE_TYPE_PIPELINE_IDENTIFIER_INFO:                                                                                return "VK_STRUCTURE_TYPE_PIPELINE_IDENTIFIER_INFO";
+               case VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR:                                                                               return "VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR";
+               case VK_STRUCTURE_TYPE_PRESENT_INFO_KHR:                                                                                                return "VK_STRUCTURE_TYPE_PRESENT_INFO_KHR";
+               case VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR:                                                   return "VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR";
+               case VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR:                                                                 return "VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR";
+               case VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR:                                                    return "VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR";
+               case VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR:                                                                             return "VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR";
+               case VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR:                                                                   return "VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR";
+               case VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR:                                                  return "VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR";
+               case VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR:                                                                    return "VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR";
+               case VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR:                                                                 return "VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR";
+               case VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR:                                                                                return "VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT:               return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT";
+               case VK_STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT:                                                                 return "VK_STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT:                                                return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT";
+               case VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR:                                                                               return "VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR";
+               case VK_STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR:                                                                                return "VK_STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR";
+               case VK_STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR:                                                                                  return "VK_STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR";
+               case VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR:                                                                    return "VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR";
+               case VK_STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR:                                                                               return "VK_STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR";
+               case VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR:                                                                                             return "VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR";
+               case VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT:                                                                              return "VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT";
+               case VK_STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT:                                                                                  return "VK_STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT";
+               case VK_STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT:                                                                                   return "VK_STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT";
+               case VK_STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT:                                                                                  return "VK_STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT";
+               case VK_STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT:                                                               return "VK_STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT:                                return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT";
+               case VK_STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT:                                return "VK_STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT:               return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT";
+               case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT:               return "VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT:                                  return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT";
+               case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT:                 return "VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT";
+               case VK_STRUCTURE_TYPE_HDR_METADATA_EXT:                                                                                                return "VK_STRUCTURE_TYPE_HDR_METADATA_EXT";
+               case VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR:                                                 return "VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR";
+               case VK_STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR:                                                                                return "VK_STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR";
+               case VK_STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR:                                                                                   return "VK_STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR:                                                              return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR";
+               case VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR:                                                                              return "VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR";
+               case VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR:                                                                                    return "VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR";
+               case VK_STRUCTURE_TYPE_DISPLAY_PROPERTIES_2_KHR:                                                                                return "VK_STRUCTURE_TYPE_DISPLAY_PROPERTIES_2_KHR";
+               case VK_STRUCTURE_TYPE_DISPLAY_PLANE_PROPERTIES_2_KHR:                                                                  return "VK_STRUCTURE_TYPE_DISPLAY_PLANE_PROPERTIES_2_KHR";
+               case VK_STRUCTURE_TYPE_DISPLAY_MODE_PROPERTIES_2_KHR:                                                                   return "VK_STRUCTURE_TYPE_DISPLAY_MODE_PROPERTIES_2_KHR";
+               case VK_STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR:                                                                                return "VK_STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR";
+               case VK_STRUCTURE_TYPE_DISPLAY_PLANE_CAPABILITIES_2_KHR:                                                                return "VK_STRUCTURE_TYPE_DISPLAY_PLANE_CAPABILITIES_2_KHR";
+               case VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT:                                                                               return "VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT";
+               case VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT:                                             return "VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT";
+               case VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT:                                 return "VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT:                                 return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT";
+               case VK_STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT:                                                                              return "VK_STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT:                   return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT:                 return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT";
+               case VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT:                             return "VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT";
+               case VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT:                                                 return "VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT:                              return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT";
+               case VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT:                                  return "VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT";
+               case VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT:                              return "VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT";
+               case VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT:                                                return "VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT:                                return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT";
+               case VK_STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT:                             return "VK_STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT";
+               case VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT:                                    return "VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT";
+               case VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT:                                                             return "VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT";
+               case VK_STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT:                                                              return "VK_STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT:                             return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR:                                               return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR";
+               case VK_STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT:                                                                   return "VK_STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT:                 return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT";
+               case VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT:                             return "VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT:                   return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT:                                             return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES_KHR:                return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES_KHR";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT:                    return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT";
+               case VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT:    return "VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT:                              return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT";
+               case VK_STRUCTURE_TYPE_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR:                                               return "VK_STRUCTURE_TYPE_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR";
+               case VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_STATE_CREATE_INFO_KHR:                    return "VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_STATE_CREATE_INFO_KHR";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_PROPERTIES_KHR:                    return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_PROPERTIES_KHR";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_FEATURES_KHR:                              return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_FEATURES_KHR";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_KHR:                                               return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_KHR";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT:                  return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT:                                    return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT:                  return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT:                                 return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT";
+               case VK_STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT:                                                                return "VK_STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT:                                 return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT";
+               case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT:                               return "VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT:                               return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT:                                return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT:                                   return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT:                             return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT:                             return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT:                   return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT:                                               return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT:                                             return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT";
+               case VK_STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT:                                             return "VK_STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT:                              return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT:                                return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT";
+               case VK_STRUCTURE_TYPE_REFRESH_OBJECT_LIST_KHR:                                                                                 return "VK_STRUCTURE_TYPE_REFRESH_OBJECT_LIST_KHR";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT:                                   return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT";
+               case VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2_KHR:                                                                                  return "VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2_KHR";
+               case VK_STRUCTURE_TYPE_COPY_IMAGE_INFO_2_KHR:                                                                                   return "VK_STRUCTURE_TYPE_COPY_IMAGE_INFO_2_KHR";
+               case VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2_KHR:                                                                 return "VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2_KHR";
+               case VK_STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2_KHR:                                                                 return "VK_STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2_KHR";
+               case VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2_KHR:                                                                                   return "VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2_KHR";
+               case VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2_KHR:                                                                                return "VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2_KHR";
+               case VK_STRUCTURE_TYPE_BUFFER_COPY_2_KHR:                                                                                               return "VK_STRUCTURE_TYPE_BUFFER_COPY_2_KHR";
+               case VK_STRUCTURE_TYPE_IMAGE_COPY_2_KHR:                                                                                                return "VK_STRUCTURE_TYPE_IMAGE_COPY_2_KHR";
+               case VK_STRUCTURE_TYPE_IMAGE_BLIT_2_KHR:                                                                                                return "VK_STRUCTURE_TYPE_IMAGE_BLIT_2_KHR";
+               case VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2_KHR:                                                                                 return "VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2_KHR";
+               case VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2_KHR:                                                                                             return "VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2_KHR";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT:                                               return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT";
+               case VK_STRUCTURE_TYPE_MAX_ENUM:                                                                                                                return "VK_STRUCTURE_TYPE_MAX_ENUM";
+               default:                                                                                                                                                                return DE_NULL;
+       }
+}
+
+const char* getImageLayoutName (VkImageLayout value)
+{
+       switch (value)
+       {
+               case VK_IMAGE_LAYOUT_UNDEFINED:                                                                         return "VK_IMAGE_LAYOUT_UNDEFINED";
+               case VK_IMAGE_LAYOUT_GENERAL:                                                                           return "VK_IMAGE_LAYOUT_GENERAL";
+               case VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL:                                          return "VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL";
+               case VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL:                          return "VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL";
+               case VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL:                           return "VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL";
+               case VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL:                                          return "VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL";
+               case VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL:                                                      return "VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL";
+               case VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL:                                                      return "VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL";
+               case VK_IMAGE_LAYOUT_PREINITIALIZED:                                                            return "VK_IMAGE_LAYOUT_PREINITIALIZED";
+               case VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL:        return "VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL";
+               case VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL:        return "VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL";
+               case VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL:                                          return "VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL";
+               case VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL:                                           return "VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL";
+               case VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL:                                        return "VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL";
+               case VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL:                                         return "VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL";
+               case VK_IMAGE_LAYOUT_PRESENT_SRC_KHR:                                                           return "VK_IMAGE_LAYOUT_PRESENT_SRC_KHR";
+               case VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR:                                                        return "VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR";
+               case VK_IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV:                                           return "VK_IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV";
+               case VK_IMAGE_LAYOUT_MAX_ENUM:                                                                          return "VK_IMAGE_LAYOUT_MAX_ENUM";
+               default:                                                                                                                        return DE_NULL;
+       }
+}
+
+const char* getObjectTypeName (VkObjectType value)
+{
+       switch (value)
+       {
+               case VK_OBJECT_TYPE_UNKNOWN:                                    return "VK_OBJECT_TYPE_UNKNOWN";
+               case VK_OBJECT_TYPE_INSTANCE:                                   return "VK_OBJECT_TYPE_INSTANCE";
+               case VK_OBJECT_TYPE_PHYSICAL_DEVICE:                    return "VK_OBJECT_TYPE_PHYSICAL_DEVICE";
+               case VK_OBJECT_TYPE_DEVICE:                                             return "VK_OBJECT_TYPE_DEVICE";
+               case VK_OBJECT_TYPE_QUEUE:                                              return "VK_OBJECT_TYPE_QUEUE";
+               case VK_OBJECT_TYPE_SEMAPHORE:                                  return "VK_OBJECT_TYPE_SEMAPHORE";
+               case VK_OBJECT_TYPE_COMMAND_BUFFER:                             return "VK_OBJECT_TYPE_COMMAND_BUFFER";
+               case VK_OBJECT_TYPE_FENCE:                                              return "VK_OBJECT_TYPE_FENCE";
+               case VK_OBJECT_TYPE_DEVICE_MEMORY:                              return "VK_OBJECT_TYPE_DEVICE_MEMORY";
+               case VK_OBJECT_TYPE_BUFFER:                                             return "VK_OBJECT_TYPE_BUFFER";
+               case VK_OBJECT_TYPE_IMAGE:                                              return "VK_OBJECT_TYPE_IMAGE";
+               case VK_OBJECT_TYPE_EVENT:                                              return "VK_OBJECT_TYPE_EVENT";
+               case VK_OBJECT_TYPE_QUERY_POOL:                                 return "VK_OBJECT_TYPE_QUERY_POOL";
+               case VK_OBJECT_TYPE_BUFFER_VIEW:                                return "VK_OBJECT_TYPE_BUFFER_VIEW";
+               case VK_OBJECT_TYPE_IMAGE_VIEW:                                 return "VK_OBJECT_TYPE_IMAGE_VIEW";
+               case VK_OBJECT_TYPE_SHADER_MODULE:                              return "VK_OBJECT_TYPE_SHADER_MODULE";
+               case VK_OBJECT_TYPE_PIPELINE_CACHE:                             return "VK_OBJECT_TYPE_PIPELINE_CACHE";
+               case VK_OBJECT_TYPE_PIPELINE_LAYOUT:                    return "VK_OBJECT_TYPE_PIPELINE_LAYOUT";
+               case VK_OBJECT_TYPE_RENDER_PASS:                                return "VK_OBJECT_TYPE_RENDER_PASS";
+               case VK_OBJECT_TYPE_PIPELINE:                                   return "VK_OBJECT_TYPE_PIPELINE";
+               case VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT:              return "VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT";
+               case VK_OBJECT_TYPE_SAMPLER:                                    return "VK_OBJECT_TYPE_SAMPLER";
+               case VK_OBJECT_TYPE_DESCRIPTOR_POOL:                    return "VK_OBJECT_TYPE_DESCRIPTOR_POOL";
+               case VK_OBJECT_TYPE_DESCRIPTOR_SET:                             return "VK_OBJECT_TYPE_DESCRIPTOR_SET";
+               case VK_OBJECT_TYPE_FRAMEBUFFER:                                return "VK_OBJECT_TYPE_FRAMEBUFFER";
+               case VK_OBJECT_TYPE_COMMAND_POOL:                               return "VK_OBJECT_TYPE_COMMAND_POOL";
+               case VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION:   return "VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION";
+               case VK_OBJECT_TYPE_SURFACE_KHR:                                return "VK_OBJECT_TYPE_SURFACE_KHR";
+               case VK_OBJECT_TYPE_SWAPCHAIN_KHR:                              return "VK_OBJECT_TYPE_SWAPCHAIN_KHR";
+               case VK_OBJECT_TYPE_DISPLAY_KHR:                                return "VK_OBJECT_TYPE_DISPLAY_KHR";
+               case VK_OBJECT_TYPE_DISPLAY_MODE_KHR:                   return "VK_OBJECT_TYPE_DISPLAY_MODE_KHR";
+               case VK_OBJECT_TYPE_MAX_ENUM:                                   return "VK_OBJECT_TYPE_MAX_ENUM";
+               default:                                                                                return DE_NULL;
+       }
+}
+
+const char* getVendorIdName (VkVendorId value)
+{
+       switch (value)
+       {
+               case VK_VENDOR_ID_VIV:          return "VK_VENDOR_ID_VIV";
+               case VK_VENDOR_ID_VSI:          return "VK_VENDOR_ID_VSI";
+               case VK_VENDOR_ID_KAZAN:        return "VK_VENDOR_ID_KAZAN";
+               case VK_VENDOR_ID_CODEPLAY:     return "VK_VENDOR_ID_CODEPLAY";
+               case VK_VENDOR_ID_MESA:         return "VK_VENDOR_ID_MESA";
+               case VK_VENDOR_ID_POCL:         return "VK_VENDOR_ID_POCL";
+               case VK_VENDOR_ID_MAX_ENUM:     return "VK_VENDOR_ID_MAX_ENUM";
+               default:                                        return DE_NULL;
+       }
+}
+
+const char* getPipelineCacheHeaderVersionName (VkPipelineCacheHeaderVersion value)
+{
+       switch (value)
+       {
+               case VK_PIPELINE_CACHE_HEADER_VERSION_ONE:              return "VK_PIPELINE_CACHE_HEADER_VERSION_ONE";
+               case VK_PIPELINE_CACHE_HEADER_VERSION_MAX_ENUM: return "VK_PIPELINE_CACHE_HEADER_VERSION_MAX_ENUM";
+               default:                                                                                return DE_NULL;
+       }
+}
+
+const char* getSystemAllocationScopeName (VkSystemAllocationScope value)
+{
+       switch (value)
+       {
+               case VK_SYSTEM_ALLOCATION_SCOPE_COMMAND:        return "VK_SYSTEM_ALLOCATION_SCOPE_COMMAND";
+               case VK_SYSTEM_ALLOCATION_SCOPE_OBJECT:         return "VK_SYSTEM_ALLOCATION_SCOPE_OBJECT";
+               case VK_SYSTEM_ALLOCATION_SCOPE_CACHE:          return "VK_SYSTEM_ALLOCATION_SCOPE_CACHE";
+               case VK_SYSTEM_ALLOCATION_SCOPE_DEVICE:         return "VK_SYSTEM_ALLOCATION_SCOPE_DEVICE";
+               case VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE:       return "VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE";
+               case VK_SYSTEM_ALLOCATION_SCOPE_MAX_ENUM:       return "VK_SYSTEM_ALLOCATION_SCOPE_MAX_ENUM";
+               default:                                                                        return DE_NULL;
+       }
+}
+
+const char* getInternalAllocationTypeName (VkInternalAllocationType value)
+{
+       switch (value)
+       {
+               case VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE:    return "VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE";
+               case VK_INTERNAL_ALLOCATION_TYPE_MAX_ENUM:              return "VK_INTERNAL_ALLOCATION_TYPE_MAX_ENUM";
+               default:                                                                                return DE_NULL;
+       }
+}
+
+const char* getFormatName (VkFormat value)
+{
+       switch (value)
+       {
+               case VK_FORMAT_UNDEFINED:                                                                       return "VK_FORMAT_UNDEFINED";
+               case VK_FORMAT_R4G4_UNORM_PACK8:                                                        return "VK_FORMAT_R4G4_UNORM_PACK8";
+               case VK_FORMAT_R4G4B4A4_UNORM_PACK16:                                           return "VK_FORMAT_R4G4B4A4_UNORM_PACK16";
+               case VK_FORMAT_B4G4R4A4_UNORM_PACK16:                                           return "VK_FORMAT_B4G4R4A4_UNORM_PACK16";
+               case VK_FORMAT_R5G6B5_UNORM_PACK16:                                                     return "VK_FORMAT_R5G6B5_UNORM_PACK16";
+               case VK_FORMAT_B5G6R5_UNORM_PACK16:                                                     return "VK_FORMAT_B5G6R5_UNORM_PACK16";
+               case VK_FORMAT_R5G5B5A1_UNORM_PACK16:                                           return "VK_FORMAT_R5G5B5A1_UNORM_PACK16";
+               case VK_FORMAT_B5G5R5A1_UNORM_PACK16:                                           return "VK_FORMAT_B5G5R5A1_UNORM_PACK16";
+               case VK_FORMAT_A1R5G5B5_UNORM_PACK16:                                           return "VK_FORMAT_A1R5G5B5_UNORM_PACK16";
+               case VK_FORMAT_R8_UNORM:                                                                        return "VK_FORMAT_R8_UNORM";
+               case VK_FORMAT_R8_SNORM:                                                                        return "VK_FORMAT_R8_SNORM";
+               case VK_FORMAT_R8_USCALED:                                                                      return "VK_FORMAT_R8_USCALED";
+               case VK_FORMAT_R8_SSCALED:                                                                      return "VK_FORMAT_R8_SSCALED";
+               case VK_FORMAT_R8_UINT:                                                                         return "VK_FORMAT_R8_UINT";
+               case VK_FORMAT_R8_SINT:                                                                         return "VK_FORMAT_R8_SINT";
+               case VK_FORMAT_R8_SRGB:                                                                         return "VK_FORMAT_R8_SRGB";
+               case VK_FORMAT_R8G8_UNORM:                                                                      return "VK_FORMAT_R8G8_UNORM";
+               case VK_FORMAT_R8G8_SNORM:                                                                      return "VK_FORMAT_R8G8_SNORM";
+               case VK_FORMAT_R8G8_USCALED:                                                            return "VK_FORMAT_R8G8_USCALED";
+               case VK_FORMAT_R8G8_SSCALED:                                                            return "VK_FORMAT_R8G8_SSCALED";
+               case VK_FORMAT_R8G8_UINT:                                                                       return "VK_FORMAT_R8G8_UINT";
+               case VK_FORMAT_R8G8_SINT:                                                                       return "VK_FORMAT_R8G8_SINT";
+               case VK_FORMAT_R8G8_SRGB:                                                                       return "VK_FORMAT_R8G8_SRGB";
+               case VK_FORMAT_R8G8B8_UNORM:                                                            return "VK_FORMAT_R8G8B8_UNORM";
+               case VK_FORMAT_R8G8B8_SNORM:                                                            return "VK_FORMAT_R8G8B8_SNORM";
+               case VK_FORMAT_R8G8B8_USCALED:                                                          return "VK_FORMAT_R8G8B8_USCALED";
+               case VK_FORMAT_R8G8B8_SSCALED:                                                          return "VK_FORMAT_R8G8B8_SSCALED";
+               case VK_FORMAT_R8G8B8_UINT:                                                                     return "VK_FORMAT_R8G8B8_UINT";
+               case VK_FORMAT_R8G8B8_SINT:                                                                     return "VK_FORMAT_R8G8B8_SINT";
+               case VK_FORMAT_R8G8B8_SRGB:                                                                     return "VK_FORMAT_R8G8B8_SRGB";
+               case VK_FORMAT_B8G8R8_UNORM:                                                            return "VK_FORMAT_B8G8R8_UNORM";
+               case VK_FORMAT_B8G8R8_SNORM:                                                            return "VK_FORMAT_B8G8R8_SNORM";
+               case VK_FORMAT_B8G8R8_USCALED:                                                          return "VK_FORMAT_B8G8R8_USCALED";
+               case VK_FORMAT_B8G8R8_SSCALED:                                                          return "VK_FORMAT_B8G8R8_SSCALED";
+               case VK_FORMAT_B8G8R8_UINT:                                                                     return "VK_FORMAT_B8G8R8_UINT";
+               case VK_FORMAT_B8G8R8_SINT:                                                                     return "VK_FORMAT_B8G8R8_SINT";
+               case VK_FORMAT_B8G8R8_SRGB:                                                                     return "VK_FORMAT_B8G8R8_SRGB";
+               case VK_FORMAT_R8G8B8A8_UNORM:                                                          return "VK_FORMAT_R8G8B8A8_UNORM";
+               case VK_FORMAT_R8G8B8A8_SNORM:                                                          return "VK_FORMAT_R8G8B8A8_SNORM";
+               case VK_FORMAT_R8G8B8A8_USCALED:                                                        return "VK_FORMAT_R8G8B8A8_USCALED";
+               case VK_FORMAT_R8G8B8A8_SSCALED:                                                        return "VK_FORMAT_R8G8B8A8_SSCALED";
+               case VK_FORMAT_R8G8B8A8_UINT:                                                           return "VK_FORMAT_R8G8B8A8_UINT";
+               case VK_FORMAT_R8G8B8A8_SINT:                                                           return "VK_FORMAT_R8G8B8A8_SINT";
+               case VK_FORMAT_R8G8B8A8_SRGB:                                                           return "VK_FORMAT_R8G8B8A8_SRGB";
+               case VK_FORMAT_B8G8R8A8_UNORM:                                                          return "VK_FORMAT_B8G8R8A8_UNORM";
+               case VK_FORMAT_B8G8R8A8_SNORM:                                                          return "VK_FORMAT_B8G8R8A8_SNORM";
+               case VK_FORMAT_B8G8R8A8_USCALED:                                                        return "VK_FORMAT_B8G8R8A8_USCALED";
+               case VK_FORMAT_B8G8R8A8_SSCALED:                                                        return "VK_FORMAT_B8G8R8A8_SSCALED";
+               case VK_FORMAT_B8G8R8A8_UINT:                                                           return "VK_FORMAT_B8G8R8A8_UINT";
+               case VK_FORMAT_B8G8R8A8_SINT:                                                           return "VK_FORMAT_B8G8R8A8_SINT";
+               case VK_FORMAT_B8G8R8A8_SRGB:                                                           return "VK_FORMAT_B8G8R8A8_SRGB";
+               case VK_FORMAT_A8B8G8R8_UNORM_PACK32:                                           return "VK_FORMAT_A8B8G8R8_UNORM_PACK32";
+               case VK_FORMAT_A8B8G8R8_SNORM_PACK32:                                           return "VK_FORMAT_A8B8G8R8_SNORM_PACK32";
+               case VK_FORMAT_A8B8G8R8_USCALED_PACK32:                                         return "VK_FORMAT_A8B8G8R8_USCALED_PACK32";
+               case VK_FORMAT_A8B8G8R8_SSCALED_PACK32:                                         return "VK_FORMAT_A8B8G8R8_SSCALED_PACK32";
+               case VK_FORMAT_A8B8G8R8_UINT_PACK32:                                            return "VK_FORMAT_A8B8G8R8_UINT_PACK32";
+               case VK_FORMAT_A8B8G8R8_SINT_PACK32:                                            return "VK_FORMAT_A8B8G8R8_SINT_PACK32";
+               case VK_FORMAT_A8B8G8R8_SRGB_PACK32:                                            return "VK_FORMAT_A8B8G8R8_SRGB_PACK32";
+               case VK_FORMAT_A2R10G10B10_UNORM_PACK32:                                        return "VK_FORMAT_A2R10G10B10_UNORM_PACK32";
+               case VK_FORMAT_A2R10G10B10_SNORM_PACK32:                                        return "VK_FORMAT_A2R10G10B10_SNORM_PACK32";
+               case VK_FORMAT_A2R10G10B10_USCALED_PACK32:                                      return "VK_FORMAT_A2R10G10B10_USCALED_PACK32";
+               case VK_FORMAT_A2R10G10B10_SSCALED_PACK32:                                      return "VK_FORMAT_A2R10G10B10_SSCALED_PACK32";
+               case VK_FORMAT_A2R10G10B10_UINT_PACK32:                                         return "VK_FORMAT_A2R10G10B10_UINT_PACK32";
+               case VK_FORMAT_A2R10G10B10_SINT_PACK32:                                         return "VK_FORMAT_A2R10G10B10_SINT_PACK32";
+               case VK_FORMAT_A2B10G10R10_UNORM_PACK32:                                        return "VK_FORMAT_A2B10G10R10_UNORM_PACK32";
+               case VK_FORMAT_A2B10G10R10_SNORM_PACK32:                                        return "VK_FORMAT_A2B10G10R10_SNORM_PACK32";
+               case VK_FORMAT_A2B10G10R10_USCALED_PACK32:                                      return "VK_FORMAT_A2B10G10R10_USCALED_PACK32";
+               case VK_FORMAT_A2B10G10R10_SSCALED_PACK32:                                      return "VK_FORMAT_A2B10G10R10_SSCALED_PACK32";
+               case VK_FORMAT_A2B10G10R10_UINT_PACK32:                                         return "VK_FORMAT_A2B10G10R10_UINT_PACK32";
+               case VK_FORMAT_A2B10G10R10_SINT_PACK32:                                         return "VK_FORMAT_A2B10G10R10_SINT_PACK32";
+               case VK_FORMAT_R16_UNORM:                                                                       return "VK_FORMAT_R16_UNORM";
+               case VK_FORMAT_R16_SNORM:                                                                       return "VK_FORMAT_R16_SNORM";
+               case VK_FORMAT_R16_USCALED:                                                                     return "VK_FORMAT_R16_USCALED";
+               case VK_FORMAT_R16_SSCALED:                                                                     return "VK_FORMAT_R16_SSCALED";
+               case VK_FORMAT_R16_UINT:                                                                        return "VK_FORMAT_R16_UINT";
+               case VK_FORMAT_R16_SINT:                                                                        return "VK_FORMAT_R16_SINT";
+               case VK_FORMAT_R16_SFLOAT:                                                                      return "VK_FORMAT_R16_SFLOAT";
+               case VK_FORMAT_R16G16_UNORM:                                                            return "VK_FORMAT_R16G16_UNORM";
+               case VK_FORMAT_R16G16_SNORM:                                                            return "VK_FORMAT_R16G16_SNORM";
+               case VK_FORMAT_R16G16_USCALED:                                                          return "VK_FORMAT_R16G16_USCALED";
+               case VK_FORMAT_R16G16_SSCALED:                                                          return "VK_FORMAT_R16G16_SSCALED";
+               case VK_FORMAT_R16G16_UINT:                                                                     return "VK_FORMAT_R16G16_UINT";
+               case VK_FORMAT_R16G16_SINT:                                                                     return "VK_FORMAT_R16G16_SINT";
+               case VK_FORMAT_R16G16_SFLOAT:                                                           return "VK_FORMAT_R16G16_SFLOAT";
+               case VK_FORMAT_R16G16B16_UNORM:                                                         return "VK_FORMAT_R16G16B16_UNORM";
+               case VK_FORMAT_R16G16B16_SNORM:                                                         return "VK_FORMAT_R16G16B16_SNORM";
+               case VK_FORMAT_R16G16B16_USCALED:                                                       return "VK_FORMAT_R16G16B16_USCALED";
+               case VK_FORMAT_R16G16B16_SSCALED:                                                       return "VK_FORMAT_R16G16B16_SSCALED";
+               case VK_FORMAT_R16G16B16_UINT:                                                          return "VK_FORMAT_R16G16B16_UINT";
+               case VK_FORMAT_R16G16B16_SINT:                                                          return "VK_FORMAT_R16G16B16_SINT";
+               case VK_FORMAT_R16G16B16_SFLOAT:                                                        return "VK_FORMAT_R16G16B16_SFLOAT";
+               case VK_FORMAT_R16G16B16A16_UNORM:                                                      return "VK_FORMAT_R16G16B16A16_UNORM";
+               case VK_FORMAT_R16G16B16A16_SNORM:                                                      return "VK_FORMAT_R16G16B16A16_SNORM";
+               case VK_FORMAT_R16G16B16A16_USCALED:                                            return "VK_FORMAT_R16G16B16A16_USCALED";
+               case VK_FORMAT_R16G16B16A16_SSCALED:                                            return "VK_FORMAT_R16G16B16A16_SSCALED";
+               case VK_FORMAT_R16G16B16A16_UINT:                                                       return "VK_FORMAT_R16G16B16A16_UINT";
+               case VK_FORMAT_R16G16B16A16_SINT:                                                       return "VK_FORMAT_R16G16B16A16_SINT";
+               case VK_FORMAT_R16G16B16A16_SFLOAT:                                                     return "VK_FORMAT_R16G16B16A16_SFLOAT";
+               case VK_FORMAT_R32_UINT:                                                                        return "VK_FORMAT_R32_UINT";
+               case VK_FORMAT_R32_SINT:                                                                        return "VK_FORMAT_R32_SINT";
+               case VK_FORMAT_R32_SFLOAT:                                                                      return "VK_FORMAT_R32_SFLOAT";
+               case VK_FORMAT_R32G32_UINT:                                                                     return "VK_FORMAT_R32G32_UINT";
+               case VK_FORMAT_R32G32_SINT:                                                                     return "VK_FORMAT_R32G32_SINT";
+               case VK_FORMAT_R32G32_SFLOAT:                                                           return "VK_FORMAT_R32G32_SFLOAT";
+               case VK_FORMAT_R32G32B32_UINT:                                                          return "VK_FORMAT_R32G32B32_UINT";
+               case VK_FORMAT_R32G32B32_SINT:                                                          return "VK_FORMAT_R32G32B32_SINT";
+               case VK_FORMAT_R32G32B32_SFLOAT:                                                        return "VK_FORMAT_R32G32B32_SFLOAT";
+               case VK_FORMAT_R32G32B32A32_UINT:                                                       return "VK_FORMAT_R32G32B32A32_UINT";
+               case VK_FORMAT_R32G32B32A32_SINT:                                                       return "VK_FORMAT_R32G32B32A32_SINT";
+               case VK_FORMAT_R32G32B32A32_SFLOAT:                                                     return "VK_FORMAT_R32G32B32A32_SFLOAT";
+               case VK_FORMAT_R64_UINT:                                                                        return "VK_FORMAT_R64_UINT";
+               case VK_FORMAT_R64_SINT:                                                                        return "VK_FORMAT_R64_SINT";
+               case VK_FORMAT_R64_SFLOAT:                                                                      return "VK_FORMAT_R64_SFLOAT";
+               case VK_FORMAT_R64G64_UINT:                                                                     return "VK_FORMAT_R64G64_UINT";
+               case VK_FORMAT_R64G64_SINT:                                                                     return "VK_FORMAT_R64G64_SINT";
+               case VK_FORMAT_R64G64_SFLOAT:                                                           return "VK_FORMAT_R64G64_SFLOAT";
+               case VK_FORMAT_R64G64B64_UINT:                                                          return "VK_FORMAT_R64G64B64_UINT";
+               case VK_FORMAT_R64G64B64_SINT:                                                          return "VK_FORMAT_R64G64B64_SINT";
+               case VK_FORMAT_R64G64B64_SFLOAT:                                                        return "VK_FORMAT_R64G64B64_SFLOAT";
+               case VK_FORMAT_R64G64B64A64_UINT:                                                       return "VK_FORMAT_R64G64B64A64_UINT";
+               case VK_FORMAT_R64G64B64A64_SINT:                                                       return "VK_FORMAT_R64G64B64A64_SINT";
+               case VK_FORMAT_R64G64B64A64_SFLOAT:                                                     return "VK_FORMAT_R64G64B64A64_SFLOAT";
+               case VK_FORMAT_B10G11R11_UFLOAT_PACK32:                                         return "VK_FORMAT_B10G11R11_UFLOAT_PACK32";
+               case VK_FORMAT_E5B9G9R9_UFLOAT_PACK32:                                          return "VK_FORMAT_E5B9G9R9_UFLOAT_PACK32";
+               case VK_FORMAT_D16_UNORM:                                                                       return "VK_FORMAT_D16_UNORM";
+               case VK_FORMAT_X8_D24_UNORM_PACK32:                                                     return "VK_FORMAT_X8_D24_UNORM_PACK32";
+               case VK_FORMAT_D32_SFLOAT:                                                                      return "VK_FORMAT_D32_SFLOAT";
+               case VK_FORMAT_S8_UINT:                                                                         return "VK_FORMAT_S8_UINT";
+               case VK_FORMAT_D16_UNORM_S8_UINT:                                                       return "VK_FORMAT_D16_UNORM_S8_UINT";
+               case VK_FORMAT_D24_UNORM_S8_UINT:                                                       return "VK_FORMAT_D24_UNORM_S8_UINT";
+               case VK_FORMAT_D32_SFLOAT_S8_UINT:                                                      return "VK_FORMAT_D32_SFLOAT_S8_UINT";
+               case VK_FORMAT_BC1_RGB_UNORM_BLOCK:                                                     return "VK_FORMAT_BC1_RGB_UNORM_BLOCK";
+               case VK_FORMAT_BC1_RGB_SRGB_BLOCK:                                                      return "VK_FORMAT_BC1_RGB_SRGB_BLOCK";
+               case VK_FORMAT_BC1_RGBA_UNORM_BLOCK:                                            return "VK_FORMAT_BC1_RGBA_UNORM_BLOCK";
+               case VK_FORMAT_BC1_RGBA_SRGB_BLOCK:                                                     return "VK_FORMAT_BC1_RGBA_SRGB_BLOCK";
+               case VK_FORMAT_BC2_UNORM_BLOCK:                                                         return "VK_FORMAT_BC2_UNORM_BLOCK";
+               case VK_FORMAT_BC2_SRGB_BLOCK:                                                          return "VK_FORMAT_BC2_SRGB_BLOCK";
+               case VK_FORMAT_BC3_UNORM_BLOCK:                                                         return "VK_FORMAT_BC3_UNORM_BLOCK";
+               case VK_FORMAT_BC3_SRGB_BLOCK:                                                          return "VK_FORMAT_BC3_SRGB_BLOCK";
+               case VK_FORMAT_BC4_UNORM_BLOCK:                                                         return "VK_FORMAT_BC4_UNORM_BLOCK";
+               case VK_FORMAT_BC4_SNORM_BLOCK:                                                         return "VK_FORMAT_BC4_SNORM_BLOCK";
+               case VK_FORMAT_BC5_UNORM_BLOCK:                                                         return "VK_FORMAT_BC5_UNORM_BLOCK";
+               case VK_FORMAT_BC5_SNORM_BLOCK:                                                         return "VK_FORMAT_BC5_SNORM_BLOCK";
+               case VK_FORMAT_BC6H_UFLOAT_BLOCK:                                                       return "VK_FORMAT_BC6H_UFLOAT_BLOCK";
+               case VK_FORMAT_BC6H_SFLOAT_BLOCK:                                                       return "VK_FORMAT_BC6H_SFLOAT_BLOCK";
+               case VK_FORMAT_BC7_UNORM_BLOCK:                                                         return "VK_FORMAT_BC7_UNORM_BLOCK";
+               case VK_FORMAT_BC7_SRGB_BLOCK:                                                          return "VK_FORMAT_BC7_SRGB_BLOCK";
+               case VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK:                                         return "VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK";
+               case VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK:                                          return "VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK";
+               case VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK:                                       return "VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK";
+               case VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK:                                        return "VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK";
+               case VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK:                                       return "VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK";
+               case VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK:                                        return "VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK";
+               case VK_FORMAT_EAC_R11_UNORM_BLOCK:                                                     return "VK_FORMAT_EAC_R11_UNORM_BLOCK";
+               case VK_FORMAT_EAC_R11_SNORM_BLOCK:                                                     return "VK_FORMAT_EAC_R11_SNORM_BLOCK";
+               case VK_FORMAT_EAC_R11G11_UNORM_BLOCK:                                          return "VK_FORMAT_EAC_R11G11_UNORM_BLOCK";
+               case VK_FORMAT_EAC_R11G11_SNORM_BLOCK:                                          return "VK_FORMAT_EAC_R11G11_SNORM_BLOCK";
+               case VK_FORMAT_ASTC_4x4_UNORM_BLOCK:                                            return "VK_FORMAT_ASTC_4x4_UNORM_BLOCK";
+               case VK_FORMAT_ASTC_4x4_SRGB_BLOCK:                                                     return "VK_FORMAT_ASTC_4x4_SRGB_BLOCK";
+               case VK_FORMAT_ASTC_5x4_UNORM_BLOCK:                                            return "VK_FORMAT_ASTC_5x4_UNORM_BLOCK";
+               case VK_FORMAT_ASTC_5x4_SRGB_BLOCK:                                                     return "VK_FORMAT_ASTC_5x4_SRGB_BLOCK";
+               case VK_FORMAT_ASTC_5x5_UNORM_BLOCK:                                            return "VK_FORMAT_ASTC_5x5_UNORM_BLOCK";
+               case VK_FORMAT_ASTC_5x5_SRGB_BLOCK:                                                     return "VK_FORMAT_ASTC_5x5_SRGB_BLOCK";
+               case VK_FORMAT_ASTC_6x5_UNORM_BLOCK:                                            return "VK_FORMAT_ASTC_6x5_UNORM_BLOCK";
+               case VK_FORMAT_ASTC_6x5_SRGB_BLOCK:                                                     return "VK_FORMAT_ASTC_6x5_SRGB_BLOCK";
+               case VK_FORMAT_ASTC_6x6_UNORM_BLOCK:                                            return "VK_FORMAT_ASTC_6x6_UNORM_BLOCK";
+               case VK_FORMAT_ASTC_6x6_SRGB_BLOCK:                                                     return "VK_FORMAT_ASTC_6x6_SRGB_BLOCK";
+               case VK_FORMAT_ASTC_8x5_UNORM_BLOCK:                                            return "VK_FORMAT_ASTC_8x5_UNORM_BLOCK";
+               case VK_FORMAT_ASTC_8x5_SRGB_BLOCK:                                                     return "VK_FORMAT_ASTC_8x5_SRGB_BLOCK";
+               case VK_FORMAT_ASTC_8x6_UNORM_BLOCK:                                            return "VK_FORMAT_ASTC_8x6_UNORM_BLOCK";
+               case VK_FORMAT_ASTC_8x6_SRGB_BLOCK:                                                     return "VK_FORMAT_ASTC_8x6_SRGB_BLOCK";
+               case VK_FORMAT_ASTC_8x8_UNORM_BLOCK:                                            return "VK_FORMAT_ASTC_8x8_UNORM_BLOCK";
+               case VK_FORMAT_ASTC_8x8_SRGB_BLOCK:                                                     return "VK_FORMAT_ASTC_8x8_SRGB_BLOCK";
+               case VK_FORMAT_ASTC_10x5_UNORM_BLOCK:                                           return "VK_FORMAT_ASTC_10x5_UNORM_BLOCK";
+               case VK_FORMAT_ASTC_10x5_SRGB_BLOCK:                                            return "VK_FORMAT_ASTC_10x5_SRGB_BLOCK";
+               case VK_FORMAT_ASTC_10x6_UNORM_BLOCK:                                           return "VK_FORMAT_ASTC_10x6_UNORM_BLOCK";
+               case VK_FORMAT_ASTC_10x6_SRGB_BLOCK:                                            return "VK_FORMAT_ASTC_10x6_SRGB_BLOCK";
+               case VK_FORMAT_ASTC_10x8_UNORM_BLOCK:                                           return "VK_FORMAT_ASTC_10x8_UNORM_BLOCK";
+               case VK_FORMAT_ASTC_10x8_SRGB_BLOCK:                                            return "VK_FORMAT_ASTC_10x8_SRGB_BLOCK";
+               case VK_FORMAT_ASTC_10x10_UNORM_BLOCK:                                          return "VK_FORMAT_ASTC_10x10_UNORM_BLOCK";
+               case VK_FORMAT_ASTC_10x10_SRGB_BLOCK:                                           return "VK_FORMAT_ASTC_10x10_SRGB_BLOCK";
+               case VK_FORMAT_ASTC_12x10_UNORM_BLOCK:                                          return "VK_FORMAT_ASTC_12x10_UNORM_BLOCK";
+               case VK_FORMAT_ASTC_12x10_SRGB_BLOCK:                                           return "VK_FORMAT_ASTC_12x10_SRGB_BLOCK";
+               case VK_FORMAT_ASTC_12x12_UNORM_BLOCK:                                          return "VK_FORMAT_ASTC_12x12_UNORM_BLOCK";
+               case VK_FORMAT_ASTC_12x12_SRGB_BLOCK:                                           return "VK_FORMAT_ASTC_12x12_SRGB_BLOCK";
+               case VK_FORMAT_G8B8G8R8_422_UNORM:                                                      return "VK_FORMAT_G8B8G8R8_422_UNORM";
+               case VK_FORMAT_B8G8R8G8_422_UNORM:                                                      return "VK_FORMAT_B8G8R8G8_422_UNORM";
+               case VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM:                                       return "VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM";
+               case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM:                                        return "VK_FORMAT_G8_B8R8_2PLANE_420_UNORM";
+               case VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM:                                       return "VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM";
+               case VK_FORMAT_G8_B8R8_2PLANE_422_UNORM:                                        return "VK_FORMAT_G8_B8R8_2PLANE_422_UNORM";
+               case VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM:                                       return "VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM";
+               case VK_FORMAT_R10X6_UNORM_PACK16:                                                      return "VK_FORMAT_R10X6_UNORM_PACK16";
+               case VK_FORMAT_R10X6G10X6_UNORM_2PACK16:                                        return "VK_FORMAT_R10X6G10X6_UNORM_2PACK16";
+               case VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16:                      return "VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16";
+               case VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16:          return "VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16";
+               case VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16:          return "VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16";
+               case VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16:      return "VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16";
+               case VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16:       return "VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16";
+               case VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16:      return "VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16";
+               case VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16:       return "VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16";
+               case VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16:      return "VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16";
+               case VK_FORMAT_R12X4_UNORM_PACK16:                                                      return "VK_FORMAT_R12X4_UNORM_PACK16";
+               case VK_FORMAT_R12X4G12X4_UNORM_2PACK16:                                        return "VK_FORMAT_R12X4G12X4_UNORM_2PACK16";
+               case VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16:                      return "VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16";
+               case VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16:          return "VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16";
+               case VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16:          return "VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16";
+               case VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16:      return "VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16";
+               case VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16:       return "VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16";
+               case VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16:      return "VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16";
+               case VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16:       return "VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16";
+               case VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16:      return "VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16";
+               case VK_FORMAT_G16B16G16R16_422_UNORM:                                          return "VK_FORMAT_G16B16G16R16_422_UNORM";
+               case VK_FORMAT_B16G16R16G16_422_UNORM:                                          return "VK_FORMAT_B16G16R16G16_422_UNORM";
+               case VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM:                            return "VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM";
+               case VK_FORMAT_G16_B16R16_2PLANE_420_UNORM:                                     return "VK_FORMAT_G16_B16R16_2PLANE_420_UNORM";
+               case VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM:                            return "VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM";
+               case VK_FORMAT_G16_B16R16_2PLANE_422_UNORM:                                     return "VK_FORMAT_G16_B16R16_2PLANE_422_UNORM";
+               case VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM:                            return "VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM";
+               case VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT:                                       return "VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT";
+               case VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT:                                       return "VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT";
+               case VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT:                                       return "VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT";
+               case VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT:                                       return "VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT";
+               case VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT:                                       return "VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT";
+               case VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT:                                       return "VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT";
+               case VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT:                                       return "VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT";
+               case VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT:                                       return "VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT";
+               case VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT:                                      return "VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT";
+               case VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT:                                      return "VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT";
+               case VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT:                                      return "VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT";
+               case VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT:                                     return "VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT";
+               case VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT:                                     return "VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT";
+               case VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT:                                     return "VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT";
+               case VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT:                                       return "VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT";
+               case VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT:                                       return "VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT";
+               case VK_FORMAT_MAX_ENUM:                                                                        return "VK_FORMAT_MAX_ENUM";
+               default:                                                                                                        return DE_NULL;
+       }
+}
+
+const char* getImageTilingName (VkImageTiling value)
+{
+       switch (value)
+       {
+               case VK_IMAGE_TILING_OPTIMAL:                                   return "VK_IMAGE_TILING_OPTIMAL";
+               case VK_IMAGE_TILING_LINEAR:                                    return "VK_IMAGE_TILING_LINEAR";
+               case VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT:   return "VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT";
+               case VK_IMAGE_TILING_MAX_ENUM:                                  return "VK_IMAGE_TILING_MAX_ENUM";
+               default:                                                                                return DE_NULL;
+       }
+}
+
+const char* getImageTypeName (VkImageType value)
+{
+       switch (value)
+       {
+               case VK_IMAGE_TYPE_1D:                  return "VK_IMAGE_TYPE_1D";
+               case VK_IMAGE_TYPE_2D:                  return "VK_IMAGE_TYPE_2D";
+               case VK_IMAGE_TYPE_3D:                  return "VK_IMAGE_TYPE_3D";
+               case VK_IMAGE_TYPE_MAX_ENUM:    return "VK_IMAGE_TYPE_MAX_ENUM";
+               default:                                                return DE_NULL;
+       }
+}
+
+const char* getPhysicalDeviceTypeName (VkPhysicalDeviceType value)
+{
+       switch (value)
+       {
+               case VK_PHYSICAL_DEVICE_TYPE_OTHER:                             return "VK_PHYSICAL_DEVICE_TYPE_OTHER";
+               case VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU:    return "VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU";
+               case VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU:              return "VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU";
+               case VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU:               return "VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU";
+               case VK_PHYSICAL_DEVICE_TYPE_CPU:                               return "VK_PHYSICAL_DEVICE_TYPE_CPU";
+               case VK_PHYSICAL_DEVICE_TYPE_MAX_ENUM:                  return "VK_PHYSICAL_DEVICE_TYPE_MAX_ENUM";
+               default:                                                                                return DE_NULL;
+       }
+}
+
+const char* getQueryTypeName (VkQueryType value)
+{
+       switch (value)
+       {
+               case VK_QUERY_TYPE_OCCLUSION:                   return "VK_QUERY_TYPE_OCCLUSION";
+               case VK_QUERY_TYPE_PIPELINE_STATISTICS: return "VK_QUERY_TYPE_PIPELINE_STATISTICS";
+               case VK_QUERY_TYPE_TIMESTAMP:                   return "VK_QUERY_TYPE_TIMESTAMP";
+               case VK_QUERY_TYPE_MAX_ENUM:                    return "VK_QUERY_TYPE_MAX_ENUM";
+               default:                                                                return DE_NULL;
+       }
+}
+
+const char* getSharingModeName (VkSharingMode value)
+{
+       switch (value)
+       {
+               case VK_SHARING_MODE_EXCLUSIVE:         return "VK_SHARING_MODE_EXCLUSIVE";
+               case VK_SHARING_MODE_CONCURRENT:        return "VK_SHARING_MODE_CONCURRENT";
+               case VK_SHARING_MODE_MAX_ENUM:          return "VK_SHARING_MODE_MAX_ENUM";
+               default:                                                        return DE_NULL;
+       }
+}
+
+const char* getComponentSwizzleName (VkComponentSwizzle value)
+{
+       switch (value)
+       {
+               case VK_COMPONENT_SWIZZLE_IDENTITY:     return "VK_COMPONENT_SWIZZLE_IDENTITY";
+               case VK_COMPONENT_SWIZZLE_ZERO:         return "VK_COMPONENT_SWIZZLE_ZERO";
+               case VK_COMPONENT_SWIZZLE_ONE:          return "VK_COMPONENT_SWIZZLE_ONE";
+               case VK_COMPONENT_SWIZZLE_R:            return "VK_COMPONENT_SWIZZLE_R";
+               case VK_COMPONENT_SWIZZLE_G:            return "VK_COMPONENT_SWIZZLE_G";
+               case VK_COMPONENT_SWIZZLE_B:            return "VK_COMPONENT_SWIZZLE_B";
+               case VK_COMPONENT_SWIZZLE_A:            return "VK_COMPONENT_SWIZZLE_A";
+               case VK_COMPONENT_SWIZZLE_MAX_ENUM:     return "VK_COMPONENT_SWIZZLE_MAX_ENUM";
+               default:                                                        return DE_NULL;
+       }
+}
+
+const char* getImageViewTypeName (VkImageViewType value)
+{
+       switch (value)
+       {
+               case VK_IMAGE_VIEW_TYPE_1D:                     return "VK_IMAGE_VIEW_TYPE_1D";
+               case VK_IMAGE_VIEW_TYPE_2D:                     return "VK_IMAGE_VIEW_TYPE_2D";
+               case VK_IMAGE_VIEW_TYPE_3D:                     return "VK_IMAGE_VIEW_TYPE_3D";
+               case VK_IMAGE_VIEW_TYPE_CUBE:           return "VK_IMAGE_VIEW_TYPE_CUBE";
+               case VK_IMAGE_VIEW_TYPE_1D_ARRAY:       return "VK_IMAGE_VIEW_TYPE_1D_ARRAY";
+               case VK_IMAGE_VIEW_TYPE_2D_ARRAY:       return "VK_IMAGE_VIEW_TYPE_2D_ARRAY";
+               case VK_IMAGE_VIEW_TYPE_CUBE_ARRAY:     return "VK_IMAGE_VIEW_TYPE_CUBE_ARRAY";
+               case VK_IMAGE_VIEW_TYPE_MAX_ENUM:       return "VK_IMAGE_VIEW_TYPE_MAX_ENUM";
+               default:                                                        return DE_NULL;
+       }
+}
+
+const char* getBlendFactorName (VkBlendFactor value)
+{
+       switch (value)
+       {
+               case VK_BLEND_FACTOR_ZERO:                                              return "VK_BLEND_FACTOR_ZERO";
+               case VK_BLEND_FACTOR_ONE:                                               return "VK_BLEND_FACTOR_ONE";
+               case VK_BLEND_FACTOR_SRC_COLOR:                                 return "VK_BLEND_FACTOR_SRC_COLOR";
+               case VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR:               return "VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR";
+               case VK_BLEND_FACTOR_DST_COLOR:                                 return "VK_BLEND_FACTOR_DST_COLOR";
+               case VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR:               return "VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR";
+               case VK_BLEND_FACTOR_SRC_ALPHA:                                 return "VK_BLEND_FACTOR_SRC_ALPHA";
+               case VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA:               return "VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA";
+               case VK_BLEND_FACTOR_DST_ALPHA:                                 return "VK_BLEND_FACTOR_DST_ALPHA";
+               case VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA:               return "VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA";
+               case VK_BLEND_FACTOR_CONSTANT_COLOR:                    return "VK_BLEND_FACTOR_CONSTANT_COLOR";
+               case VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR:  return "VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR";
+               case VK_BLEND_FACTOR_CONSTANT_ALPHA:                    return "VK_BLEND_FACTOR_CONSTANT_ALPHA";
+               case VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA:  return "VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA";
+               case VK_BLEND_FACTOR_SRC_ALPHA_SATURATE:                return "VK_BLEND_FACTOR_SRC_ALPHA_SATURATE";
+               case VK_BLEND_FACTOR_SRC1_COLOR:                                return "VK_BLEND_FACTOR_SRC1_COLOR";
+               case VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR:              return "VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR";
+               case VK_BLEND_FACTOR_SRC1_ALPHA:                                return "VK_BLEND_FACTOR_SRC1_ALPHA";
+               case VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA:              return "VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA";
+               case VK_BLEND_FACTOR_MAX_ENUM:                                  return "VK_BLEND_FACTOR_MAX_ENUM";
+               default:                                                                                return DE_NULL;
+       }
+}
+
+const char* getBlendOpName (VkBlendOp value)
+{
+       switch (value)
+       {
+               case VK_BLEND_OP_ADD:                                           return "VK_BLEND_OP_ADD";
+               case VK_BLEND_OP_SUBTRACT:                                      return "VK_BLEND_OP_SUBTRACT";
+               case VK_BLEND_OP_REVERSE_SUBTRACT:                      return "VK_BLEND_OP_REVERSE_SUBTRACT";
+               case VK_BLEND_OP_MIN:                                           return "VK_BLEND_OP_MIN";
+               case VK_BLEND_OP_MAX:                                           return "VK_BLEND_OP_MAX";
+               case VK_BLEND_OP_ZERO_EXT:                                      return "VK_BLEND_OP_ZERO_EXT";
+               case VK_BLEND_OP_SRC_EXT:                                       return "VK_BLEND_OP_SRC_EXT";
+               case VK_BLEND_OP_DST_EXT:                                       return "VK_BLEND_OP_DST_EXT";
+               case VK_BLEND_OP_SRC_OVER_EXT:                          return "VK_BLEND_OP_SRC_OVER_EXT";
+               case VK_BLEND_OP_DST_OVER_EXT:                          return "VK_BLEND_OP_DST_OVER_EXT";
+               case VK_BLEND_OP_SRC_IN_EXT:                            return "VK_BLEND_OP_SRC_IN_EXT";
+               case VK_BLEND_OP_DST_IN_EXT:                            return "VK_BLEND_OP_DST_IN_EXT";
+               case VK_BLEND_OP_SRC_OUT_EXT:                           return "VK_BLEND_OP_SRC_OUT_EXT";
+               case VK_BLEND_OP_DST_OUT_EXT:                           return "VK_BLEND_OP_DST_OUT_EXT";
+               case VK_BLEND_OP_SRC_ATOP_EXT:                          return "VK_BLEND_OP_SRC_ATOP_EXT";
+               case VK_BLEND_OP_DST_ATOP_EXT:                          return "VK_BLEND_OP_DST_ATOP_EXT";
+               case VK_BLEND_OP_XOR_EXT:                                       return "VK_BLEND_OP_XOR_EXT";
+               case VK_BLEND_OP_MULTIPLY_EXT:                          return "VK_BLEND_OP_MULTIPLY_EXT";
+               case VK_BLEND_OP_SCREEN_EXT:                            return "VK_BLEND_OP_SCREEN_EXT";
+               case VK_BLEND_OP_OVERLAY_EXT:                           return "VK_BLEND_OP_OVERLAY_EXT";
+               case VK_BLEND_OP_DARKEN_EXT:                            return "VK_BLEND_OP_DARKEN_EXT";
+               case VK_BLEND_OP_LIGHTEN_EXT:                           return "VK_BLEND_OP_LIGHTEN_EXT";
+               case VK_BLEND_OP_COLORDODGE_EXT:                        return "VK_BLEND_OP_COLORDODGE_EXT";
+               case VK_BLEND_OP_COLORBURN_EXT:                         return "VK_BLEND_OP_COLORBURN_EXT";
+               case VK_BLEND_OP_HARDLIGHT_EXT:                         return "VK_BLEND_OP_HARDLIGHT_EXT";
+               case VK_BLEND_OP_SOFTLIGHT_EXT:                         return "VK_BLEND_OP_SOFTLIGHT_EXT";
+               case VK_BLEND_OP_DIFFERENCE_EXT:                        return "VK_BLEND_OP_DIFFERENCE_EXT";
+               case VK_BLEND_OP_EXCLUSION_EXT:                         return "VK_BLEND_OP_EXCLUSION_EXT";
+               case VK_BLEND_OP_INVERT_EXT:                            return "VK_BLEND_OP_INVERT_EXT";
+               case VK_BLEND_OP_INVERT_RGB_EXT:                        return "VK_BLEND_OP_INVERT_RGB_EXT";
+               case VK_BLEND_OP_LINEARDODGE_EXT:                       return "VK_BLEND_OP_LINEARDODGE_EXT";
+               case VK_BLEND_OP_LINEARBURN_EXT:                        return "VK_BLEND_OP_LINEARBURN_EXT";
+               case VK_BLEND_OP_VIVIDLIGHT_EXT:                        return "VK_BLEND_OP_VIVIDLIGHT_EXT";
+               case VK_BLEND_OP_LINEARLIGHT_EXT:                       return "VK_BLEND_OP_LINEARLIGHT_EXT";
+               case VK_BLEND_OP_PINLIGHT_EXT:                          return "VK_BLEND_OP_PINLIGHT_EXT";
+               case VK_BLEND_OP_HARDMIX_EXT:                           return "VK_BLEND_OP_HARDMIX_EXT";
+               case VK_BLEND_OP_HSL_HUE_EXT:                           return "VK_BLEND_OP_HSL_HUE_EXT";
+               case VK_BLEND_OP_HSL_SATURATION_EXT:            return "VK_BLEND_OP_HSL_SATURATION_EXT";
+               case VK_BLEND_OP_HSL_COLOR_EXT:                         return "VK_BLEND_OP_HSL_COLOR_EXT";
+               case VK_BLEND_OP_HSL_LUMINOSITY_EXT:            return "VK_BLEND_OP_HSL_LUMINOSITY_EXT";
+               case VK_BLEND_OP_PLUS_EXT:                                      return "VK_BLEND_OP_PLUS_EXT";
+               case VK_BLEND_OP_PLUS_CLAMPED_EXT:                      return "VK_BLEND_OP_PLUS_CLAMPED_EXT";
+               case VK_BLEND_OP_PLUS_CLAMPED_ALPHA_EXT:        return "VK_BLEND_OP_PLUS_CLAMPED_ALPHA_EXT";
+               case VK_BLEND_OP_PLUS_DARKER_EXT:                       return "VK_BLEND_OP_PLUS_DARKER_EXT";
+               case VK_BLEND_OP_MINUS_EXT:                                     return "VK_BLEND_OP_MINUS_EXT";
+               case VK_BLEND_OP_MINUS_CLAMPED_EXT:                     return "VK_BLEND_OP_MINUS_CLAMPED_EXT";
+               case VK_BLEND_OP_CONTRAST_EXT:                          return "VK_BLEND_OP_CONTRAST_EXT";
+               case VK_BLEND_OP_INVERT_OVG_EXT:                        return "VK_BLEND_OP_INVERT_OVG_EXT";
+               case VK_BLEND_OP_RED_EXT:                                       return "VK_BLEND_OP_RED_EXT";
+               case VK_BLEND_OP_GREEN_EXT:                                     return "VK_BLEND_OP_GREEN_EXT";
+               case VK_BLEND_OP_BLUE_EXT:                                      return "VK_BLEND_OP_BLUE_EXT";
+               case VK_BLEND_OP_MAX_ENUM:                                      return "VK_BLEND_OP_MAX_ENUM";
+               default:                                                                        return DE_NULL;
+       }
+}
+
+const char* getCompareOpName (VkCompareOp value)
+{
+       switch (value)
+       {
+               case VK_COMPARE_OP_NEVER:                               return "VK_COMPARE_OP_NEVER";
+               case VK_COMPARE_OP_LESS:                                return "VK_COMPARE_OP_LESS";
+               case VK_COMPARE_OP_EQUAL:                               return "VK_COMPARE_OP_EQUAL";
+               case VK_COMPARE_OP_LESS_OR_EQUAL:               return "VK_COMPARE_OP_LESS_OR_EQUAL";
+               case VK_COMPARE_OP_GREATER:                             return "VK_COMPARE_OP_GREATER";
+               case VK_COMPARE_OP_NOT_EQUAL:                   return "VK_COMPARE_OP_NOT_EQUAL";
+               case VK_COMPARE_OP_GREATER_OR_EQUAL:    return "VK_COMPARE_OP_GREATER_OR_EQUAL";
+               case VK_COMPARE_OP_ALWAYS:                              return "VK_COMPARE_OP_ALWAYS";
+               case VK_COMPARE_OP_MAX_ENUM:                    return "VK_COMPARE_OP_MAX_ENUM";
+               default:                                                                return DE_NULL;
+       }
+}
+
+const char* getDynamicStateName (VkDynamicState value)
+{
+       switch (value)
+       {
+               case VK_DYNAMIC_STATE_VIEWPORT:                                                 return "VK_DYNAMIC_STATE_VIEWPORT";
+               case VK_DYNAMIC_STATE_SCISSOR:                                                  return "VK_DYNAMIC_STATE_SCISSOR";
+               case VK_DYNAMIC_STATE_LINE_WIDTH:                                               return "VK_DYNAMIC_STATE_LINE_WIDTH";
+               case VK_DYNAMIC_STATE_DEPTH_BIAS:                                               return "VK_DYNAMIC_STATE_DEPTH_BIAS";
+               case VK_DYNAMIC_STATE_BLEND_CONSTANTS:                                  return "VK_DYNAMIC_STATE_BLEND_CONSTANTS";
+               case VK_DYNAMIC_STATE_DEPTH_BOUNDS:                                             return "VK_DYNAMIC_STATE_DEPTH_BOUNDS";
+               case VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK:                             return "VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK";
+               case VK_DYNAMIC_STATE_STENCIL_WRITE_MASK:                               return "VK_DYNAMIC_STATE_STENCIL_WRITE_MASK";
+               case VK_DYNAMIC_STATE_STENCIL_REFERENCE:                                return "VK_DYNAMIC_STATE_STENCIL_REFERENCE";
+               case VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT:                    return "VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT";
+               case VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT:                             return "VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT";
+               case VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR:                return "VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR";
+               case VK_DYNAMIC_STATE_LINE_STIPPLE_EXT:                                 return "VK_DYNAMIC_STATE_LINE_STIPPLE_EXT";
+               case VK_DYNAMIC_STATE_CULL_MODE_EXT:                                    return "VK_DYNAMIC_STATE_CULL_MODE_EXT";
+               case VK_DYNAMIC_STATE_FRONT_FACE_EXT:                                   return "VK_DYNAMIC_STATE_FRONT_FACE_EXT";
+               case VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT:                   return "VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT";
+               case VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT:                  return "VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT";
+               case VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT:                   return "VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT";
+               case VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT:  return "VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT";
+               case VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE_EXT:                    return "VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE_EXT";
+               case VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE_EXT:                   return "VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE_EXT";
+               case VK_DYNAMIC_STATE_DEPTH_COMPARE_OP_EXT:                             return "VK_DYNAMIC_STATE_DEPTH_COMPARE_OP_EXT";
+               case VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE_EXT:             return "VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE_EXT";
+               case VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE_EXT:                  return "VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE_EXT";
+               case VK_DYNAMIC_STATE_STENCIL_OP_EXT:                                   return "VK_DYNAMIC_STATE_STENCIL_OP_EXT";
+               case VK_DYNAMIC_STATE_MAX_ENUM:                                                 return "VK_DYNAMIC_STATE_MAX_ENUM";
+               default:                                                                                                return DE_NULL;
+       }
+}
+
+const char* getFrontFaceName (VkFrontFace value)
+{
+       switch (value)
+       {
+               case VK_FRONT_FACE_COUNTER_CLOCKWISE:   return "VK_FRONT_FACE_COUNTER_CLOCKWISE";
+               case VK_FRONT_FACE_CLOCKWISE:                   return "VK_FRONT_FACE_CLOCKWISE";
+               case VK_FRONT_FACE_MAX_ENUM:                    return "VK_FRONT_FACE_MAX_ENUM";
+               default:                                                                return DE_NULL;
+       }
+}
+
+const char* getVertexInputRateName (VkVertexInputRate value)
+{
+       switch (value)
+       {
+               case VK_VERTEX_INPUT_RATE_VERTEX:       return "VK_VERTEX_INPUT_RATE_VERTEX";
+               case VK_VERTEX_INPUT_RATE_INSTANCE:     return "VK_VERTEX_INPUT_RATE_INSTANCE";
+               case VK_VERTEX_INPUT_RATE_MAX_ENUM:     return "VK_VERTEX_INPUT_RATE_MAX_ENUM";
+               default:                                                        return DE_NULL;
+       }
+}
+
+const char* getPrimitiveTopologyName (VkPrimitiveTopology value)
+{
+       switch (value)
+       {
+               case VK_PRIMITIVE_TOPOLOGY_POINT_LIST:                                          return "VK_PRIMITIVE_TOPOLOGY_POINT_LIST";
+               case VK_PRIMITIVE_TOPOLOGY_LINE_LIST:                                           return "VK_PRIMITIVE_TOPOLOGY_LINE_LIST";
+               case VK_PRIMITIVE_TOPOLOGY_LINE_STRIP:                                          return "VK_PRIMITIVE_TOPOLOGY_LINE_STRIP";
+               case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST:                                       return "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST";
+               case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP:                                      return "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP";
+               case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN:                                        return "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN";
+               case VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY:            return "VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY";
+               case VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY:           return "VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY";
+               case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY:        return "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY";
+               case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY:       return "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY";
+               case VK_PRIMITIVE_TOPOLOGY_PATCH_LIST:                                          return "VK_PRIMITIVE_TOPOLOGY_PATCH_LIST";
+               case VK_PRIMITIVE_TOPOLOGY_MAX_ENUM:                                            return "VK_PRIMITIVE_TOPOLOGY_MAX_ENUM";
+               default:                                                                                                        return DE_NULL;
+       }
+}
+
+const char* getPolygonModeName (VkPolygonMode value)
+{
+       switch (value)
+       {
+               case VK_POLYGON_MODE_FILL:              return "VK_POLYGON_MODE_FILL";
+               case VK_POLYGON_MODE_LINE:              return "VK_POLYGON_MODE_LINE";
+               case VK_POLYGON_MODE_POINT:             return "VK_POLYGON_MODE_POINT";
+               case VK_POLYGON_MODE_MAX_ENUM:  return "VK_POLYGON_MODE_MAX_ENUM";
+               default:                                                return DE_NULL;
+       }
+}
+
+const char* getStencilOpName (VkStencilOp value)
+{
+       switch (value)
+       {
+               case VK_STENCIL_OP_KEEP:                                return "VK_STENCIL_OP_KEEP";
+               case VK_STENCIL_OP_ZERO:                                return "VK_STENCIL_OP_ZERO";
+               case VK_STENCIL_OP_REPLACE:                             return "VK_STENCIL_OP_REPLACE";
+               case VK_STENCIL_OP_INCREMENT_AND_CLAMP: return "VK_STENCIL_OP_INCREMENT_AND_CLAMP";
+               case VK_STENCIL_OP_DECREMENT_AND_CLAMP: return "VK_STENCIL_OP_DECREMENT_AND_CLAMP";
+               case VK_STENCIL_OP_INVERT:                              return "VK_STENCIL_OP_INVERT";
+               case VK_STENCIL_OP_INCREMENT_AND_WRAP:  return "VK_STENCIL_OP_INCREMENT_AND_WRAP";
+               case VK_STENCIL_OP_DECREMENT_AND_WRAP:  return "VK_STENCIL_OP_DECREMENT_AND_WRAP";
+               case VK_STENCIL_OP_MAX_ENUM:                    return "VK_STENCIL_OP_MAX_ENUM";
+               default:                                                                return DE_NULL;
+       }
+}
+
+const char* getLogicOpName (VkLogicOp value)
+{
+       switch (value)
+       {
+               case VK_LOGIC_OP_CLEAR:                 return "VK_LOGIC_OP_CLEAR";
+               case VK_LOGIC_OP_AND:                   return "VK_LOGIC_OP_AND";
+               case VK_LOGIC_OP_AND_REVERSE:   return "VK_LOGIC_OP_AND_REVERSE";
+               case VK_LOGIC_OP_COPY:                  return "VK_LOGIC_OP_COPY";
+               case VK_LOGIC_OP_AND_INVERTED:  return "VK_LOGIC_OP_AND_INVERTED";
+               case VK_LOGIC_OP_NO_OP:                 return "VK_LOGIC_OP_NO_OP";
+               case VK_LOGIC_OP_XOR:                   return "VK_LOGIC_OP_XOR";
+               case VK_LOGIC_OP_OR:                    return "VK_LOGIC_OP_OR";
+               case VK_LOGIC_OP_NOR:                   return "VK_LOGIC_OP_NOR";
+               case VK_LOGIC_OP_EQUIVALENT:    return "VK_LOGIC_OP_EQUIVALENT";
+               case VK_LOGIC_OP_INVERT:                return "VK_LOGIC_OP_INVERT";
+               case VK_LOGIC_OP_OR_REVERSE:    return "VK_LOGIC_OP_OR_REVERSE";
+               case VK_LOGIC_OP_COPY_INVERTED: return "VK_LOGIC_OP_COPY_INVERTED";
+               case VK_LOGIC_OP_OR_INVERTED:   return "VK_LOGIC_OP_OR_INVERTED";
+               case VK_LOGIC_OP_NAND:                  return "VK_LOGIC_OP_NAND";
+               case VK_LOGIC_OP_SET:                   return "VK_LOGIC_OP_SET";
+               case VK_LOGIC_OP_MAX_ENUM:              return "VK_LOGIC_OP_MAX_ENUM";
+               default:                                                return DE_NULL;
+       }
+}
+
+const char* getBorderColorName (VkBorderColor value)
+{
+       switch (value)
+       {
+               case VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK:   return "VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK";
+               case VK_BORDER_COLOR_INT_TRANSPARENT_BLACK:             return "VK_BORDER_COLOR_INT_TRANSPARENT_BLACK";
+               case VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK:                return "VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK";
+               case VK_BORDER_COLOR_INT_OPAQUE_BLACK:                  return "VK_BORDER_COLOR_INT_OPAQUE_BLACK";
+               case VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE:                return "VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE";
+               case VK_BORDER_COLOR_INT_OPAQUE_WHITE:                  return "VK_BORDER_COLOR_INT_OPAQUE_WHITE";
+               case VK_BORDER_COLOR_FLOAT_CUSTOM_EXT:                  return "VK_BORDER_COLOR_FLOAT_CUSTOM_EXT";
+               case VK_BORDER_COLOR_INT_CUSTOM_EXT:                    return "VK_BORDER_COLOR_INT_CUSTOM_EXT";
+               case VK_BORDER_COLOR_MAX_ENUM:                                  return "VK_BORDER_COLOR_MAX_ENUM";
+               default:                                                                                return DE_NULL;
+       }
+}
+
+const char* getFilterName (VkFilter value)
+{
+       switch (value)
+       {
+               case VK_FILTER_NEAREST:         return "VK_FILTER_NEAREST";
+               case VK_FILTER_LINEAR:          return "VK_FILTER_LINEAR";
+               case VK_FILTER_CUBIC_IMG:       return "VK_FILTER_CUBIC_IMG";
+               case VK_FILTER_MAX_ENUM:        return "VK_FILTER_MAX_ENUM";
+               default:                                        return DE_NULL;
+       }
+}
+
+const char* getSamplerAddressModeName (VkSamplerAddressMode value)
+{
+       switch (value)
+       {
+               case VK_SAMPLER_ADDRESS_MODE_REPEAT:                            return "VK_SAMPLER_ADDRESS_MODE_REPEAT";
+               case VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT:           return "VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT";
+               case VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE:                     return "VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE";
+               case VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER:           return "VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER";
+               case VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE:      return "VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE";
+               case VK_SAMPLER_ADDRESS_MODE_MAX_ENUM:                          return "VK_SAMPLER_ADDRESS_MODE_MAX_ENUM";
+               default:                                                                                        return DE_NULL;
+       }
+}
+
+const char* getSamplerMipmapModeName (VkSamplerMipmapMode value)
+{
+       switch (value)
+       {
+               case VK_SAMPLER_MIPMAP_MODE_NEAREST:    return "VK_SAMPLER_MIPMAP_MODE_NEAREST";
+               case VK_SAMPLER_MIPMAP_MODE_LINEAR:             return "VK_SAMPLER_MIPMAP_MODE_LINEAR";
+               case VK_SAMPLER_MIPMAP_MODE_MAX_ENUM:   return "VK_SAMPLER_MIPMAP_MODE_MAX_ENUM";
+               default:                                                                return DE_NULL;
+       }
+}
+
+const char* getDescriptorTypeName (VkDescriptorType value)
+{
+       switch (value)
+       {
+               case VK_DESCRIPTOR_TYPE_SAMPLER:                                return "VK_DESCRIPTOR_TYPE_SAMPLER";
+               case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER: return "VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER";
+               case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE:                  return "VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE";
+               case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE:                  return "VK_DESCRIPTOR_TYPE_STORAGE_IMAGE";
+               case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER:   return "VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER";
+               case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER:   return "VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER";
+               case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER:                 return "VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER";
+               case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER:                 return "VK_DESCRIPTOR_TYPE_STORAGE_BUFFER";
+               case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC: return "VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC";
+               case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC: return "VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC";
+               case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT:               return "VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT";
+               case VK_DESCRIPTOR_TYPE_MAX_ENUM:                               return "VK_DESCRIPTOR_TYPE_MAX_ENUM";
+               default:                                                                                return DE_NULL;
+       }
+}
+
+const char* getAttachmentLoadOpName (VkAttachmentLoadOp value)
+{
+       switch (value)
+       {
+               case VK_ATTACHMENT_LOAD_OP_LOAD:                return "VK_ATTACHMENT_LOAD_OP_LOAD";
+               case VK_ATTACHMENT_LOAD_OP_CLEAR:               return "VK_ATTACHMENT_LOAD_OP_CLEAR";
+               case VK_ATTACHMENT_LOAD_OP_DONT_CARE:   return "VK_ATTACHMENT_LOAD_OP_DONT_CARE";
+               case VK_ATTACHMENT_LOAD_OP_MAX_ENUM:    return "VK_ATTACHMENT_LOAD_OP_MAX_ENUM";
+               default:                                                                return DE_NULL;
+       }
+}
+
+const char* getAttachmentStoreOpName (VkAttachmentStoreOp value)
+{
+       switch (value)
+       {
+               case VK_ATTACHMENT_STORE_OP_STORE:              return "VK_ATTACHMENT_STORE_OP_STORE";
+               case VK_ATTACHMENT_STORE_OP_DONT_CARE:  return "VK_ATTACHMENT_STORE_OP_DONT_CARE";
+               case VK_ATTACHMENT_STORE_OP_MAX_ENUM:   return "VK_ATTACHMENT_STORE_OP_MAX_ENUM";
+               default:                                                                return DE_NULL;
+       }
+}
+
+const char* getPipelineBindPointName (VkPipelineBindPoint value)
+{
+       switch (value)
+       {
+               case VK_PIPELINE_BIND_POINT_GRAPHICS:   return "VK_PIPELINE_BIND_POINT_GRAPHICS";
+               case VK_PIPELINE_BIND_POINT_COMPUTE:    return "VK_PIPELINE_BIND_POINT_COMPUTE";
+               case VK_PIPELINE_BIND_POINT_MAX_ENUM:   return "VK_PIPELINE_BIND_POINT_MAX_ENUM";
+               default:                                                                return DE_NULL;
+       }
+}
+
+const char* getCommandBufferLevelName (VkCommandBufferLevel value)
+{
+       switch (value)
+       {
+               case VK_COMMAND_BUFFER_LEVEL_PRIMARY:   return "VK_COMMAND_BUFFER_LEVEL_PRIMARY";
+               case VK_COMMAND_BUFFER_LEVEL_SECONDARY: return "VK_COMMAND_BUFFER_LEVEL_SECONDARY";
+               case VK_COMMAND_BUFFER_LEVEL_MAX_ENUM:  return "VK_COMMAND_BUFFER_LEVEL_MAX_ENUM";
+               default:                                                                return DE_NULL;
+       }
+}
+
+const char* getIndexTypeName (VkIndexType value)
+{
+       switch (value)
+       {
+               case VK_INDEX_TYPE_UINT16:              return "VK_INDEX_TYPE_UINT16";
+               case VK_INDEX_TYPE_UINT32:              return "VK_INDEX_TYPE_UINT32";
+               case VK_INDEX_TYPE_UINT8_EXT:   return "VK_INDEX_TYPE_UINT8_EXT";
+               case VK_INDEX_TYPE_MAX_ENUM:    return "VK_INDEX_TYPE_MAX_ENUM";
+               default:                                                return DE_NULL;
+       }
+}
+
+const char* getSubpassContentsName (VkSubpassContents value)
+{
+       switch (value)
+       {
+               case VK_SUBPASS_CONTENTS_INLINE:                                        return "VK_SUBPASS_CONTENTS_INLINE";
+               case VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS:     return "VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS";
+               case VK_SUBPASS_CONTENTS_MAX_ENUM:                                      return "VK_SUBPASS_CONTENTS_MAX_ENUM";
+               default:                                                                                        return DE_NULL;
+       }
+}
+
+const char* getFaultLevelName (VkFaultLevel value)
+{
+       switch (value)
+       {
+               case VK_FAULT_LEVEL_UNASSIGNED:         return "VK_FAULT_LEVEL_UNASSIGNED";
+               case VK_FAULT_LEVEL_CRITICAL:           return "VK_FAULT_LEVEL_CRITICAL";
+               case VK_FAULT_LEVEL_RECOVERABLE:        return "VK_FAULT_LEVEL_RECOVERABLE";
+               case VK_FAULT_LEVEL_WARNING:            return "VK_FAULT_LEVEL_WARNING";
+               case VK_FAULT_LEVEL_MAX_ENUM:           return "VK_FAULT_LEVEL_MAX_ENUM";
+               default:                                                        return DE_NULL;
+       }
+}
+
+const char* getFaultTypeName (VkFaultType value)
+{
+       switch (value)
+       {
+               case VK_FAULT_TYPE_INVALID:                             return "VK_FAULT_TYPE_INVALID";
+               case VK_FAULT_TYPE_UNASSIGNED:                  return "VK_FAULT_TYPE_UNASSIGNED";
+               case VK_FAULT_TYPE_IMPLEMENTATION:              return "VK_FAULT_TYPE_IMPLEMENTATION";
+               case VK_FAULT_TYPE_SYSTEM:                              return "VK_FAULT_TYPE_SYSTEM";
+               case VK_FAULT_TYPE_PHYSICAL_DEVICE:             return "VK_FAULT_TYPE_PHYSICAL_DEVICE";
+               case VK_FAULT_TYPE_COMMAND_BUFFER_FULL: return "VK_FAULT_TYPE_COMMAND_BUFFER_FULL";
+               case VK_FAULT_TYPE_INVALID_API_USAGE:   return "VK_FAULT_TYPE_INVALID_API_USAGE";
+               case VK_FAULT_TYPE_MAX_ENUM:                    return "VK_FAULT_TYPE_MAX_ENUM";
+               default:                                                                return DE_NULL;
+       }
+}
+
+const char* getFaultQueryBehaviorName (VkFaultQueryBehavior value)
+{
+       switch (value)
+       {
+               case VK_FAULT_QUERY_BEHAVIOR_GET_AND_CLEAR_ALL_FAULTS:  return "VK_FAULT_QUERY_BEHAVIOR_GET_AND_CLEAR_ALL_FAULTS";
+               case VK_FAULT_QUERY_BEHAVIOR_MAX_ENUM:                                  return "VK_FAULT_QUERY_BEHAVIOR_MAX_ENUM";
+               default:                                                                                                return DE_NULL;
+       }
+}
+
+const char* getPipelineMatchControlName (VkPipelineMatchControl value)
+{
+       switch (value)
+       {
+               case VK_PIPELINE_MATCH_CONTROL_APPLICATION_UUID_EXACT_MATCH:    return "VK_PIPELINE_MATCH_CONTROL_APPLICATION_UUID_EXACT_MATCH";
+               case VK_PIPELINE_MATCH_CONTROL_MAX_ENUM:                                                return "VK_PIPELINE_MATCH_CONTROL_MAX_ENUM";
+               default:                                                                                                                return DE_NULL;
+       }
+}
+
+const char* getPointClippingBehaviorName (VkPointClippingBehavior value)
+{
+       switch (value)
+       {
+               case VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES:                return "VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES";
+               case VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY:  return "VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY";
+               case VK_POINT_CLIPPING_BEHAVIOR_MAX_ENUM:                               return "VK_POINT_CLIPPING_BEHAVIOR_MAX_ENUM";
+               default:                                                                                                return DE_NULL;
+       }
+}
+
+const char* getTessellationDomainOriginName (VkTessellationDomainOrigin value)
+{
+       switch (value)
+       {
+               case VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT:  return "VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT";
+               case VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT:  return "VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT";
+               case VK_TESSELLATION_DOMAIN_ORIGIN_MAX_ENUM:    return "VK_TESSELLATION_DOMAIN_ORIGIN_MAX_ENUM";
+               default:                                                                                return DE_NULL;
+       }
+}
+
+const char* getSamplerYcbcrModelConversionName (VkSamplerYcbcrModelConversion value)
+{
+       switch (value)
+       {
+               case VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY:    return "VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY";
+               case VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY:  return "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY";
+               case VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709:               return "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709";
+               case VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601:               return "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601";
+               case VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020:              return "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020";
+               case VK_SAMPLER_YCBCR_MODEL_CONVERSION_MAX_ENUM:                return "VK_SAMPLER_YCBCR_MODEL_CONVERSION_MAX_ENUM";
+               default:                                                                                                return DE_NULL;
+       }
+}
+
+const char* getSamplerYcbcrRangeName (VkSamplerYcbcrRange value)
+{
+       switch (value)
+       {
+               case VK_SAMPLER_YCBCR_RANGE_ITU_FULL:   return "VK_SAMPLER_YCBCR_RANGE_ITU_FULL";
+               case VK_SAMPLER_YCBCR_RANGE_ITU_NARROW: return "VK_SAMPLER_YCBCR_RANGE_ITU_NARROW";
+               case VK_SAMPLER_YCBCR_RANGE_MAX_ENUM:   return "VK_SAMPLER_YCBCR_RANGE_MAX_ENUM";
+               default:                                                                return DE_NULL;
+       }
+}
+
+const char* getChromaLocationName (VkChromaLocation value)
+{
+       switch (value)
+       {
+               case VK_CHROMA_LOCATION_COSITED_EVEN:   return "VK_CHROMA_LOCATION_COSITED_EVEN";
+               case VK_CHROMA_LOCATION_MIDPOINT:               return "VK_CHROMA_LOCATION_MIDPOINT";
+               case VK_CHROMA_LOCATION_MAX_ENUM:               return "VK_CHROMA_LOCATION_MAX_ENUM";
+               default:                                                                return DE_NULL;
+       }
+}
+
+const char* getDriverIdName (VkDriverId value)
+{
+       switch (value)
+       {
+               case VK_DRIVER_ID_AMD_PROPRIETARY:                              return "VK_DRIVER_ID_AMD_PROPRIETARY";
+               case VK_DRIVER_ID_AMD_OPEN_SOURCE:                              return "VK_DRIVER_ID_AMD_OPEN_SOURCE";
+               case VK_DRIVER_ID_MESA_RADV:                                    return "VK_DRIVER_ID_MESA_RADV";
+               case VK_DRIVER_ID_NVIDIA_PROPRIETARY:                   return "VK_DRIVER_ID_NVIDIA_PROPRIETARY";
+               case VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS:    return "VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS";
+               case VK_DRIVER_ID_INTEL_OPEN_SOURCE_MESA:               return "VK_DRIVER_ID_INTEL_OPEN_SOURCE_MESA";
+               case VK_DRIVER_ID_IMAGINATION_PROPRIETARY:              return "VK_DRIVER_ID_IMAGINATION_PROPRIETARY";
+               case VK_DRIVER_ID_QUALCOMM_PROPRIETARY:                 return "VK_DRIVER_ID_QUALCOMM_PROPRIETARY";
+               case VK_DRIVER_ID_ARM_PROPRIETARY:                              return "VK_DRIVER_ID_ARM_PROPRIETARY";
+               case VK_DRIVER_ID_GOOGLE_SWIFTSHADER:                   return "VK_DRIVER_ID_GOOGLE_SWIFTSHADER";
+               case VK_DRIVER_ID_GGP_PROPRIETARY:                              return "VK_DRIVER_ID_GGP_PROPRIETARY";
+               case VK_DRIVER_ID_BROADCOM_PROPRIETARY:                 return "VK_DRIVER_ID_BROADCOM_PROPRIETARY";
+               case VK_DRIVER_ID_MESA_LLVMPIPE:                                return "VK_DRIVER_ID_MESA_LLVMPIPE";
+               case VK_DRIVER_ID_MOLTENVK:                                             return "VK_DRIVER_ID_MOLTENVK";
+               case VK_DRIVER_ID_MAX_ENUM:                                             return "VK_DRIVER_ID_MAX_ENUM";
+               default:                                                                                return DE_NULL;
+       }
+}
+
+const char* getShaderFloatControlsIndependenceName (VkShaderFloatControlsIndependence value)
+{
+       switch (value)
+       {
+               case VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY: return "VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY";
+               case VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL:                 return "VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL";
+               case VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE:                return "VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE";
+               case VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_MAX_ENUM:    return "VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_MAX_ENUM";
+               default:                                                                                                return DE_NULL;
+       }
+}
+
+const char* getSamplerReductionModeName (VkSamplerReductionMode value)
+{
+       switch (value)
+       {
+               case VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE:        return "VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE";
+               case VK_SAMPLER_REDUCTION_MODE_MIN:                                     return "VK_SAMPLER_REDUCTION_MODE_MIN";
+               case VK_SAMPLER_REDUCTION_MODE_MAX:                                     return "VK_SAMPLER_REDUCTION_MODE_MAX";
+               case VK_SAMPLER_REDUCTION_MODE_MAX_ENUM:                        return "VK_SAMPLER_REDUCTION_MODE_MAX_ENUM";
+               default:                                                                                        return DE_NULL;
+       }
+}
+
+const char* getSemaphoreTypeName (VkSemaphoreType value)
+{
+       switch (value)
+       {
+               case VK_SEMAPHORE_TYPE_BINARY:          return "VK_SEMAPHORE_TYPE_BINARY";
+               case VK_SEMAPHORE_TYPE_TIMELINE:        return "VK_SEMAPHORE_TYPE_TIMELINE";
+               case VK_SEMAPHORE_TYPE_MAX_ENUM:        return "VK_SEMAPHORE_TYPE_MAX_ENUM";
+               default:                                                        return DE_NULL;
+       }
+}
+
+const char* getPresentModeKHRName (VkPresentModeKHR value)
+{
+       switch (value)
+       {
+               case VK_PRESENT_MODE_IMMEDIATE_KHR:                                     return "VK_PRESENT_MODE_IMMEDIATE_KHR";
+               case VK_PRESENT_MODE_MAILBOX_KHR:                                       return "VK_PRESENT_MODE_MAILBOX_KHR";
+               case VK_PRESENT_MODE_FIFO_KHR:                                          return "VK_PRESENT_MODE_FIFO_KHR";
+               case VK_PRESENT_MODE_FIFO_RELAXED_KHR:                          return "VK_PRESENT_MODE_FIFO_RELAXED_KHR";
+               case VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR:         return "VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR";
+               case VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR:     return "VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR";
+               case VK_PRESENT_MODE_MAX_ENUM_KHR:                                      return "VK_PRESENT_MODE_MAX_ENUM_KHR";
+               default:                                                                                        return DE_NULL;
+       }
+}
+
+const char* getColorSpaceKHRName (VkColorSpaceKHR value)
+{
+       switch (value)
+       {
+               case VK_COLOR_SPACE_SRGB_NONLINEAR_KHR:                         return "VK_COLOR_SPACE_SRGB_NONLINEAR_KHR";
+               case VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT:           return "VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT";
+               case VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT:           return "VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT";
+               case VK_COLOR_SPACE_DISPLAY_P3_LINEAR_EXT:                      return "VK_COLOR_SPACE_DISPLAY_P3_LINEAR_EXT";
+               case VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT:                       return "VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT";
+               case VK_COLOR_SPACE_BT709_LINEAR_EXT:                           return "VK_COLOR_SPACE_BT709_LINEAR_EXT";
+               case VK_COLOR_SPACE_BT709_NONLINEAR_EXT:                        return "VK_COLOR_SPACE_BT709_NONLINEAR_EXT";
+               case VK_COLOR_SPACE_BT2020_LINEAR_EXT:                          return "VK_COLOR_SPACE_BT2020_LINEAR_EXT";
+               case VK_COLOR_SPACE_HDR10_ST2084_EXT:                           return "VK_COLOR_SPACE_HDR10_ST2084_EXT";
+               case VK_COLOR_SPACE_DOLBYVISION_EXT:                            return "VK_COLOR_SPACE_DOLBYVISION_EXT";
+               case VK_COLOR_SPACE_HDR10_HLG_EXT:                                      return "VK_COLOR_SPACE_HDR10_HLG_EXT";
+               case VK_COLOR_SPACE_ADOBERGB_LINEAR_EXT:                        return "VK_COLOR_SPACE_ADOBERGB_LINEAR_EXT";
+               case VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT:                     return "VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT";
+               case VK_COLOR_SPACE_PASS_THROUGH_EXT:                           return "VK_COLOR_SPACE_PASS_THROUGH_EXT";
+               case VK_COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT:        return "VK_COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT";
+               case VK_COLOR_SPACE_MAX_ENUM_KHR:                                       return "VK_COLOR_SPACE_MAX_ENUM_KHR";
+               default:                                                                                        return DE_NULL;
+       }
+}
+
+const char* getFragmentShadingRateCombinerOpKHRName (VkFragmentShadingRateCombinerOpKHR value)
+{
+       switch (value)
+       {
+               case VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR:             return "VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR";
+               case VK_FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_KHR:  return "VK_FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_KHR";
+               case VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MIN_KHR:              return "VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MIN_KHR";
+               case VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MAX_KHR:              return "VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MAX_KHR";
+               case VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MUL_KHR:              return "VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MUL_KHR";
+               case VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MAX_ENUM_KHR: return "VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MAX_ENUM_KHR";
+               default:                                                                                                return DE_NULL;
+       }
+}
+
+const char* getDisplayPowerStateEXTName (VkDisplayPowerStateEXT value)
+{
+       switch (value)
+       {
+               case VK_DISPLAY_POWER_STATE_OFF_EXT:            return "VK_DISPLAY_POWER_STATE_OFF_EXT";
+               case VK_DISPLAY_POWER_STATE_SUSPEND_EXT:        return "VK_DISPLAY_POWER_STATE_SUSPEND_EXT";
+               case VK_DISPLAY_POWER_STATE_ON_EXT:                     return "VK_DISPLAY_POWER_STATE_ON_EXT";
+               case VK_DISPLAY_POWER_STATE_MAX_ENUM_EXT:       return "VK_DISPLAY_POWER_STATE_MAX_ENUM_EXT";
+               default:                                                                        return DE_NULL;
+       }
+}
+
+const char* getDeviceEventTypeEXTName (VkDeviceEventTypeEXT value)
+{
+       switch (value)
+       {
+               case VK_DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT:  return "VK_DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT";
+               case VK_DEVICE_EVENT_TYPE_MAX_ENUM_EXT:                 return "VK_DEVICE_EVENT_TYPE_MAX_ENUM_EXT";
+               default:                                                                                return DE_NULL;
+       }
+}
+
+const char* getDisplayEventTypeEXTName (VkDisplayEventTypeEXT value)
+{
+       switch (value)
+       {
+               case VK_DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT: return "VK_DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT";
+               case VK_DISPLAY_EVENT_TYPE_MAX_ENUM_EXT:                return "VK_DISPLAY_EVENT_TYPE_MAX_ENUM_EXT";
+               default:                                                                                return DE_NULL;
+       }
+}
+
+const char* getDiscardRectangleModeEXTName (VkDiscardRectangleModeEXT value)
+{
+       switch (value)
+       {
+               case VK_DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT:   return "VK_DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT";
+               case VK_DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT:   return "VK_DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT";
+               case VK_DISCARD_RECTANGLE_MODE_MAX_ENUM_EXT:    return "VK_DISCARD_RECTANGLE_MODE_MAX_ENUM_EXT";
+               default:                                                                                return DE_NULL;
+       }
+}
+
+const char* getConservativeRasterizationModeEXTName (VkConservativeRasterizationModeEXT value)
+{
+       switch (value)
+       {
+               case VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT:           return "VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT";
+               case VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT:       return "VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT";
+               case VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT:      return "VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT";
+               case VK_CONSERVATIVE_RASTERIZATION_MODE_MAX_ENUM_EXT:           return "VK_CONSERVATIVE_RASTERIZATION_MODE_MAX_ENUM_EXT";
+               default:                                                                                                        return DE_NULL;
+       }
+}
+
+const char* getBlendOverlapEXTName (VkBlendOverlapEXT value)
+{
+       switch (value)
+       {
+               case VK_BLEND_OVERLAP_UNCORRELATED_EXT: return "VK_BLEND_OVERLAP_UNCORRELATED_EXT";
+               case VK_BLEND_OVERLAP_DISJOINT_EXT:             return "VK_BLEND_OVERLAP_DISJOINT_EXT";
+               case VK_BLEND_OVERLAP_CONJOINT_EXT:             return "VK_BLEND_OVERLAP_CONJOINT_EXT";
+               case VK_BLEND_OVERLAP_MAX_ENUM_EXT:             return "VK_BLEND_OVERLAP_MAX_ENUM_EXT";
+               default:                                                                return DE_NULL;
+       }
+}
+
+const char* getQueueGlobalPriorityEXTName (VkQueueGlobalPriorityEXT value)
+{
+       switch (value)
+       {
+               case VK_QUEUE_GLOBAL_PRIORITY_LOW_EXT:          return "VK_QUEUE_GLOBAL_PRIORITY_LOW_EXT";
+               case VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT:       return "VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT";
+               case VK_QUEUE_GLOBAL_PRIORITY_HIGH_EXT:         return "VK_QUEUE_GLOBAL_PRIORITY_HIGH_EXT";
+               case VK_QUEUE_GLOBAL_PRIORITY_REALTIME_EXT:     return "VK_QUEUE_GLOBAL_PRIORITY_REALTIME_EXT";
+               case VK_QUEUE_GLOBAL_PRIORITY_MAX_ENUM_EXT:     return "VK_QUEUE_GLOBAL_PRIORITY_MAX_ENUM_EXT";
+               default:                                                                        return DE_NULL;
+       }
+}
+
+const char* getTimeDomainEXTName (VkTimeDomainEXT value)
+{
+       switch (value)
+       {
+               case VK_TIME_DOMAIN_DEVICE_EXT:                                         return "VK_TIME_DOMAIN_DEVICE_EXT";
+               case VK_TIME_DOMAIN_CLOCK_MONOTONIC_EXT:                        return "VK_TIME_DOMAIN_CLOCK_MONOTONIC_EXT";
+               case VK_TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT:            return "VK_TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT";
+               case VK_TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT:      return "VK_TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT";
+               case VK_TIME_DOMAIN_MAX_ENUM_EXT:                                       return "VK_TIME_DOMAIN_MAX_ENUM_EXT";
+               default:                                                                                        return DE_NULL;
+       }
+}
+
+const char* getLineRasterizationModeEXTName (VkLineRasterizationModeEXT value)
+{
+       switch (value)
+       {
+               case VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT:                    return "VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT";
+               case VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT:                return "VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT";
+               case VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT:                  return "VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT";
+               case VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT: return "VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT";
+               case VK_LINE_RASTERIZATION_MODE_MAX_ENUM_EXT:                   return "VK_LINE_RASTERIZATION_MODE_MAX_ENUM_EXT";
+               default:                                                                                                return DE_NULL;
+       }
+}
+
+tcu::Format::Bitfield<32> getAccessFlagsStr (VkAccessFlags value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_ACCESS_INDIRECT_COMMAND_READ_BIT,                                               "VK_ACCESS_INDIRECT_COMMAND_READ_BIT"),
+               tcu::Format::BitDesc(VK_ACCESS_INDEX_READ_BIT,                                                                  "VK_ACCESS_INDEX_READ_BIT"),
+               tcu::Format::BitDesc(VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT,                                               "VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT"),
+               tcu::Format::BitDesc(VK_ACCESS_UNIFORM_READ_BIT,                                                                "VK_ACCESS_UNIFORM_READ_BIT"),
+               tcu::Format::BitDesc(VK_ACCESS_INPUT_ATTACHMENT_READ_BIT,                                               "VK_ACCESS_INPUT_ATTACHMENT_READ_BIT"),
+               tcu::Format::BitDesc(VK_ACCESS_SHADER_READ_BIT,                                                                 "VK_ACCESS_SHADER_READ_BIT"),
+               tcu::Format::BitDesc(VK_ACCESS_SHADER_WRITE_BIT,                                                                "VK_ACCESS_SHADER_WRITE_BIT"),
+               tcu::Format::BitDesc(VK_ACCESS_COLOR_ATTACHMENT_READ_BIT,                                               "VK_ACCESS_COLOR_ATTACHMENT_READ_BIT"),
+               tcu::Format::BitDesc(VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,                                              "VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT"),
+               tcu::Format::BitDesc(VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT,                               "VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT"),
+               tcu::Format::BitDesc(VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT,                              "VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT"),
+               tcu::Format::BitDesc(VK_ACCESS_TRANSFER_READ_BIT,                                                               "VK_ACCESS_TRANSFER_READ_BIT"),
+               tcu::Format::BitDesc(VK_ACCESS_TRANSFER_WRITE_BIT,                                                              "VK_ACCESS_TRANSFER_WRITE_BIT"),
+               tcu::Format::BitDesc(VK_ACCESS_HOST_READ_BIT,                                                                   "VK_ACCESS_HOST_READ_BIT"),
+               tcu::Format::BitDesc(VK_ACCESS_HOST_WRITE_BIT,                                                                  "VK_ACCESS_HOST_WRITE_BIT"),
+               tcu::Format::BitDesc(VK_ACCESS_MEMORY_READ_BIT,                                                                 "VK_ACCESS_MEMORY_READ_BIT"),
+               tcu::Format::BitDesc(VK_ACCESS_MEMORY_WRITE_BIT,                                                                "VK_ACCESS_MEMORY_WRITE_BIT"),
+               tcu::Format::BitDesc(VK_ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT,               "VK_ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT"),
+               tcu::Format::BitDesc(VK_ACCESS_SHADING_RATE_IMAGE_READ_BIT_NV,                                  "VK_ACCESS_SHADING_RATE_IMAGE_READ_BIT_NV"),
+               tcu::Format::BitDesc(VK_ACCESS_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR,   "VK_ACCESS_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR"),
+               tcu::Format::BitDesc(VK_ACCESS_FLAG_BITS_MAX_ENUM,                                                              "VK_ACCESS_FLAG_BITS_MAX_ENUM"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getImageAspectFlagsStr (VkImageAspectFlags value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_IMAGE_ASPECT_COLOR_BIT,                                 "VK_IMAGE_ASPECT_COLOR_BIT"),
+               tcu::Format::BitDesc(VK_IMAGE_ASPECT_DEPTH_BIT,                                 "VK_IMAGE_ASPECT_DEPTH_BIT"),
+               tcu::Format::BitDesc(VK_IMAGE_ASPECT_STENCIL_BIT,                               "VK_IMAGE_ASPECT_STENCIL_BIT"),
+               tcu::Format::BitDesc(VK_IMAGE_ASPECT_METADATA_BIT,                              "VK_IMAGE_ASPECT_METADATA_BIT"),
+               tcu::Format::BitDesc(VK_IMAGE_ASPECT_PLANE_0_BIT,                               "VK_IMAGE_ASPECT_PLANE_0_BIT"),
+               tcu::Format::BitDesc(VK_IMAGE_ASPECT_PLANE_1_BIT,                               "VK_IMAGE_ASPECT_PLANE_1_BIT"),
+               tcu::Format::BitDesc(VK_IMAGE_ASPECT_PLANE_2_BIT,                               "VK_IMAGE_ASPECT_PLANE_2_BIT"),
+               tcu::Format::BitDesc(VK_IMAGE_ASPECT_MEMORY_PLANE_0_BIT_EXT,    "VK_IMAGE_ASPECT_MEMORY_PLANE_0_BIT_EXT"),
+               tcu::Format::BitDesc(VK_IMAGE_ASPECT_MEMORY_PLANE_1_BIT_EXT,    "VK_IMAGE_ASPECT_MEMORY_PLANE_1_BIT_EXT"),
+               tcu::Format::BitDesc(VK_IMAGE_ASPECT_MEMORY_PLANE_2_BIT_EXT,    "VK_IMAGE_ASPECT_MEMORY_PLANE_2_BIT_EXT"),
+               tcu::Format::BitDesc(VK_IMAGE_ASPECT_MEMORY_PLANE_3_BIT_EXT,    "VK_IMAGE_ASPECT_MEMORY_PLANE_3_BIT_EXT"),
+               tcu::Format::BitDesc(VK_IMAGE_ASPECT_FLAG_BITS_MAX_ENUM,                "VK_IMAGE_ASPECT_FLAG_BITS_MAX_ENUM"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getFormatFeatureFlagsStr (VkFormatFeatureFlags value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT,                                                                                                                       "VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT"),
+               tcu::Format::BitDesc(VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT,                                                                                                                       "VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT"),
+               tcu::Format::BitDesc(VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT,                                                                                                        "VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT"),
+               tcu::Format::BitDesc(VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT,                                                                                                        "VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT"),
+               tcu::Format::BitDesc(VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT,                                                                                                        "VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT"),
+               tcu::Format::BitDesc(VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT,                                                                                         "VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT"),
+               tcu::Format::BitDesc(VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT,                                                                                                                       "VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT"),
+               tcu::Format::BitDesc(VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT,                                                                                                            "VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT"),
+               tcu::Format::BitDesc(VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT,                                                                                                      "VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT"),
+               tcu::Format::BitDesc(VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT,                                                                                            "VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT"),
+               tcu::Format::BitDesc(VK_FORMAT_FEATURE_BLIT_SRC_BIT,                                                                                                                            "VK_FORMAT_FEATURE_BLIT_SRC_BIT"),
+               tcu::Format::BitDesc(VK_FORMAT_FEATURE_BLIT_DST_BIT,                                                                                                                            "VK_FORMAT_FEATURE_BLIT_DST_BIT"),
+               tcu::Format::BitDesc(VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT,                                                                                         "VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT"),
+               tcu::Format::BitDesc(VK_FORMAT_FEATURE_TRANSFER_SRC_BIT,                                                                                                                        "VK_FORMAT_FEATURE_TRANSFER_SRC_BIT"),
+               tcu::Format::BitDesc(VK_FORMAT_FEATURE_TRANSFER_DST_BIT,                                                                                                                        "VK_FORMAT_FEATURE_TRANSFER_DST_BIT"),
+               tcu::Format::BitDesc(VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT,                                                                                                     "VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT"),
+               tcu::Format::BitDesc(VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT,                                                        "VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT"),
+               tcu::Format::BitDesc(VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT,                       "VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT"),
+               tcu::Format::BitDesc(VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT,                       "VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT"),
+               tcu::Format::BitDesc(VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT,     "VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT"),
+               tcu::Format::BitDesc(VK_FORMAT_FEATURE_DISJOINT_BIT,                                                                                                                            "VK_FORMAT_FEATURE_DISJOINT_BIT"),
+               tcu::Format::BitDesc(VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT,                                                                                                      "VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT"),
+               tcu::Format::BitDesc(VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT,                                                                                         "VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT"),
+               tcu::Format::BitDesc(VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG,                                                                                      "VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG"),
+               tcu::Format::BitDesc(VK_FORMAT_FEATURE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR,                                                                        "VK_FORMAT_FEATURE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR"),
+               tcu::Format::BitDesc(VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT,                                                                                      "VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT"),
+               tcu::Format::BitDesc(VK_FORMAT_FEATURE_FLAG_BITS_MAX_ENUM,                                                                                                                      "VK_FORMAT_FEATURE_FLAG_BITS_MAX_ENUM"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getImageCreateFlagsStr (VkImageCreateFlags value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_IMAGE_CREATE_SPARSE_BINDING_BIT,                                                "VK_IMAGE_CREATE_SPARSE_BINDING_BIT"),
+               tcu::Format::BitDesc(VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT,                                              "VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT"),
+               tcu::Format::BitDesc(VK_IMAGE_CREATE_SPARSE_ALIASED_BIT,                                                "VK_IMAGE_CREATE_SPARSE_ALIASED_BIT"),
+               tcu::Format::BitDesc(VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT,                                                "VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT"),
+               tcu::Format::BitDesc(VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT,                                               "VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT"),
+               tcu::Format::BitDesc(VK_IMAGE_CREATE_ALIAS_BIT,                                                                 "VK_IMAGE_CREATE_ALIAS_BIT"),
+               tcu::Format::BitDesc(VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT,                   "VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT"),
+               tcu::Format::BitDesc(VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT,                                   "VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT"),
+               tcu::Format::BitDesc(VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT,                   "VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT"),
+               tcu::Format::BitDesc(VK_IMAGE_CREATE_EXTENDED_USAGE_BIT,                                                "VK_IMAGE_CREATE_EXTENDED_USAGE_BIT"),
+               tcu::Format::BitDesc(VK_IMAGE_CREATE_PROTECTED_BIT,                                                             "VK_IMAGE_CREATE_PROTECTED_BIT"),
+               tcu::Format::BitDesc(VK_IMAGE_CREATE_DISJOINT_BIT,                                                              "VK_IMAGE_CREATE_DISJOINT_BIT"),
+               tcu::Format::BitDesc(VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT, "VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT"),
+               tcu::Format::BitDesc(VK_IMAGE_CREATE_FLAG_BITS_MAX_ENUM,                                                "VK_IMAGE_CREATE_FLAG_BITS_MAX_ENUM"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getSampleCountFlagsStr (VkSampleCountFlags value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_SAMPLE_COUNT_1_BIT,                                     "VK_SAMPLE_COUNT_1_BIT"),
+               tcu::Format::BitDesc(VK_SAMPLE_COUNT_2_BIT,                                     "VK_SAMPLE_COUNT_2_BIT"),
+               tcu::Format::BitDesc(VK_SAMPLE_COUNT_4_BIT,                                     "VK_SAMPLE_COUNT_4_BIT"),
+               tcu::Format::BitDesc(VK_SAMPLE_COUNT_8_BIT,                                     "VK_SAMPLE_COUNT_8_BIT"),
+               tcu::Format::BitDesc(VK_SAMPLE_COUNT_16_BIT,                            "VK_SAMPLE_COUNT_16_BIT"),
+               tcu::Format::BitDesc(VK_SAMPLE_COUNT_32_BIT,                            "VK_SAMPLE_COUNT_32_BIT"),
+               tcu::Format::BitDesc(VK_SAMPLE_COUNT_64_BIT,                            "VK_SAMPLE_COUNT_64_BIT"),
+               tcu::Format::BitDesc(VK_SAMPLE_COUNT_FLAG_BITS_MAX_ENUM,        "VK_SAMPLE_COUNT_FLAG_BITS_MAX_ENUM"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getImageUsageFlagsStr (VkImageUsageFlags value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_IMAGE_USAGE_TRANSFER_SRC_BIT,                                                   "VK_IMAGE_USAGE_TRANSFER_SRC_BIT"),
+               tcu::Format::BitDesc(VK_IMAGE_USAGE_TRANSFER_DST_BIT,                                                   "VK_IMAGE_USAGE_TRANSFER_DST_BIT"),
+               tcu::Format::BitDesc(VK_IMAGE_USAGE_SAMPLED_BIT,                                                                "VK_IMAGE_USAGE_SAMPLED_BIT"),
+               tcu::Format::BitDesc(VK_IMAGE_USAGE_STORAGE_BIT,                                                                "VK_IMAGE_USAGE_STORAGE_BIT"),
+               tcu::Format::BitDesc(VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT,                                               "VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT"),
+               tcu::Format::BitDesc(VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT,                               "VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT"),
+               tcu::Format::BitDesc(VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT,                                   "VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT"),
+               tcu::Format::BitDesc(VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT,                                               "VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT"),
+               tcu::Format::BitDesc(VK_IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV,                                  "VK_IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV"),
+               tcu::Format::BitDesc(VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR,   "VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR"),
+               tcu::Format::BitDesc(VK_IMAGE_USAGE_FLAG_BITS_MAX_ENUM,                                                 "VK_IMAGE_USAGE_FLAG_BITS_MAX_ENUM"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getMemoryHeapFlagsStr (VkMemoryHeapFlags value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_MEMORY_HEAP_DEVICE_LOCAL_BIT,   "VK_MEMORY_HEAP_DEVICE_LOCAL_BIT"),
+               tcu::Format::BitDesc(VK_MEMORY_HEAP_MULTI_INSTANCE_BIT, "VK_MEMORY_HEAP_MULTI_INSTANCE_BIT"),
+               tcu::Format::BitDesc(VK_MEMORY_HEAP_SEU_SAFE_BIT_KHR,   "VK_MEMORY_HEAP_SEU_SAFE_BIT_KHR"),
+               tcu::Format::BitDesc(VK_MEMORY_HEAP_FLAG_BITS_MAX_ENUM, "VK_MEMORY_HEAP_FLAG_BITS_MAX_ENUM"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getMemoryPropertyFlagsStr (VkMemoryPropertyFlags value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT,               "VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT"),
+               tcu::Format::BitDesc(VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT,               "VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT"),
+               tcu::Format::BitDesc(VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,              "VK_MEMORY_PROPERTY_HOST_COHERENT_BIT"),
+               tcu::Format::BitDesc(VK_MEMORY_PROPERTY_HOST_CACHED_BIT,                "VK_MEMORY_PROPERTY_HOST_CACHED_BIT"),
+               tcu::Format::BitDesc(VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT,   "VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT"),
+               tcu::Format::BitDesc(VK_MEMORY_PROPERTY_PROTECTED_BIT,                  "VK_MEMORY_PROPERTY_PROTECTED_BIT"),
+               tcu::Format::BitDesc(VK_MEMORY_PROPERTY_FLAG_BITS_MAX_ENUM,             "VK_MEMORY_PROPERTY_FLAG_BITS_MAX_ENUM"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getQueueFlagsStr (VkQueueFlags value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_QUEUE_GRAPHICS_BIT,                     "VK_QUEUE_GRAPHICS_BIT"),
+               tcu::Format::BitDesc(VK_QUEUE_COMPUTE_BIT,                      "VK_QUEUE_COMPUTE_BIT"),
+               tcu::Format::BitDesc(VK_QUEUE_TRANSFER_BIT,                     "VK_QUEUE_TRANSFER_BIT"),
+               tcu::Format::BitDesc(VK_QUEUE_SPARSE_BINDING_BIT,       "VK_QUEUE_SPARSE_BINDING_BIT"),
+               tcu::Format::BitDesc(VK_QUEUE_PROTECTED_BIT,            "VK_QUEUE_PROTECTED_BIT"),
+               tcu::Format::BitDesc(VK_QUEUE_FLAG_BITS_MAX_ENUM,       "VK_QUEUE_FLAG_BITS_MAX_ENUM"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getDeviceQueueCreateFlagsStr (VkDeviceQueueCreateFlags value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT,              "VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT"),
+               tcu::Format::BitDesc(VK_DEVICE_QUEUE_CREATE_FLAG_BITS_MAX_ENUM, "VK_DEVICE_QUEUE_CREATE_FLAG_BITS_MAX_ENUM"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getPipelineStageFlagsStr (VkPipelineStageFlags value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,                                                         "VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT"),
+               tcu::Format::BitDesc(VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT,                                                       "VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT"),
+               tcu::Format::BitDesc(VK_PIPELINE_STAGE_VERTEX_INPUT_BIT,                                                        "VK_PIPELINE_STAGE_VERTEX_INPUT_BIT"),
+               tcu::Format::BitDesc(VK_PIPELINE_STAGE_VERTEX_SHADER_BIT,                                                       "VK_PIPELINE_STAGE_VERTEX_SHADER_BIT"),
+               tcu::Format::BitDesc(VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT,                         "VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT"),
+               tcu::Format::BitDesc(VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT,                      "VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT"),
+               tcu::Format::BitDesc(VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT,                                                     "VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT"),
+               tcu::Format::BitDesc(VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,                                                     "VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT"),
+               tcu::Format::BitDesc(VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT,                                        "VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT"),
+               tcu::Format::BitDesc(VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT,                                         "VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT"),
+               tcu::Format::BitDesc(VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,                                     "VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT"),
+               tcu::Format::BitDesc(VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT,                                                      "VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT"),
+               tcu::Format::BitDesc(VK_PIPELINE_STAGE_TRANSFER_BIT,                                                            "VK_PIPELINE_STAGE_TRANSFER_BIT"),
+               tcu::Format::BitDesc(VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT,                                                      "VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT"),
+               tcu::Format::BitDesc(VK_PIPELINE_STAGE_HOST_BIT,                                                                        "VK_PIPELINE_STAGE_HOST_BIT"),
+               tcu::Format::BitDesc(VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT,                                                        "VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT"),
+               tcu::Format::BitDesc(VK_PIPELINE_STAGE_ALL_COMMANDS_BIT,                                                        "VK_PIPELINE_STAGE_ALL_COMMANDS_BIT"),
+               tcu::Format::BitDesc(VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV,                                       "VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV"),
+               tcu::Format::BitDesc(VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR,        "VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR"),
+               tcu::Format::BitDesc(VK_PIPELINE_STAGE_FLAG_BITS_MAX_ENUM,                                                      "VK_PIPELINE_STAGE_FLAG_BITS_MAX_ENUM"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getSparseMemoryBindFlagsStr (VkSparseMemoryBindFlags value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_SPARSE_MEMORY_BIND_METADATA_BIT,                "VK_SPARSE_MEMORY_BIND_METADATA_BIT"),
+               tcu::Format::BitDesc(VK_SPARSE_MEMORY_BIND_FLAG_BITS_MAX_ENUM,  "VK_SPARSE_MEMORY_BIND_FLAG_BITS_MAX_ENUM"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getSparseImageFormatFlagsStr (VkSparseImageFormatFlags value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT,                 "VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT"),
+               tcu::Format::BitDesc(VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT,               "VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT"),
+               tcu::Format::BitDesc(VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT, "VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT"),
+               tcu::Format::BitDesc(VK_SPARSE_IMAGE_FORMAT_FLAG_BITS_MAX_ENUM,                 "VK_SPARSE_IMAGE_FORMAT_FLAG_BITS_MAX_ENUM"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getFenceCreateFlagsStr (VkFenceCreateFlags value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_FENCE_CREATE_SIGNALED_BIT,                      "VK_FENCE_CREATE_SIGNALED_BIT"),
+               tcu::Format::BitDesc(VK_FENCE_CREATE_FLAG_BITS_MAX_ENUM,        "VK_FENCE_CREATE_FLAG_BITS_MAX_ENUM"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getQueryPipelineStatisticFlagsStr (VkQueryPipelineStatisticFlags value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT,                                           "VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT"),
+               tcu::Format::BitDesc(VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT,                                         "VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT"),
+               tcu::Format::BitDesc(VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT,                                         "VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT"),
+               tcu::Format::BitDesc(VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT,                                       "VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT"),
+               tcu::Format::BitDesc(VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT,                                        "VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT"),
+               tcu::Format::BitDesc(VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT,                                                      "VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT"),
+               tcu::Format::BitDesc(VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT,                                                       "VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT"),
+               tcu::Format::BitDesc(VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT,                                       "VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT"),
+               tcu::Format::BitDesc(VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT,                       "VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT"),
+               tcu::Format::BitDesc(VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT,        "VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT"),
+               tcu::Format::BitDesc(VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT,                                        "VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT"),
+               tcu::Format::BitDesc(VK_QUERY_PIPELINE_STATISTIC_FLAG_BITS_MAX_ENUM,                                                            "VK_QUERY_PIPELINE_STATISTIC_FLAG_BITS_MAX_ENUM"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getQueryResultFlagsStr (VkQueryResultFlags value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_QUERY_RESULT_64_BIT,                            "VK_QUERY_RESULT_64_BIT"),
+               tcu::Format::BitDesc(VK_QUERY_RESULT_WAIT_BIT,                          "VK_QUERY_RESULT_WAIT_BIT"),
+               tcu::Format::BitDesc(VK_QUERY_RESULT_WITH_AVAILABILITY_BIT,     "VK_QUERY_RESULT_WITH_AVAILABILITY_BIT"),
+               tcu::Format::BitDesc(VK_QUERY_RESULT_PARTIAL_BIT,                       "VK_QUERY_RESULT_PARTIAL_BIT"),
+               tcu::Format::BitDesc(VK_QUERY_RESULT_FLAG_BITS_MAX_ENUM,        "VK_QUERY_RESULT_FLAG_BITS_MAX_ENUM"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getBufferCreateFlagsStr (VkBufferCreateFlags value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_BUFFER_CREATE_SPARSE_BINDING_BIT,                                       "VK_BUFFER_CREATE_SPARSE_BINDING_BIT"),
+               tcu::Format::BitDesc(VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT,                                     "VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT"),
+               tcu::Format::BitDesc(VK_BUFFER_CREATE_SPARSE_ALIASED_BIT,                                       "VK_BUFFER_CREATE_SPARSE_ALIASED_BIT"),
+               tcu::Format::BitDesc(VK_BUFFER_CREATE_PROTECTED_BIT,                                            "VK_BUFFER_CREATE_PROTECTED_BIT"),
+               tcu::Format::BitDesc(VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT,        "VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT"),
+               tcu::Format::BitDesc(VK_BUFFER_CREATE_FLAG_BITS_MAX_ENUM,                                       "VK_BUFFER_CREATE_FLAG_BITS_MAX_ENUM"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getBufferUsageFlagsStr (VkBufferUsageFlags value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_BUFFER_USAGE_TRANSFER_SRC_BIT,                  "VK_BUFFER_USAGE_TRANSFER_SRC_BIT"),
+               tcu::Format::BitDesc(VK_BUFFER_USAGE_TRANSFER_DST_BIT,                  "VK_BUFFER_USAGE_TRANSFER_DST_BIT"),
+               tcu::Format::BitDesc(VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT,  "VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT"),
+               tcu::Format::BitDesc(VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT,  "VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT"),
+               tcu::Format::BitDesc(VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT,                "VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT"),
+               tcu::Format::BitDesc(VK_BUFFER_USAGE_STORAGE_BUFFER_BIT,                "VK_BUFFER_USAGE_STORAGE_BUFFER_BIT"),
+               tcu::Format::BitDesc(VK_BUFFER_USAGE_INDEX_BUFFER_BIT,                  "VK_BUFFER_USAGE_INDEX_BUFFER_BIT"),
+               tcu::Format::BitDesc(VK_BUFFER_USAGE_VERTEX_BUFFER_BIT,                 "VK_BUFFER_USAGE_VERTEX_BUFFER_BIT"),
+               tcu::Format::BitDesc(VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT,               "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT"),
+               tcu::Format::BitDesc(VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT, "VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT"),
+               tcu::Format::BitDesc(VK_BUFFER_USAGE_FLAG_BITS_MAX_ENUM,                "VK_BUFFER_USAGE_FLAG_BITS_MAX_ENUM"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getImageViewCreateFlagsStr (VkImageViewCreateFlags value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_IMAGE_VIEW_CREATE_FLAG_BITS_MAX_ENUM,   "VK_IMAGE_VIEW_CREATE_FLAG_BITS_MAX_ENUM"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getPipelineCacheCreateFlagsStr (VkPipelineCacheCreateFlags value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_PIPELINE_CACHE_CREATE_USE_APPLICATION_STORAGE_BIT,              "VK_PIPELINE_CACHE_CREATE_USE_APPLICATION_STORAGE_BIT"),
+               tcu::Format::BitDesc(VK_PIPELINE_CACHE_CREATE_RESERVED_1_BIT_EXT,                               "VK_PIPELINE_CACHE_CREATE_RESERVED_1_BIT_EXT"),
+               tcu::Format::BitDesc(VK_PIPELINE_CACHE_CREATE_READ_ONLY_BIT,                                    "VK_PIPELINE_CACHE_CREATE_READ_ONLY_BIT"),
+               tcu::Format::BitDesc(VK_PIPELINE_CACHE_CREATE_READ_ONLY_BIT_KHR,                                "VK_PIPELINE_CACHE_CREATE_READ_ONLY_BIT_KHR"),
+               tcu::Format::BitDesc(VK_PIPELINE_CACHE_CREATE_USE_APPLICATION_STORAGE_BIT_KHR,  "VK_PIPELINE_CACHE_CREATE_USE_APPLICATION_STORAGE_BIT_KHR"),
+               tcu::Format::BitDesc(VK_PIPELINE_CACHE_CREATE_FLAG_BITS_MAX_ENUM,                               "VK_PIPELINE_CACHE_CREATE_FLAG_BITS_MAX_ENUM"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getColorComponentFlagsStr (VkColorComponentFlags value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_COLOR_COMPONENT_R_BIT,                          "VK_COLOR_COMPONENT_R_BIT"),
+               tcu::Format::BitDesc(VK_COLOR_COMPONENT_G_BIT,                          "VK_COLOR_COMPONENT_G_BIT"),
+               tcu::Format::BitDesc(VK_COLOR_COMPONENT_B_BIT,                          "VK_COLOR_COMPONENT_B_BIT"),
+               tcu::Format::BitDesc(VK_COLOR_COMPONENT_A_BIT,                          "VK_COLOR_COMPONENT_A_BIT"),
+               tcu::Format::BitDesc(VK_COLOR_COMPONENT_FLAG_BITS_MAX_ENUM,     "VK_COLOR_COMPONENT_FLAG_BITS_MAX_ENUM"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getPipelineCreateFlagsStr (VkPipelineCreateFlags value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT,                       "VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT"),
+               tcu::Format::BitDesc(VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT,                          "VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT"),
+               tcu::Format::BitDesc(VK_PIPELINE_CREATE_DERIVATIVE_BIT,                                         "VK_PIPELINE_CREATE_DERIVATIVE_BIT"),
+               tcu::Format::BitDesc(VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT,       "VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT"),
+               tcu::Format::BitDesc(VK_PIPELINE_CREATE_DISPATCH_BASE_BIT,                                      "VK_PIPELINE_CREATE_DISPATCH_BASE_BIT"),
+               tcu::Format::BitDesc(VK_PIPELINE_CREATE_DISPATCH_BASE,                                          "VK_PIPELINE_CREATE_DISPATCH_BASE"),
+               tcu::Format::BitDesc(VK_PIPELINE_CREATE_FLAG_BITS_MAX_ENUM,                                     "VK_PIPELINE_CREATE_FLAG_BITS_MAX_ENUM"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getPipelineShaderStageCreateFlagsStr (VkPipelineShaderStageCreateFlags value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT,       "VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT"),
+               tcu::Format::BitDesc(VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT,            "VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT"),
+               tcu::Format::BitDesc(VK_PIPELINE_SHADER_STAGE_CREATE_FLAG_BITS_MAX_ENUM,                                        "VK_PIPELINE_SHADER_STAGE_CREATE_FLAG_BITS_MAX_ENUM"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getShaderStageFlagsStr (VkShaderStageFlags value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_SHADER_STAGE_VERTEX_BIT,                                        "VK_SHADER_STAGE_VERTEX_BIT"),
+               tcu::Format::BitDesc(VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT,          "VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT"),
+               tcu::Format::BitDesc(VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT,       "VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT"),
+               tcu::Format::BitDesc(VK_SHADER_STAGE_GEOMETRY_BIT,                                      "VK_SHADER_STAGE_GEOMETRY_BIT"),
+               tcu::Format::BitDesc(VK_SHADER_STAGE_FRAGMENT_BIT,                                      "VK_SHADER_STAGE_FRAGMENT_BIT"),
+               tcu::Format::BitDesc(VK_SHADER_STAGE_COMPUTE_BIT,                                       "VK_SHADER_STAGE_COMPUTE_BIT"),
+               tcu::Format::BitDesc(VK_SHADER_STAGE_ALL_GRAPHICS,                                      "VK_SHADER_STAGE_ALL_GRAPHICS"),
+               tcu::Format::BitDesc(VK_SHADER_STAGE_ALL,                                                       "VK_SHADER_STAGE_ALL"),
+               tcu::Format::BitDesc(VK_SHADER_STAGE_FLAG_BITS_MAX_ENUM,                        "VK_SHADER_STAGE_FLAG_BITS_MAX_ENUM"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getCullModeFlagsStr (VkCullModeFlags value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_CULL_MODE_NONE,                                 "VK_CULL_MODE_NONE"),
+               tcu::Format::BitDesc(VK_CULL_MODE_FRONT_BIT,                    "VK_CULL_MODE_FRONT_BIT"),
+               tcu::Format::BitDesc(VK_CULL_MODE_BACK_BIT,                             "VK_CULL_MODE_BACK_BIT"),
+               tcu::Format::BitDesc(VK_CULL_MODE_FRONT_AND_BACK,               "VK_CULL_MODE_FRONT_AND_BACK"),
+               tcu::Format::BitDesc(VK_CULL_MODE_FLAG_BITS_MAX_ENUM,   "VK_CULL_MODE_FLAG_BITS_MAX_ENUM"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getSamplerCreateFlagsStr (VkSamplerCreateFlags value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_SAMPLER_CREATE_FLAG_BITS_MAX_ENUM,      "VK_SAMPLER_CREATE_FLAG_BITS_MAX_ENUM"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getDescriptorPoolCreateFlagsStr (VkDescriptorPoolCreateFlags value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, "VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT"),
+               tcu::Format::BitDesc(VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT,   "VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT"),
+               tcu::Format::BitDesc(VK_DESCRIPTOR_POOL_CREATE_FLAG_BITS_MAX_ENUM,              "VK_DESCRIPTOR_POOL_CREATE_FLAG_BITS_MAX_ENUM"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getDescriptorSetLayoutCreateFlagsStr (VkDescriptorSetLayoutCreateFlags value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT,        "VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT"),
+               tcu::Format::BitDesc(VK_DESCRIPTOR_SET_LAYOUT_CREATE_FLAG_BITS_MAX_ENUM,                        "VK_DESCRIPTOR_SET_LAYOUT_CREATE_FLAG_BITS_MAX_ENUM"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getAttachmentDescriptionFlagsStr (VkAttachmentDescriptionFlags value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT,           "VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT"),
+               tcu::Format::BitDesc(VK_ATTACHMENT_DESCRIPTION_FLAG_BITS_MAX_ENUM,      "VK_ATTACHMENT_DESCRIPTION_FLAG_BITS_MAX_ENUM"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getDependencyFlagsStr (VkDependencyFlags value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_DEPENDENCY_BY_REGION_BIT,               "VK_DEPENDENCY_BY_REGION_BIT"),
+               tcu::Format::BitDesc(VK_DEPENDENCY_DEVICE_GROUP_BIT,    "VK_DEPENDENCY_DEVICE_GROUP_BIT"),
+               tcu::Format::BitDesc(VK_DEPENDENCY_VIEW_LOCAL_BIT,              "VK_DEPENDENCY_VIEW_LOCAL_BIT"),
+               tcu::Format::BitDesc(VK_DEPENDENCY_FLAG_BITS_MAX_ENUM,  "VK_DEPENDENCY_FLAG_BITS_MAX_ENUM"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getFramebufferCreateFlagsStr (VkFramebufferCreateFlags value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT,               "VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT"),
+               tcu::Format::BitDesc(VK_FRAMEBUFFER_CREATE_FLAG_BITS_MAX_ENUM,  "VK_FRAMEBUFFER_CREATE_FLAG_BITS_MAX_ENUM"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getRenderPassCreateFlagsStr (VkRenderPassCreateFlags value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_RENDER_PASS_CREATE_FLAG_BITS_MAX_ENUM,  "VK_RENDER_PASS_CREATE_FLAG_BITS_MAX_ENUM"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getSubpassDescriptionFlagsStr (VkSubpassDescriptionFlags value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_SUBPASS_DESCRIPTION_FLAG_BITS_MAX_ENUM, "VK_SUBPASS_DESCRIPTION_FLAG_BITS_MAX_ENUM"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getCommandPoolCreateFlagsStr (VkCommandPoolCreateFlags value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_COMMAND_POOL_CREATE_TRANSIENT_BIT,                              "VK_COMMAND_POOL_CREATE_TRANSIENT_BIT"),
+               tcu::Format::BitDesc(VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT,   "VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT"),
+               tcu::Format::BitDesc(VK_COMMAND_POOL_CREATE_PROTECTED_BIT,                              "VK_COMMAND_POOL_CREATE_PROTECTED_BIT"),
+               tcu::Format::BitDesc(VK_COMMAND_POOL_CREATE_FLAG_BITS_MAX_ENUM,                 "VK_COMMAND_POOL_CREATE_FLAG_BITS_MAX_ENUM"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getCommandPoolResetFlagsStr (VkCommandPoolResetFlags value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT,       "VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT"),
+               tcu::Format::BitDesc(VK_COMMAND_POOL_RESET_FLAG_BITS_MAX_ENUM,          "VK_COMMAND_POOL_RESET_FLAG_BITS_MAX_ENUM"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getCommandBufferUsageFlagsStr (VkCommandBufferUsageFlags value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT,               "VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT"),
+               tcu::Format::BitDesc(VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT,  "VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT"),
+               tcu::Format::BitDesc(VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT,              "VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT"),
+               tcu::Format::BitDesc(VK_COMMAND_BUFFER_USAGE_FLAG_BITS_MAX_ENUM,                "VK_COMMAND_BUFFER_USAGE_FLAG_BITS_MAX_ENUM"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getQueryControlFlagsStr (VkQueryControlFlags value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_QUERY_CONTROL_PRECISE_BIT,                      "VK_QUERY_CONTROL_PRECISE_BIT"),
+               tcu::Format::BitDesc(VK_QUERY_CONTROL_FLAG_BITS_MAX_ENUM,       "VK_QUERY_CONTROL_FLAG_BITS_MAX_ENUM"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getCommandBufferResetFlagsStr (VkCommandBufferResetFlags value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT,     "VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT"),
+               tcu::Format::BitDesc(VK_COMMAND_BUFFER_RESET_FLAG_BITS_MAX_ENUM,        "VK_COMMAND_BUFFER_RESET_FLAG_BITS_MAX_ENUM"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getStencilFaceFlagsStr (VkStencilFaceFlags value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_STENCIL_FACE_FRONT_BIT,                         "VK_STENCIL_FACE_FRONT_BIT"),
+               tcu::Format::BitDesc(VK_STENCIL_FACE_BACK_BIT,                          "VK_STENCIL_FACE_BACK_BIT"),
+               tcu::Format::BitDesc(VK_STENCIL_FACE_FRONT_AND_BACK,            "VK_STENCIL_FACE_FRONT_AND_BACK"),
+               tcu::Format::BitDesc(VK_STENCIL_FRONT_AND_BACK,                         "VK_STENCIL_FRONT_AND_BACK"),
+               tcu::Format::BitDesc(VK_STENCIL_FACE_FLAG_BITS_MAX_ENUM,        "VK_STENCIL_FACE_FLAG_BITS_MAX_ENUM"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getSubgroupFeatureFlagsStr (VkSubgroupFeatureFlags value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_SUBGROUP_FEATURE_BASIC_BIT,                             "VK_SUBGROUP_FEATURE_BASIC_BIT"),
+               tcu::Format::BitDesc(VK_SUBGROUP_FEATURE_VOTE_BIT,                              "VK_SUBGROUP_FEATURE_VOTE_BIT"),
+               tcu::Format::BitDesc(VK_SUBGROUP_FEATURE_ARITHMETIC_BIT,                "VK_SUBGROUP_FEATURE_ARITHMETIC_BIT"),
+               tcu::Format::BitDesc(VK_SUBGROUP_FEATURE_BALLOT_BIT,                    "VK_SUBGROUP_FEATURE_BALLOT_BIT"),
+               tcu::Format::BitDesc(VK_SUBGROUP_FEATURE_SHUFFLE_BIT,                   "VK_SUBGROUP_FEATURE_SHUFFLE_BIT"),
+               tcu::Format::BitDesc(VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT,  "VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT"),
+               tcu::Format::BitDesc(VK_SUBGROUP_FEATURE_CLUSTERED_BIT,                 "VK_SUBGROUP_FEATURE_CLUSTERED_BIT"),
+               tcu::Format::BitDesc(VK_SUBGROUP_FEATURE_QUAD_BIT,                              "VK_SUBGROUP_FEATURE_QUAD_BIT"),
+               tcu::Format::BitDesc(VK_SUBGROUP_FEATURE_FLAG_BITS_MAX_ENUM,    "VK_SUBGROUP_FEATURE_FLAG_BITS_MAX_ENUM"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getPeerMemoryFeatureFlagsStr (VkPeerMemoryFeatureFlags value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT,               "VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT"),
+               tcu::Format::BitDesc(VK_PEER_MEMORY_FEATURE_COPY_DST_BIT,               "VK_PEER_MEMORY_FEATURE_COPY_DST_BIT"),
+               tcu::Format::BitDesc(VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT,    "VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT"),
+               tcu::Format::BitDesc(VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT,    "VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT"),
+               tcu::Format::BitDesc(VK_PEER_MEMORY_FEATURE_FLAG_BITS_MAX_ENUM, "VK_PEER_MEMORY_FEATURE_FLAG_BITS_MAX_ENUM"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getMemoryAllocateFlagsStr (VkMemoryAllocateFlags value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT,                                        "VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT"),
+               tcu::Format::BitDesc(VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT,                                     "VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT"),
+               tcu::Format::BitDesc(VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT,      "VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT"),
+               tcu::Format::BitDesc(VK_MEMORY_ALLOCATE_FLAG_BITS_MAX_ENUM,                                     "VK_MEMORY_ALLOCATE_FLAG_BITS_MAX_ENUM"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getExternalMemoryHandleTypeFlagsStr (VkExternalMemoryHandleTypeFlags value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT,                                              "VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT"),
+               tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT,                                   "VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT"),
+               tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT,                               "VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT"),
+               tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT,                                  "VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT"),
+               tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT,                              "VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT"),
+               tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT,                                             "VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT"),
+               tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT,                                 "VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT"),
+               tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT,                                    "VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT"),
+               tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT,                    "VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT"),
+               tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT, "VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT"),
+               tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_FLAG_BITS_MAX_ENUM,                                 "VK_EXTERNAL_MEMORY_HANDLE_TYPE_FLAG_BITS_MAX_ENUM"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getExternalMemoryFeatureFlagsStr (VkExternalMemoryFeatureFlags value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT,     "VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT"),
+               tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT,         "VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT"),
+               tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT,         "VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT"),
+               tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_FEATURE_FLAG_BITS_MAX_ENUM,     "VK_EXTERNAL_MEMORY_FEATURE_FLAG_BITS_MAX_ENUM"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getExternalFenceHandleTypeFlagsStr (VkExternalFenceHandleTypeFlags value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT,                       "VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT"),
+               tcu::Format::BitDesc(VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT,            "VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT"),
+               tcu::Format::BitDesc(VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT,        "VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT"),
+               tcu::Format::BitDesc(VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT,                         "VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT"),
+               tcu::Format::BitDesc(VK_EXTERNAL_FENCE_HANDLE_TYPE_FLAG_BITS_MAX_ENUM,          "VK_EXTERNAL_FENCE_HANDLE_TYPE_FLAG_BITS_MAX_ENUM"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getExternalFenceFeatureFlagsStr (VkExternalFenceFeatureFlags value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT,          "VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT"),
+               tcu::Format::BitDesc(VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT,          "VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT"),
+               tcu::Format::BitDesc(VK_EXTERNAL_FENCE_FEATURE_FLAG_BITS_MAX_ENUM,      "VK_EXTERNAL_FENCE_FEATURE_FLAG_BITS_MAX_ENUM"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getFenceImportFlagsStr (VkFenceImportFlags value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_FENCE_IMPORT_TEMPORARY_BIT,                     "VK_FENCE_IMPORT_TEMPORARY_BIT"),
+               tcu::Format::BitDesc(VK_FENCE_IMPORT_FLAG_BITS_MAX_ENUM,        "VK_FENCE_IMPORT_FLAG_BITS_MAX_ENUM"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getSemaphoreImportFlagsStr (VkSemaphoreImportFlags value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_SEMAPHORE_IMPORT_TEMPORARY_BIT,                 "VK_SEMAPHORE_IMPORT_TEMPORARY_BIT"),
+               tcu::Format::BitDesc(VK_SEMAPHORE_IMPORT_FLAG_BITS_MAX_ENUM,    "VK_SEMAPHORE_IMPORT_FLAG_BITS_MAX_ENUM"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getExternalSemaphoreHandleTypeFlagsStr (VkExternalSemaphoreHandleTypeFlags value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT,                   "VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT"),
+               tcu::Format::BitDesc(VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT,                "VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT"),
+               tcu::Format::BitDesc(VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT,    "VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT"),
+               tcu::Format::BitDesc(VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT,                 "VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT"),
+               tcu::Format::BitDesc(VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT,                             "VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT"),
+               tcu::Format::BitDesc(VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_FENCE_BIT,                 "VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_FENCE_BIT"),
+               tcu::Format::BitDesc(VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_FLAG_BITS_MAX_ENUM,              "VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_FLAG_BITS_MAX_ENUM"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getExternalSemaphoreFeatureFlagsStr (VkExternalSemaphoreFeatureFlags value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT,              "VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT"),
+               tcu::Format::BitDesc(VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT,              "VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT"),
+               tcu::Format::BitDesc(VK_EXTERNAL_SEMAPHORE_FEATURE_FLAG_BITS_MAX_ENUM,  "VK_EXTERNAL_SEMAPHORE_FEATURE_FLAG_BITS_MAX_ENUM"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getResolveModeFlagsStr (VkResolveModeFlags value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_RESOLVE_MODE_NONE,                                      "VK_RESOLVE_MODE_NONE"),
+               tcu::Format::BitDesc(VK_RESOLVE_MODE_SAMPLE_ZERO_BIT,           "VK_RESOLVE_MODE_SAMPLE_ZERO_BIT"),
+               tcu::Format::BitDesc(VK_RESOLVE_MODE_AVERAGE_BIT,                       "VK_RESOLVE_MODE_AVERAGE_BIT"),
+               tcu::Format::BitDesc(VK_RESOLVE_MODE_MIN_BIT,                           "VK_RESOLVE_MODE_MIN_BIT"),
+               tcu::Format::BitDesc(VK_RESOLVE_MODE_MAX_BIT,                           "VK_RESOLVE_MODE_MAX_BIT"),
+               tcu::Format::BitDesc(VK_RESOLVE_MODE_FLAG_BITS_MAX_ENUM,        "VK_RESOLVE_MODE_FLAG_BITS_MAX_ENUM"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getDescriptorBindingFlagsStr (VkDescriptorBindingFlags value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT,                       "VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT"),
+               tcu::Format::BitDesc(VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT,     "VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT"),
+               tcu::Format::BitDesc(VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT,                         "VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT"),
+               tcu::Format::BitDesc(VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT,       "VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT"),
+               tcu::Format::BitDesc(VK_DESCRIPTOR_BINDING_FLAG_BITS_MAX_ENUM,                          "VK_DESCRIPTOR_BINDING_FLAG_BITS_MAX_ENUM"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getSemaphoreWaitFlagsStr (VkSemaphoreWaitFlags value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_SEMAPHORE_WAIT_ANY_BIT,                         "VK_SEMAPHORE_WAIT_ANY_BIT"),
+               tcu::Format::BitDesc(VK_SEMAPHORE_WAIT_FLAG_BITS_MAX_ENUM,      "VK_SEMAPHORE_WAIT_FLAG_BITS_MAX_ENUM"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getSurfaceTransformFlagsKHRStr (VkSurfaceTransformFlagsKHR value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR,                                             "VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR"),
+               tcu::Format::BitDesc(VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR,                                    "VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR"),
+               tcu::Format::BitDesc(VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR,                                   "VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR"),
+               tcu::Format::BitDesc(VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR,                                   "VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR"),
+               tcu::Format::BitDesc(VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR,                    "VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR"),
+               tcu::Format::BitDesc(VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR,  "VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR"),
+               tcu::Format::BitDesc(VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR, "VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR"),
+               tcu::Format::BitDesc(VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR, "VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR"),
+               tcu::Format::BitDesc(VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR,                                              "VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR"),
+               tcu::Format::BitDesc(VK_SURFACE_TRANSFORM_FLAG_BITS_MAX_ENUM_KHR,                               "VK_SURFACE_TRANSFORM_FLAG_BITS_MAX_ENUM_KHR"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getCompositeAlphaFlagsKHRStr (VkCompositeAlphaFlagsKHR value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR,                         "VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR"),
+               tcu::Format::BitDesc(VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR,         "VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR"),
+               tcu::Format::BitDesc(VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR,        "VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR"),
+               tcu::Format::BitDesc(VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR,                        "VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR"),
+               tcu::Format::BitDesc(VK_COMPOSITE_ALPHA_FLAG_BITS_MAX_ENUM_KHR,         "VK_COMPOSITE_ALPHA_FLAG_BITS_MAX_ENUM_KHR"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getSwapchainCreateFlagsKHRStr (VkSwapchainCreateFlagsKHR value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR,   "VK_SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR"),
+               tcu::Format::BitDesc(VK_SWAPCHAIN_CREATE_PROTECTED_BIT_KHR,                                             "VK_SWAPCHAIN_CREATE_PROTECTED_BIT_KHR"),
+               tcu::Format::BitDesc(VK_SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR,                                "VK_SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR"),
+               tcu::Format::BitDesc(VK_SWAPCHAIN_CREATE_FLAG_BITS_MAX_ENUM_KHR,                                "VK_SWAPCHAIN_CREATE_FLAG_BITS_MAX_ENUM_KHR"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getDeviceGroupPresentModeFlagsKHRStr (VkDeviceGroupPresentModeFlagsKHR value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR,                                "VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR"),
+               tcu::Format::BitDesc(VK_DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHR,                               "VK_DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHR"),
+               tcu::Format::BitDesc(VK_DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR,                                  "VK_DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR"),
+               tcu::Format::BitDesc(VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR,   "VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR"),
+               tcu::Format::BitDesc(VK_DEVICE_GROUP_PRESENT_MODE_FLAG_BITS_MAX_ENUM_KHR,               "VK_DEVICE_GROUP_PRESENT_MODE_FLAG_BITS_MAX_ENUM_KHR"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getDisplayPlaneAlphaFlagsKHRStr (VkDisplayPlaneAlphaFlagsKHR value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR,                                             "VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR"),
+               tcu::Format::BitDesc(VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR,                                             "VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR"),
+               tcu::Format::BitDesc(VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR,                                  "VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR"),
+               tcu::Format::BitDesc(VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR,    "VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR"),
+               tcu::Format::BitDesc(VK_DISPLAY_PLANE_ALPHA_FLAG_BITS_MAX_ENUM_KHR,                             "VK_DISPLAY_PLANE_ALPHA_FLAG_BITS_MAX_ENUM_KHR"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getRefreshObjectFlagsKHRStr (VkRefreshObjectFlagsKHR value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_REFRESH_OBJECT_FLAG_BITS_MAX_ENUM_KHR,  "VK_REFRESH_OBJECT_FLAG_BITS_MAX_ENUM_KHR"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getSurfaceCounterFlagsEXTStr (VkSurfaceCounterFlagsEXT value)
+{
+       static const tcu::Format::BitDesc s_desc[] =
+       {
+               tcu::Format::BitDesc(VK_SURFACE_COUNTER_VBLANK_BIT_EXT,                 "VK_SURFACE_COUNTER_VBLANK_BIT_EXT"),
+               tcu::Format::BitDesc(VK_SURFACE_COUNTER_VBLANK_EXT,                             "VK_SURFACE_COUNTER_VBLANK_EXT"),
+               tcu::Format::BitDesc(VK_SURFACE_COUNTER_FLAG_BITS_MAX_ENUM_EXT, "VK_SURFACE_COUNTER_FLAG_BITS_MAX_ENUM_EXT"),
+       };
+       return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getInstanceCreateFlagsStr (VkInstanceCreateFlags value)
+{
+       return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
+}
+
+tcu::Format::Bitfield<32> getDeviceCreateFlagsStr (VkDeviceCreateFlags value)
+{
+       return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
+}
+
+tcu::Format::Bitfield<32> getMemoryMapFlagsStr (VkMemoryMapFlags value)
+{
+       return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
+}
+
+tcu::Format::Bitfield<32> getSemaphoreCreateFlagsStr (VkSemaphoreCreateFlags value)
+{
+       return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
+}
+
+tcu::Format::Bitfield<32> getEventCreateFlagsStr (VkEventCreateFlags value)
+{
+       return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
+}
+
+tcu::Format::Bitfield<32> getQueryPoolCreateFlagsStr (VkQueryPoolCreateFlags value)
+{
+       return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
+}
+
+tcu::Format::Bitfield<32> getBufferViewCreateFlagsStr (VkBufferViewCreateFlags value)
+{
+       return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
+}
+
+tcu::Format::Bitfield<32> getPipelineVertexInputStateCreateFlagsStr (VkPipelineVertexInputStateCreateFlags value)
+{
+       return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
+}
+
+tcu::Format::Bitfield<32> getPipelineInputAssemblyStateCreateFlagsStr (VkPipelineInputAssemblyStateCreateFlags value)
+{
+       return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
+}
+
+tcu::Format::Bitfield<32> getPipelineTessellationStateCreateFlagsStr (VkPipelineTessellationStateCreateFlags value)
+{
+       return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
+}
+
+tcu::Format::Bitfield<32> getPipelineViewportStateCreateFlagsStr (VkPipelineViewportStateCreateFlags value)
+{
+       return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
+}
+
+tcu::Format::Bitfield<32> getPipelineRasterizationStateCreateFlagsStr (VkPipelineRasterizationStateCreateFlags value)
+{
+       return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
+}
+
+tcu::Format::Bitfield<32> getPipelineMultisampleStateCreateFlagsStr (VkPipelineMultisampleStateCreateFlags value)
+{
+       return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
+}
+
+tcu::Format::Bitfield<32> getPipelineDepthStencilStateCreateFlagsStr (VkPipelineDepthStencilStateCreateFlags value)
+{
+       return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
+}
+
+tcu::Format::Bitfield<32> getPipelineColorBlendStateCreateFlagsStr (VkPipelineColorBlendStateCreateFlags value)
+{
+       return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
+}
+
+tcu::Format::Bitfield<32> getPipelineDynamicStateCreateFlagsStr (VkPipelineDynamicStateCreateFlags value)
+{
+       return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
+}
+
+tcu::Format::Bitfield<32> getPipelineLayoutCreateFlagsStr (VkPipelineLayoutCreateFlags value)
+{
+       return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
+}
+
+tcu::Format::Bitfield<32> getDescriptorPoolResetFlagsStr (VkDescriptorPoolResetFlags value)
+{
+       return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
+}
+
+tcu::Format::Bitfield<32> getDisplayModeCreateFlagsKHRStr (VkDisplayModeCreateFlagsKHR value)
+{
+       return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
+}
+
+tcu::Format::Bitfield<32> getDisplaySurfaceCreateFlagsKHRStr (VkDisplaySurfaceCreateFlagsKHR value)
+{
+       return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
+}
+
+tcu::Format::Bitfield<32> getPipelineDiscardRectangleStateCreateFlagsEXTStr (VkPipelineDiscardRectangleStateCreateFlagsEXT value)
+{
+       return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
+}
+
+tcu::Format::Bitfield<32> getPipelineRasterizationConservativeStateCreateFlagsEXTStr (VkPipelineRasterizationConservativeStateCreateFlagsEXT value)
+{
+       return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
+}
+
+tcu::Format::Bitfield<32> getPipelineRasterizationDepthClipStateCreateFlagsEXTStr (VkPipelineRasterizationDepthClipStateCreateFlagsEXT value)
+{
+       return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
+}
+
+tcu::Format::Bitfield<32> getHeadlessSurfaceCreateFlagsEXTStr (VkHeadlessSurfaceCreateFlagsEXT value)
+{
+       return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
+}
+
+std::ostream& operator<< (std::ostream& s, const VkExtent2D& value)
+{
+       s << "VkExtent2D = {\n";
+       s << "\twidth = " << value.width << '\n';
+       s << "\theight = " << value.height << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkExtent3D& value)
+{
+       s << "VkExtent3D = {\n";
+       s << "\twidth = " << value.width << '\n';
+       s << "\theight = " << value.height << '\n';
+       s << "\tdepth = " << value.depth << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkOffset2D& value)
+{
+       s << "VkOffset2D = {\n";
+       s << "\tx = " << value.x << '\n';
+       s << "\ty = " << value.y << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkOffset3D& value)
+{
+       s << "VkOffset3D = {\n";
+       s << "\tx = " << value.x << '\n';
+       s << "\ty = " << value.y << '\n';
+       s << "\tz = " << value.z << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkRect2D& value)
+{
+       s << "VkRect2D = {\n";
+       s << "\toffset = " << value.offset << '\n';
+       s << "\textent = " << value.extent << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkBaseInStructure& value)
+{
+       s << "VkBaseInStructure = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkBaseOutStructure& value)
+{
+       s << "VkBaseOutStructure = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkBufferMemoryBarrier& value)
+{
+       s << "VkBufferMemoryBarrier = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tsrcAccessMask = " << getAccessFlagsStr(value.srcAccessMask) << '\n';
+       s << "\tdstAccessMask = " << getAccessFlagsStr(value.dstAccessMask) << '\n';
+       s << "\tsrcQueueFamilyIndex = " << value.srcQueueFamilyIndex << '\n';
+       s << "\tdstQueueFamilyIndex = " << value.dstQueueFamilyIndex << '\n';
+       s << "\tbuffer = " << value.buffer << '\n';
+       s << "\toffset = " << value.offset << '\n';
+       s << "\tsize = " << value.size << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkDispatchIndirectCommand& value)
+{
+       s << "VkDispatchIndirectCommand = {\n";
+       s << "\tx = " << value.x << '\n';
+       s << "\ty = " << value.y << '\n';
+       s << "\tz = " << value.z << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkDrawIndexedIndirectCommand& value)
+{
+       s << "VkDrawIndexedIndirectCommand = {\n";
+       s << "\tindexCount = " << value.indexCount << '\n';
+       s << "\tinstanceCount = " << value.instanceCount << '\n';
+       s << "\tfirstIndex = " << value.firstIndex << '\n';
+       s << "\tvertexOffset = " << value.vertexOffset << '\n';
+       s << "\tfirstInstance = " << value.firstInstance << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkDrawIndirectCommand& value)
+{
+       s << "VkDrawIndirectCommand = {\n";
+       s << "\tvertexCount = " << value.vertexCount << '\n';
+       s << "\tinstanceCount = " << value.instanceCount << '\n';
+       s << "\tfirstVertex = " << value.firstVertex << '\n';
+       s << "\tfirstInstance = " << value.firstInstance << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkImageSubresourceRange& value)
+{
+       s << "VkImageSubresourceRange = {\n";
+       s << "\taspectMask = " << getImageAspectFlagsStr(value.aspectMask) << '\n';
+       s << "\tbaseMipLevel = " << value.baseMipLevel << '\n';
+       s << "\tlevelCount = " << value.levelCount << '\n';
+       s << "\tbaseArrayLayer = " << value.baseArrayLayer << '\n';
+       s << "\tlayerCount = " << value.layerCount << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkImageMemoryBarrier& value)
+{
+       s << "VkImageMemoryBarrier = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tsrcAccessMask = " << getAccessFlagsStr(value.srcAccessMask) << '\n';
+       s << "\tdstAccessMask = " << getAccessFlagsStr(value.dstAccessMask) << '\n';
+       s << "\toldLayout = " << value.oldLayout << '\n';
+       s << "\tnewLayout = " << value.newLayout << '\n';
+       s << "\tsrcQueueFamilyIndex = " << value.srcQueueFamilyIndex << '\n';
+       s << "\tdstQueueFamilyIndex = " << value.dstQueueFamilyIndex << '\n';
+       s << "\timage = " << value.image << '\n';
+       s << "\tsubresourceRange = " << value.subresourceRange << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkMemoryBarrier& value)
+{
+       s << "VkMemoryBarrier = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tsrcAccessMask = " << getAccessFlagsStr(value.srcAccessMask) << '\n';
+       s << "\tdstAccessMask = " << getAccessFlagsStr(value.dstAccessMask) << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkAllocationCallbacks& value)
+{
+       s << "VkAllocationCallbacks = {\n";
+       s << "\tpUserData = " << value.pUserData << '\n';
+       s << "\tpfnAllocation = " << value.pfnAllocation << '\n';
+       s << "\tpfnReallocation = " << value.pfnReallocation << '\n';
+       s << "\tpfnFree = " << value.pfnFree << '\n';
+       s << "\tpfnInternalAllocation = " << value.pfnInternalAllocation << '\n';
+       s << "\tpfnInternalFree = " << value.pfnInternalFree << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkApplicationInfo& value)
+{
+       s << "VkApplicationInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tpApplicationName = " << getCharPtrStr(value.pApplicationName) << '\n';
+       s << "\tapplicationVersion = " << value.applicationVersion << '\n';
+       s << "\tpEngineName = " << getCharPtrStr(value.pEngineName) << '\n';
+       s << "\tengineVersion = " << value.engineVersion << '\n';
+       s << "\tapiVersion = " << value.apiVersion << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkFormatProperties& value)
+{
+       s << "VkFormatProperties = {\n";
+       s << "\tlinearTilingFeatures = " << getFormatFeatureFlagsStr(value.linearTilingFeatures) << '\n';
+       s << "\toptimalTilingFeatures = " << getFormatFeatureFlagsStr(value.optimalTilingFeatures) << '\n';
+       s << "\tbufferFeatures = " << getFormatFeatureFlagsStr(value.bufferFeatures) << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkImageFormatProperties& value)
+{
+       s << "VkImageFormatProperties = {\n";
+       s << "\tmaxExtent = " << value.maxExtent << '\n';
+       s << "\tmaxMipLevels = " << value.maxMipLevels << '\n';
+       s << "\tmaxArrayLayers = " << value.maxArrayLayers << '\n';
+       s << "\tsampleCounts = " << getSampleCountFlagsStr(value.sampleCounts) << '\n';
+       s << "\tmaxResourceSize = " << value.maxResourceSize << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkInstanceCreateInfo& value)
+{
+       s << "VkInstanceCreateInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tflags = " << getInstanceCreateFlagsStr(value.flags) << '\n';
+       s << "\tpApplicationInfo = " << value.pApplicationInfo << '\n';
+       s << "\tenabledLayerCount = " << value.enabledLayerCount << '\n';
+       s << "\tppEnabledLayerNames = " << value.ppEnabledLayerNames << '\n';
+       s << "\tenabledExtensionCount = " << value.enabledExtensionCount << '\n';
+       s << "\tppEnabledExtensionNames = " << value.ppEnabledExtensionNames << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkMemoryHeap& value)
+{
+       s << "VkMemoryHeap = {\n";
+       s << "\tsize = " << value.size << '\n';
+       s << "\tflags = " << getMemoryHeapFlagsStr(value.flags) << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkMemoryType& value)
+{
+       s << "VkMemoryType = {\n";
+       s << "\tpropertyFlags = " << getMemoryPropertyFlagsStr(value.propertyFlags) << '\n';
+       s << "\theapIndex = " << value.heapIndex << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceFeatures& value)
+{
+       s << "VkPhysicalDeviceFeatures = {\n";
+       s << "\trobustBufferAccess = " << value.robustBufferAccess << '\n';
+       s << "\tfullDrawIndexUint32 = " << value.fullDrawIndexUint32 << '\n';
+       s << "\timageCubeArray = " << value.imageCubeArray << '\n';
+       s << "\tindependentBlend = " << value.independentBlend << '\n';
+       s << "\tgeometryShader = " << value.geometryShader << '\n';
+       s << "\ttessellationShader = " << value.tessellationShader << '\n';
+       s << "\tsampleRateShading = " << value.sampleRateShading << '\n';
+       s << "\tdualSrcBlend = " << value.dualSrcBlend << '\n';
+       s << "\tlogicOp = " << value.logicOp << '\n';
+       s << "\tmultiDrawIndirect = " << value.multiDrawIndirect << '\n';
+       s << "\tdrawIndirectFirstInstance = " << value.drawIndirectFirstInstance << '\n';
+       s << "\tdepthClamp = " << value.depthClamp << '\n';
+       s << "\tdepthBiasClamp = " << value.depthBiasClamp << '\n';
+       s << "\tfillModeNonSolid = " << value.fillModeNonSolid << '\n';
+       s << "\tdepthBounds = " << value.depthBounds << '\n';
+       s << "\twideLines = " << value.wideLines << '\n';
+       s << "\tlargePoints = " << value.largePoints << '\n';
+       s << "\talphaToOne = " << value.alphaToOne << '\n';
+       s << "\tmultiViewport = " << value.multiViewport << '\n';
+       s << "\tsamplerAnisotropy = " << value.samplerAnisotropy << '\n';
+       s << "\ttextureCompressionETC2 = " << value.textureCompressionETC2 << '\n';
+       s << "\ttextureCompressionASTC_LDR = " << value.textureCompressionASTC_LDR << '\n';
+       s << "\ttextureCompressionBC = " << value.textureCompressionBC << '\n';
+       s << "\tocclusionQueryPrecise = " << value.occlusionQueryPrecise << '\n';
+       s << "\tpipelineStatisticsQuery = " << value.pipelineStatisticsQuery << '\n';
+       s << "\tvertexPipelineStoresAndAtomics = " << value.vertexPipelineStoresAndAtomics << '\n';
+       s << "\tfragmentStoresAndAtomics = " << value.fragmentStoresAndAtomics << '\n';
+       s << "\tshaderTessellationAndGeometryPointSize = " << value.shaderTessellationAndGeometryPointSize << '\n';
+       s << "\tshaderImageGatherExtended = " << value.shaderImageGatherExtended << '\n';
+       s << "\tshaderStorageImageExtendedFormats = " << value.shaderStorageImageExtendedFormats << '\n';
+       s << "\tshaderStorageImageMultisample = " << value.shaderStorageImageMultisample << '\n';
+       s << "\tshaderStorageImageReadWithoutFormat = " << value.shaderStorageImageReadWithoutFormat << '\n';
+       s << "\tshaderStorageImageWriteWithoutFormat = " << value.shaderStorageImageWriteWithoutFormat << '\n';
+       s << "\tshaderUniformBufferArrayDynamicIndexing = " << value.shaderUniformBufferArrayDynamicIndexing << '\n';
+       s << "\tshaderSampledImageArrayDynamicIndexing = " << value.shaderSampledImageArrayDynamicIndexing << '\n';
+       s << "\tshaderStorageBufferArrayDynamicIndexing = " << value.shaderStorageBufferArrayDynamicIndexing << '\n';
+       s << "\tshaderStorageImageArrayDynamicIndexing = " << value.shaderStorageImageArrayDynamicIndexing << '\n';
+       s << "\tshaderClipDistance = " << value.shaderClipDistance << '\n';
+       s << "\tshaderCullDistance = " << value.shaderCullDistance << '\n';
+       s << "\tshaderFloat64 = " << value.shaderFloat64 << '\n';
+       s << "\tshaderInt64 = " << value.shaderInt64 << '\n';
+       s << "\tshaderInt16 = " << value.shaderInt16 << '\n';
+       s << "\tshaderResourceResidency = " << value.shaderResourceResidency << '\n';
+       s << "\tshaderResourceMinLod = " << value.shaderResourceMinLod << '\n';
+       s << "\tsparseBinding = " << value.sparseBinding << '\n';
+       s << "\tsparseResidencyBuffer = " << value.sparseResidencyBuffer << '\n';
+       s << "\tsparseResidencyImage2D = " << value.sparseResidencyImage2D << '\n';
+       s << "\tsparseResidencyImage3D = " << value.sparseResidencyImage3D << '\n';
+       s << "\tsparseResidency2Samples = " << value.sparseResidency2Samples << '\n';
+       s << "\tsparseResidency4Samples = " << value.sparseResidency4Samples << '\n';
+       s << "\tsparseResidency8Samples = " << value.sparseResidency8Samples << '\n';
+       s << "\tsparseResidency16Samples = " << value.sparseResidency16Samples << '\n';
+       s << "\tsparseResidencyAliased = " << value.sparseResidencyAliased << '\n';
+       s << "\tvariableMultisampleRate = " << value.variableMultisampleRate << '\n';
+       s << "\tinheritedQueries = " << value.inheritedQueries << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceLimits& value)
+{
+       s << "VkPhysicalDeviceLimits = {\n";
+       s << "\tmaxImageDimension1D = " << value.maxImageDimension1D << '\n';
+       s << "\tmaxImageDimension2D = " << value.maxImageDimension2D << '\n';
+       s << "\tmaxImageDimension3D = " << value.maxImageDimension3D << '\n';
+       s << "\tmaxImageDimensionCube = " << value.maxImageDimensionCube << '\n';
+       s << "\tmaxImageArrayLayers = " << value.maxImageArrayLayers << '\n';
+       s << "\tmaxTexelBufferElements = " << value.maxTexelBufferElements << '\n';
+       s << "\tmaxUniformBufferRange = " << value.maxUniformBufferRange << '\n';
+       s << "\tmaxStorageBufferRange = " << value.maxStorageBufferRange << '\n';
+       s << "\tmaxPushConstantsSize = " << value.maxPushConstantsSize << '\n';
+       s << "\tmaxMemoryAllocationCount = " << value.maxMemoryAllocationCount << '\n';
+       s << "\tmaxSamplerAllocationCount = " << value.maxSamplerAllocationCount << '\n';
+       s << "\tbufferImageGranularity = " << value.bufferImageGranularity << '\n';
+       s << "\tsparseAddressSpaceSize = " << value.sparseAddressSpaceSize << '\n';
+       s << "\tmaxBoundDescriptorSets = " << value.maxBoundDescriptorSets << '\n';
+       s << "\tmaxPerStageDescriptorSamplers = " << value.maxPerStageDescriptorSamplers << '\n';
+       s << "\tmaxPerStageDescriptorUniformBuffers = " << value.maxPerStageDescriptorUniformBuffers << '\n';
+       s << "\tmaxPerStageDescriptorStorageBuffers = " << value.maxPerStageDescriptorStorageBuffers << '\n';
+       s << "\tmaxPerStageDescriptorSampledImages = " << value.maxPerStageDescriptorSampledImages << '\n';
+       s << "\tmaxPerStageDescriptorStorageImages = " << value.maxPerStageDescriptorStorageImages << '\n';
+       s << "\tmaxPerStageDescriptorInputAttachments = " << value.maxPerStageDescriptorInputAttachments << '\n';
+       s << "\tmaxPerStageResources = " << value.maxPerStageResources << '\n';
+       s << "\tmaxDescriptorSetSamplers = " << value.maxDescriptorSetSamplers << '\n';
+       s << "\tmaxDescriptorSetUniformBuffers = " << value.maxDescriptorSetUniformBuffers << '\n';
+       s << "\tmaxDescriptorSetUniformBuffersDynamic = " << value.maxDescriptorSetUniformBuffersDynamic << '\n';
+       s << "\tmaxDescriptorSetStorageBuffers = " << value.maxDescriptorSetStorageBuffers << '\n';
+       s << "\tmaxDescriptorSetStorageBuffersDynamic = " << value.maxDescriptorSetStorageBuffersDynamic << '\n';
+       s << "\tmaxDescriptorSetSampledImages = " << value.maxDescriptorSetSampledImages << '\n';
+       s << "\tmaxDescriptorSetStorageImages = " << value.maxDescriptorSetStorageImages << '\n';
+       s << "\tmaxDescriptorSetInputAttachments = " << value.maxDescriptorSetInputAttachments << '\n';
+       s << "\tmaxVertexInputAttributes = " << value.maxVertexInputAttributes << '\n';
+       s << "\tmaxVertexInputBindings = " << value.maxVertexInputBindings << '\n';
+       s << "\tmaxVertexInputAttributeOffset = " << value.maxVertexInputAttributeOffset << '\n';
+       s << "\tmaxVertexInputBindingStride = " << value.maxVertexInputBindingStride << '\n';
+       s << "\tmaxVertexOutputComponents = " << value.maxVertexOutputComponents << '\n';
+       s << "\tmaxTessellationGenerationLevel = " << value.maxTessellationGenerationLevel << '\n';
+       s << "\tmaxTessellationPatchSize = " << value.maxTessellationPatchSize << '\n';
+       s << "\tmaxTessellationControlPerVertexInputComponents = " << value.maxTessellationControlPerVertexInputComponents << '\n';
+       s << "\tmaxTessellationControlPerVertexOutputComponents = " << value.maxTessellationControlPerVertexOutputComponents << '\n';
+       s << "\tmaxTessellationControlPerPatchOutputComponents = " << value.maxTessellationControlPerPatchOutputComponents << '\n';
+       s << "\tmaxTessellationControlTotalOutputComponents = " << value.maxTessellationControlTotalOutputComponents << '\n';
+       s << "\tmaxTessellationEvaluationInputComponents = " << value.maxTessellationEvaluationInputComponents << '\n';
+       s << "\tmaxTessellationEvaluationOutputComponents = " << value.maxTessellationEvaluationOutputComponents << '\n';
+       s << "\tmaxGeometryShaderInvocations = " << value.maxGeometryShaderInvocations << '\n';
+       s << "\tmaxGeometryInputComponents = " << value.maxGeometryInputComponents << '\n';
+       s << "\tmaxGeometryOutputComponents = " << value.maxGeometryOutputComponents << '\n';
+       s << "\tmaxGeometryOutputVertices = " << value.maxGeometryOutputVertices << '\n';
+       s << "\tmaxGeometryTotalOutputComponents = " << value.maxGeometryTotalOutputComponents << '\n';
+       s << "\tmaxFragmentInputComponents = " << value.maxFragmentInputComponents << '\n';
+       s << "\tmaxFragmentOutputAttachments = " << value.maxFragmentOutputAttachments << '\n';
+       s << "\tmaxFragmentDualSrcAttachments = " << value.maxFragmentDualSrcAttachments << '\n';
+       s << "\tmaxFragmentCombinedOutputResources = " << value.maxFragmentCombinedOutputResources << '\n';
+       s << "\tmaxComputeSharedMemorySize = " << value.maxComputeSharedMemorySize << '\n';
+       s << "\tmaxComputeWorkGroupCount = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.maxComputeWorkGroupCount), DE_ARRAY_END(value.maxComputeWorkGroupCount)) << '\n';
+       s << "\tmaxComputeWorkGroupInvocations = " << value.maxComputeWorkGroupInvocations << '\n';
+       s << "\tmaxComputeWorkGroupSize = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.maxComputeWorkGroupSize), DE_ARRAY_END(value.maxComputeWorkGroupSize)) << '\n';
+       s << "\tsubPixelPrecisionBits = " << value.subPixelPrecisionBits << '\n';
+       s << "\tsubTexelPrecisionBits = " << value.subTexelPrecisionBits << '\n';
+       s << "\tmipmapPrecisionBits = " << value.mipmapPrecisionBits << '\n';
+       s << "\tmaxDrawIndexedIndexValue = " << value.maxDrawIndexedIndexValue << '\n';
+       s << "\tmaxDrawIndirectCount = " << value.maxDrawIndirectCount << '\n';
+       s << "\tmaxSamplerLodBias = " << value.maxSamplerLodBias << '\n';
+       s << "\tmaxSamplerAnisotropy = " << value.maxSamplerAnisotropy << '\n';
+       s << "\tmaxViewports = " << value.maxViewports << '\n';
+       s << "\tmaxViewportDimensions = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.maxViewportDimensions), DE_ARRAY_END(value.maxViewportDimensions)) << '\n';
+       s << "\tviewportBoundsRange = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.viewportBoundsRange), DE_ARRAY_END(value.viewportBoundsRange)) << '\n';
+       s << "\tviewportSubPixelBits = " << value.viewportSubPixelBits << '\n';
+       s << "\tminMemoryMapAlignment = " << value.minMemoryMapAlignment << '\n';
+       s << "\tminTexelBufferOffsetAlignment = " << value.minTexelBufferOffsetAlignment << '\n';
+       s << "\tminUniformBufferOffsetAlignment = " << value.minUniformBufferOffsetAlignment << '\n';
+       s << "\tminStorageBufferOffsetAlignment = " << value.minStorageBufferOffsetAlignment << '\n';
+       s << "\tminTexelOffset = " << value.minTexelOffset << '\n';
+       s << "\tmaxTexelOffset = " << value.maxTexelOffset << '\n';
+       s << "\tminTexelGatherOffset = " << value.minTexelGatherOffset << '\n';
+       s << "\tmaxTexelGatherOffset = " << value.maxTexelGatherOffset << '\n';
+       s << "\tminInterpolationOffset = " << value.minInterpolationOffset << '\n';
+       s << "\tmaxInterpolationOffset = " << value.maxInterpolationOffset << '\n';
+       s << "\tsubPixelInterpolationOffsetBits = " << value.subPixelInterpolationOffsetBits << '\n';
+       s << "\tmaxFramebufferWidth = " << value.maxFramebufferWidth << '\n';
+       s << "\tmaxFramebufferHeight = " << value.maxFramebufferHeight << '\n';
+       s << "\tmaxFramebufferLayers = " << value.maxFramebufferLayers << '\n';
+       s << "\tframebufferColorSampleCounts = " << getSampleCountFlagsStr(value.framebufferColorSampleCounts) << '\n';
+       s << "\tframebufferDepthSampleCounts = " << getSampleCountFlagsStr(value.framebufferDepthSampleCounts) << '\n';
+       s << "\tframebufferStencilSampleCounts = " << getSampleCountFlagsStr(value.framebufferStencilSampleCounts) << '\n';
+       s << "\tframebufferNoAttachmentsSampleCounts = " << getSampleCountFlagsStr(value.framebufferNoAttachmentsSampleCounts) << '\n';
+       s << "\tmaxColorAttachments = " << value.maxColorAttachments << '\n';
+       s << "\tsampledImageColorSampleCounts = " << getSampleCountFlagsStr(value.sampledImageColorSampleCounts) << '\n';
+       s << "\tsampledImageIntegerSampleCounts = " << getSampleCountFlagsStr(value.sampledImageIntegerSampleCounts) << '\n';
+       s << "\tsampledImageDepthSampleCounts = " << getSampleCountFlagsStr(value.sampledImageDepthSampleCounts) << '\n';
+       s << "\tsampledImageStencilSampleCounts = " << getSampleCountFlagsStr(value.sampledImageStencilSampleCounts) << '\n';
+       s << "\tstorageImageSampleCounts = " << getSampleCountFlagsStr(value.storageImageSampleCounts) << '\n';
+       s << "\tmaxSampleMaskWords = " << value.maxSampleMaskWords << '\n';
+       s << "\ttimestampComputeAndGraphics = " << value.timestampComputeAndGraphics << '\n';
+       s << "\ttimestampPeriod = " << value.timestampPeriod << '\n';
+       s << "\tmaxClipDistances = " << value.maxClipDistances << '\n';
+       s << "\tmaxCullDistances = " << value.maxCullDistances << '\n';
+       s << "\tmaxCombinedClipAndCullDistances = " << value.maxCombinedClipAndCullDistances << '\n';
+       s << "\tdiscreteQueuePriorities = " << value.discreteQueuePriorities << '\n';
+       s << "\tpointSizeRange = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.pointSizeRange), DE_ARRAY_END(value.pointSizeRange)) << '\n';
+       s << "\tlineWidthRange = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.lineWidthRange), DE_ARRAY_END(value.lineWidthRange)) << '\n';
+       s << "\tpointSizeGranularity = " << value.pointSizeGranularity << '\n';
+       s << "\tlineWidthGranularity = " << value.lineWidthGranularity << '\n';
+       s << "\tstrictLines = " << value.strictLines << '\n';
+       s << "\tstandardSampleLocations = " << value.standardSampleLocations << '\n';
+       s << "\toptimalBufferCopyOffsetAlignment = " << value.optimalBufferCopyOffsetAlignment << '\n';
+       s << "\toptimalBufferCopyRowPitchAlignment = " << value.optimalBufferCopyRowPitchAlignment << '\n';
+       s << "\tnonCoherentAtomSize = " << value.nonCoherentAtomSize << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceMemoryProperties& value)
+{
+       s << "VkPhysicalDeviceMemoryProperties = {\n";
+       s << "\tmemoryTypeCount = " << value.memoryTypeCount << '\n';
+       s << "\tmemoryTypes = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.memoryTypes), DE_ARRAY_BEGIN(value.memoryTypes) + value.memoryTypeCount) << '\n';
+       s << "\tmemoryHeapCount = " << value.memoryHeapCount << '\n';
+       s << "\tmemoryHeaps = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.memoryHeaps), DE_ARRAY_BEGIN(value.memoryHeaps) + value.memoryHeapCount) << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceSparseProperties& value)
+{
+       s << "VkPhysicalDeviceSparseProperties = {\n";
+       s << "\tresidencyStandard2DBlockShape = " << value.residencyStandard2DBlockShape << '\n';
+       s << "\tresidencyStandard2DMultisampleBlockShape = " << value.residencyStandard2DMultisampleBlockShape << '\n';
+       s << "\tresidencyStandard3DBlockShape = " << value.residencyStandard3DBlockShape << '\n';
+       s << "\tresidencyAlignedMipSize = " << value.residencyAlignedMipSize << '\n';
+       s << "\tresidencyNonResidentStrict = " << value.residencyNonResidentStrict << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceProperties& value)
+{
+       s << "VkPhysicalDeviceProperties = {\n";
+       s << "\tapiVersion = " << value.apiVersion << '\n';
+       s << "\tdriverVersion = " << value.driverVersion << '\n';
+       s << "\tvendorID = " << value.vendorID << '\n';
+       s << "\tdeviceID = " << value.deviceID << '\n';
+       s << "\tdeviceType = " << value.deviceType << '\n';
+       s << "\tdeviceName = " << (const char*)value.deviceName << '\n';
+       s << "\tpipelineCacheUUID = " << '\n' << tcu::formatArray(tcu::Format::HexIterator<deUint8>(DE_ARRAY_BEGIN(value.pipelineCacheUUID)), tcu::Format::HexIterator<deUint8>(DE_ARRAY_END(value.pipelineCacheUUID))) << '\n';
+       s << "\tlimits = " << value.limits << '\n';
+       s << "\tsparseProperties = " << value.sparseProperties << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkQueueFamilyProperties& value)
+{
+       s << "VkQueueFamilyProperties = {\n";
+       s << "\tqueueFlags = " << getQueueFlagsStr(value.queueFlags) << '\n';
+       s << "\tqueueCount = " << value.queueCount << '\n';
+       s << "\ttimestampValidBits = " << value.timestampValidBits << '\n';
+       s << "\tminImageTransferGranularity = " << value.minImageTransferGranularity << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkDeviceQueueCreateInfo& value)
+{
+       s << "VkDeviceQueueCreateInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tflags = " << getDeviceQueueCreateFlagsStr(value.flags) << '\n';
+       s << "\tqueueFamilyIndex = " << value.queueFamilyIndex << '\n';
+       s << "\tqueueCount = " << value.queueCount << '\n';
+       s << "\tpQueuePriorities = " << value.pQueuePriorities << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkDeviceCreateInfo& value)
+{
+       s << "VkDeviceCreateInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tflags = " << getDeviceCreateFlagsStr(value.flags) << '\n';
+       s << "\tqueueCreateInfoCount = " << value.queueCreateInfoCount << '\n';
+       s << "\tpQueueCreateInfos = " << value.pQueueCreateInfos << '\n';
+       s << "\tenabledLayerCount = " << value.enabledLayerCount << '\n';
+       s << "\tppEnabledLayerNames = " << value.ppEnabledLayerNames << '\n';
+       s << "\tenabledExtensionCount = " << value.enabledExtensionCount << '\n';
+       s << "\tppEnabledExtensionNames = " << value.ppEnabledExtensionNames << '\n';
+       s << "\tpEnabledFeatures = " << value.pEnabledFeatures << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkExtensionProperties& value)
+{
+       s << "VkExtensionProperties = {\n";
+       s << "\textensionName = " << (const char*)value.extensionName << '\n';
+       s << "\tspecVersion = " << value.specVersion << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkLayerProperties& value)
+{
+       s << "VkLayerProperties = {\n";
+       s << "\tlayerName = " << (const char*)value.layerName << '\n';
+       s << "\tspecVersion = " << value.specVersion << '\n';
+       s << "\timplementationVersion = " << value.implementationVersion << '\n';
+       s << "\tdescription = " << (const char*)value.description << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkSubmitInfo& value)
+{
+       s << "VkSubmitInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\twaitSemaphoreCount = " << value.waitSemaphoreCount << '\n';
+       s << "\tpWaitSemaphores = " << value.pWaitSemaphores << '\n';
+       s << "\tpWaitDstStageMask = " << value.pWaitDstStageMask << '\n';
+       s << "\tcommandBufferCount = " << value.commandBufferCount << '\n';
+       s << "\tpCommandBuffers = " << value.pCommandBuffers << '\n';
+       s << "\tsignalSemaphoreCount = " << value.signalSemaphoreCount << '\n';
+       s << "\tpSignalSemaphores = " << value.pSignalSemaphores << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkMappedMemoryRange& value)
+{
+       s << "VkMappedMemoryRange = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tmemory = " << value.memory << '\n';
+       s << "\toffset = " << value.offset << '\n';
+       s << "\tsize = " << value.size << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkMemoryAllocateInfo& value)
+{
+       s << "VkMemoryAllocateInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tallocationSize = " << value.allocationSize << '\n';
+       s << "\tmemoryTypeIndex = " << value.memoryTypeIndex << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkMemoryRequirements& value)
+{
+       s << "VkMemoryRequirements = {\n";
+       s << "\tsize = " << value.size << '\n';
+       s << "\talignment = " << value.alignment << '\n';
+       s << "\tmemoryTypeBits = " << value.memoryTypeBits << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkSparseMemoryBind& value)
+{
+       s << "VkSparseMemoryBind = {\n";
+       s << "\tresourceOffset = " << value.resourceOffset << '\n';
+       s << "\tsize = " << value.size << '\n';
+       s << "\tmemory = " << value.memory << '\n';
+       s << "\tmemoryOffset = " << value.memoryOffset << '\n';
+       s << "\tflags = " << getSparseMemoryBindFlagsStr(value.flags) << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkSparseBufferMemoryBindInfo& value)
+{
+       s << "VkSparseBufferMemoryBindInfo = {\n";
+       s << "\tbuffer = " << value.buffer << '\n';
+       s << "\tbindCount = " << value.bindCount << '\n';
+       s << "\tpBinds = " << value.pBinds << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkSparseImageOpaqueMemoryBindInfo& value)
+{
+       s << "VkSparseImageOpaqueMemoryBindInfo = {\n";
+       s << "\timage = " << value.image << '\n';
+       s << "\tbindCount = " << value.bindCount << '\n';
+       s << "\tpBinds = " << value.pBinds << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkImageSubresource& value)
+{
+       s << "VkImageSubresource = {\n";
+       s << "\taspectMask = " << getImageAspectFlagsStr(value.aspectMask) << '\n';
+       s << "\tmipLevel = " << value.mipLevel << '\n';
+       s << "\tarrayLayer = " << value.arrayLayer << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkSparseImageMemoryBind& value)
+{
+       s << "VkSparseImageMemoryBind = {\n";
+       s << "\tsubresource = " << value.subresource << '\n';
+       s << "\toffset = " << value.offset << '\n';
+       s << "\textent = " << value.extent << '\n';
+       s << "\tmemory = " << value.memory << '\n';
+       s << "\tmemoryOffset = " << value.memoryOffset << '\n';
+       s << "\tflags = " << getSparseMemoryBindFlagsStr(value.flags) << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkSparseImageMemoryBindInfo& value)
+{
+       s << "VkSparseImageMemoryBindInfo = {\n";
+       s << "\timage = " << value.image << '\n';
+       s << "\tbindCount = " << value.bindCount << '\n';
+       s << "\tpBinds = " << value.pBinds << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkBindSparseInfo& value)
+{
+       s << "VkBindSparseInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\twaitSemaphoreCount = " << value.waitSemaphoreCount << '\n';
+       s << "\tpWaitSemaphores = " << value.pWaitSemaphores << '\n';
+       s << "\tbufferBindCount = " << value.bufferBindCount << '\n';
+       s << "\tpBufferBinds = " << value.pBufferBinds << '\n';
+       s << "\timageOpaqueBindCount = " << value.imageOpaqueBindCount << '\n';
+       s << "\tpImageOpaqueBinds = " << value.pImageOpaqueBinds << '\n';
+       s << "\timageBindCount = " << value.imageBindCount << '\n';
+       s << "\tpImageBinds = " << value.pImageBinds << '\n';
+       s << "\tsignalSemaphoreCount = " << value.signalSemaphoreCount << '\n';
+       s << "\tpSignalSemaphores = " << value.pSignalSemaphores << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkSparseImageFormatProperties& value)
+{
+       s << "VkSparseImageFormatProperties = {\n";
+       s << "\taspectMask = " << getImageAspectFlagsStr(value.aspectMask) << '\n';
+       s << "\timageGranularity = " << value.imageGranularity << '\n';
+       s << "\tflags = " << getSparseImageFormatFlagsStr(value.flags) << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkSparseImageMemoryRequirements& value)
+{
+       s << "VkSparseImageMemoryRequirements = {\n";
+       s << "\tformatProperties = " << value.formatProperties << '\n';
+       s << "\timageMipTailFirstLod = " << value.imageMipTailFirstLod << '\n';
+       s << "\timageMipTailSize = " << value.imageMipTailSize << '\n';
+       s << "\timageMipTailOffset = " << value.imageMipTailOffset << '\n';
+       s << "\timageMipTailStride = " << value.imageMipTailStride << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkFenceCreateInfo& value)
+{
+       s << "VkFenceCreateInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tflags = " << getFenceCreateFlagsStr(value.flags) << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkSemaphoreCreateInfo& value)
+{
+       s << "VkSemaphoreCreateInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tflags = " << getSemaphoreCreateFlagsStr(value.flags) << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkEventCreateInfo& value)
+{
+       s << "VkEventCreateInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tflags = " << getEventCreateFlagsStr(value.flags) << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkQueryPoolCreateInfo& value)
+{
+       s << "VkQueryPoolCreateInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tflags = " << getQueryPoolCreateFlagsStr(value.flags) << '\n';
+       s << "\tqueryType = " << value.queryType << '\n';
+       s << "\tqueryCount = " << value.queryCount << '\n';
+       s << "\tpipelineStatistics = " << getQueryPipelineStatisticFlagsStr(value.pipelineStatistics) << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkBufferCreateInfo& value)
+{
+       s << "VkBufferCreateInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tflags = " << getBufferCreateFlagsStr(value.flags) << '\n';
+       s << "\tsize = " << value.size << '\n';
+       s << "\tusage = " << getBufferUsageFlagsStr(value.usage) << '\n';
+       s << "\tsharingMode = " << value.sharingMode << '\n';
+       s << "\tqueueFamilyIndexCount = " << value.queueFamilyIndexCount << '\n';
+       s << "\tpQueueFamilyIndices = " << value.pQueueFamilyIndices << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkBufferViewCreateInfo& value)
+{
+       s << "VkBufferViewCreateInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tflags = " << getBufferViewCreateFlagsStr(value.flags) << '\n';
+       s << "\tbuffer = " << value.buffer << '\n';
+       s << "\tformat = " << value.format << '\n';
+       s << "\toffset = " << value.offset << '\n';
+       s << "\trange = " << value.range << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkImageCreateInfo& value)
+{
+       s << "VkImageCreateInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tflags = " << getImageCreateFlagsStr(value.flags) << '\n';
+       s << "\timageType = " << value.imageType << '\n';
+       s << "\tformat = " << value.format << '\n';
+       s << "\textent = " << value.extent << '\n';
+       s << "\tmipLevels = " << value.mipLevels << '\n';
+       s << "\tarrayLayers = " << value.arrayLayers << '\n';
+       s << "\tsamples = " << value.samples << '\n';
+       s << "\ttiling = " << value.tiling << '\n';
+       s << "\tusage = " << getImageUsageFlagsStr(value.usage) << '\n';
+       s << "\tsharingMode = " << value.sharingMode << '\n';
+       s << "\tqueueFamilyIndexCount = " << value.queueFamilyIndexCount << '\n';
+       s << "\tpQueueFamilyIndices = " << value.pQueueFamilyIndices << '\n';
+       s << "\tinitialLayout = " << value.initialLayout << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkSubresourceLayout& value)
+{
+       s << "VkSubresourceLayout = {\n";
+       s << "\toffset = " << value.offset << '\n';
+       s << "\tsize = " << value.size << '\n';
+       s << "\trowPitch = " << value.rowPitch << '\n';
+       s << "\tarrayPitch = " << value.arrayPitch << '\n';
+       s << "\tdepthPitch = " << value.depthPitch << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkComponentMapping& value)
+{
+       s << "VkComponentMapping = {\n";
+       s << "\tr = " << value.r << '\n';
+       s << "\tg = " << value.g << '\n';
+       s << "\tb = " << value.b << '\n';
+       s << "\ta = " << value.a << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkImageViewCreateInfo& value)
+{
+       s << "VkImageViewCreateInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tflags = " << getImageViewCreateFlagsStr(value.flags) << '\n';
+       s << "\timage = " << value.image << '\n';
+       s << "\tviewType = " << value.viewType << '\n';
+       s << "\tformat = " << value.format << '\n';
+       s << "\tcomponents = " << value.components << '\n';
+       s << "\tsubresourceRange = " << value.subresourceRange << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPipelineCacheCreateInfo& value)
+{
+       s << "VkPipelineCacheCreateInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tflags = " << getPipelineCacheCreateFlagsStr(value.flags) << '\n';
+       s << "\tinitialDataSize = " << value.initialDataSize << '\n';
+       s << "\tpInitialData = " << value.pInitialData << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkSpecializationMapEntry& value)
+{
+       s << "VkSpecializationMapEntry = {\n";
+       s << "\tconstantID = " << value.constantID << '\n';
+       s << "\toffset = " << value.offset << '\n';
+       s << "\tsize = " << value.size << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkSpecializationInfo& value)
+{
+       s << "VkSpecializationInfo = {\n";
+       s << "\tmapEntryCount = " << value.mapEntryCount << '\n';
+       s << "\tpMapEntries = " << value.pMapEntries << '\n';
+       s << "\tdataSize = " << value.dataSize << '\n';
+       s << "\tpData = " << value.pData << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPipelineShaderStageCreateInfo& value)
+{
+       s << "VkPipelineShaderStageCreateInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tflags = " << getPipelineShaderStageCreateFlagsStr(value.flags) << '\n';
+       s << "\tstage = " << value.stage << '\n';
+       s << "\tmodule = " << value.module << '\n';
+       s << "\tpName = " << getCharPtrStr(value.pName) << '\n';
+       s << "\tpSpecializationInfo = " << value.pSpecializationInfo << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkComputePipelineCreateInfo& value)
+{
+       s << "VkComputePipelineCreateInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tflags = " << getPipelineCreateFlagsStr(value.flags) << '\n';
+       s << "\tstage = " << value.stage << '\n';
+       s << "\tlayout = " << value.layout << '\n';
+       s << "\tbasePipelineHandle = " << value.basePipelineHandle << '\n';
+       s << "\tbasePipelineIndex = " << value.basePipelineIndex << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkVertexInputBindingDescription& value)
+{
+       s << "VkVertexInputBindingDescription = {\n";
+       s << "\tbinding = " << value.binding << '\n';
+       s << "\tstride = " << value.stride << '\n';
+       s << "\tinputRate = " << value.inputRate << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkVertexInputAttributeDescription& value)
+{
+       s << "VkVertexInputAttributeDescription = {\n";
+       s << "\tlocation = " << value.location << '\n';
+       s << "\tbinding = " << value.binding << '\n';
+       s << "\tformat = " << value.format << '\n';
+       s << "\toffset = " << value.offset << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPipelineVertexInputStateCreateInfo& value)
+{
+       s << "VkPipelineVertexInputStateCreateInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tflags = " << getPipelineVertexInputStateCreateFlagsStr(value.flags) << '\n';
+       s << "\tvertexBindingDescriptionCount = " << value.vertexBindingDescriptionCount << '\n';
+       s << "\tpVertexBindingDescriptions = " << value.pVertexBindingDescriptions << '\n';
+       s << "\tvertexAttributeDescriptionCount = " << value.vertexAttributeDescriptionCount << '\n';
+       s << "\tpVertexAttributeDescriptions = " << value.pVertexAttributeDescriptions << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPipelineInputAssemblyStateCreateInfo& value)
+{
+       s << "VkPipelineInputAssemblyStateCreateInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tflags = " << getPipelineInputAssemblyStateCreateFlagsStr(value.flags) << '\n';
+       s << "\ttopology = " << value.topology << '\n';
+       s << "\tprimitiveRestartEnable = " << value.primitiveRestartEnable << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPipelineTessellationStateCreateInfo& value)
+{
+       s << "VkPipelineTessellationStateCreateInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tflags = " << getPipelineTessellationStateCreateFlagsStr(value.flags) << '\n';
+       s << "\tpatchControlPoints = " << value.patchControlPoints << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkViewport& value)
+{
+       s << "VkViewport = {\n";
+       s << "\tx = " << value.x << '\n';
+       s << "\ty = " << value.y << '\n';
+       s << "\twidth = " << value.width << '\n';
+       s << "\theight = " << value.height << '\n';
+       s << "\tminDepth = " << value.minDepth << '\n';
+       s << "\tmaxDepth = " << value.maxDepth << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPipelineViewportStateCreateInfo& value)
+{
+       s << "VkPipelineViewportStateCreateInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tflags = " << getPipelineViewportStateCreateFlagsStr(value.flags) << '\n';
+       s << "\tviewportCount = " << value.viewportCount << '\n';
+       s << "\tpViewports = " << value.pViewports << '\n';
+       s << "\tscissorCount = " << value.scissorCount << '\n';
+       s << "\tpScissors = " << value.pScissors << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPipelineRasterizationStateCreateInfo& value)
+{
+       s << "VkPipelineRasterizationStateCreateInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tflags = " << getPipelineRasterizationStateCreateFlagsStr(value.flags) << '\n';
+       s << "\tdepthClampEnable = " << value.depthClampEnable << '\n';
+       s << "\trasterizerDiscardEnable = " << value.rasterizerDiscardEnable << '\n';
+       s << "\tpolygonMode = " << value.polygonMode << '\n';
+       s << "\tcullMode = " << getCullModeFlagsStr(value.cullMode) << '\n';
+       s << "\tfrontFace = " << value.frontFace << '\n';
+       s << "\tdepthBiasEnable = " << value.depthBiasEnable << '\n';
+       s << "\tdepthBiasConstantFactor = " << value.depthBiasConstantFactor << '\n';
+       s << "\tdepthBiasClamp = " << value.depthBiasClamp << '\n';
+       s << "\tdepthBiasSlopeFactor = " << value.depthBiasSlopeFactor << '\n';
+       s << "\tlineWidth = " << value.lineWidth << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPipelineMultisampleStateCreateInfo& value)
+{
+       s << "VkPipelineMultisampleStateCreateInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tflags = " << getPipelineMultisampleStateCreateFlagsStr(value.flags) << '\n';
+       s << "\trasterizationSamples = " << value.rasterizationSamples << '\n';
+       s << "\tsampleShadingEnable = " << value.sampleShadingEnable << '\n';
+       s << "\tminSampleShading = " << value.minSampleShading << '\n';
+       s << "\tpSampleMask = " << value.pSampleMask << '\n';
+       s << "\talphaToCoverageEnable = " << value.alphaToCoverageEnable << '\n';
+       s << "\talphaToOneEnable = " << value.alphaToOneEnable << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkStencilOpState& value)
+{
+       s << "VkStencilOpState = {\n";
+       s << "\tfailOp = " << value.failOp << '\n';
+       s << "\tpassOp = " << value.passOp << '\n';
+       s << "\tdepthFailOp = " << value.depthFailOp << '\n';
+       s << "\tcompareOp = " << value.compareOp << '\n';
+       s << "\tcompareMask = " << value.compareMask << '\n';
+       s << "\twriteMask = " << value.writeMask << '\n';
+       s << "\treference = " << value.reference << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPipelineDepthStencilStateCreateInfo& value)
+{
+       s << "VkPipelineDepthStencilStateCreateInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tflags = " << getPipelineDepthStencilStateCreateFlagsStr(value.flags) << '\n';
+       s << "\tdepthTestEnable = " << value.depthTestEnable << '\n';
+       s << "\tdepthWriteEnable = " << value.depthWriteEnable << '\n';
+       s << "\tdepthCompareOp = " << value.depthCompareOp << '\n';
+       s << "\tdepthBoundsTestEnable = " << value.depthBoundsTestEnable << '\n';
+       s << "\tstencilTestEnable = " << value.stencilTestEnable << '\n';
+       s << "\tfront = " << value.front << '\n';
+       s << "\tback = " << value.back << '\n';
+       s << "\tminDepthBounds = " << value.minDepthBounds << '\n';
+       s << "\tmaxDepthBounds = " << value.maxDepthBounds << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPipelineColorBlendAttachmentState& value)
+{
+       s << "VkPipelineColorBlendAttachmentState = {\n";
+       s << "\tblendEnable = " << value.blendEnable << '\n';
+       s << "\tsrcColorBlendFactor = " << value.srcColorBlendFactor << '\n';
+       s << "\tdstColorBlendFactor = " << value.dstColorBlendFactor << '\n';
+       s << "\tcolorBlendOp = " << value.colorBlendOp << '\n';
+       s << "\tsrcAlphaBlendFactor = " << value.srcAlphaBlendFactor << '\n';
+       s << "\tdstAlphaBlendFactor = " << value.dstAlphaBlendFactor << '\n';
+       s << "\talphaBlendOp = " << value.alphaBlendOp << '\n';
+       s << "\tcolorWriteMask = " << getColorComponentFlagsStr(value.colorWriteMask) << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPipelineColorBlendStateCreateInfo& value)
+{
+       s << "VkPipelineColorBlendStateCreateInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tflags = " << getPipelineColorBlendStateCreateFlagsStr(value.flags) << '\n';
+       s << "\tlogicOpEnable = " << value.logicOpEnable << '\n';
+       s << "\tlogicOp = " << value.logicOp << '\n';
+       s << "\tattachmentCount = " << value.attachmentCount << '\n';
+       s << "\tpAttachments = " << value.pAttachments << '\n';
+       s << "\tblendConstants = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.blendConstants), DE_ARRAY_END(value.blendConstants)) << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPipelineDynamicStateCreateInfo& value)
+{
+       s << "VkPipelineDynamicStateCreateInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tflags = " << getPipelineDynamicStateCreateFlagsStr(value.flags) << '\n';
+       s << "\tdynamicStateCount = " << value.dynamicStateCount << '\n';
+       s << "\tpDynamicStates = " << value.pDynamicStates << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkGraphicsPipelineCreateInfo& value)
+{
+       s << "VkGraphicsPipelineCreateInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tflags = " << getPipelineCreateFlagsStr(value.flags) << '\n';
+       s << "\tstageCount = " << value.stageCount << '\n';
+       s << "\tpStages = " << value.pStages << '\n';
+       s << "\tpVertexInputState = " << value.pVertexInputState << '\n';
+       s << "\tpInputAssemblyState = " << value.pInputAssemblyState << '\n';
+       s << "\tpTessellationState = " << value.pTessellationState << '\n';
+       s << "\tpViewportState = " << value.pViewportState << '\n';
+       s << "\tpRasterizationState = " << value.pRasterizationState << '\n';
+       s << "\tpMultisampleState = " << value.pMultisampleState << '\n';
+       s << "\tpDepthStencilState = " << value.pDepthStencilState << '\n';
+       s << "\tpColorBlendState = " << value.pColorBlendState << '\n';
+       s << "\tpDynamicState = " << value.pDynamicState << '\n';
+       s << "\tlayout = " << value.layout << '\n';
+       s << "\trenderPass = " << value.renderPass << '\n';
+       s << "\tsubpass = " << value.subpass << '\n';
+       s << "\tbasePipelineHandle = " << value.basePipelineHandle << '\n';
+       s << "\tbasePipelineIndex = " << value.basePipelineIndex << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPushConstantRange& value)
+{
+       s << "VkPushConstantRange = {\n";
+       s << "\tstageFlags = " << getShaderStageFlagsStr(value.stageFlags) << '\n';
+       s << "\toffset = " << value.offset << '\n';
+       s << "\tsize = " << value.size << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPipelineLayoutCreateInfo& value)
+{
+       s << "VkPipelineLayoutCreateInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tflags = " << getPipelineLayoutCreateFlagsStr(value.flags) << '\n';
+       s << "\tsetLayoutCount = " << value.setLayoutCount << '\n';
+       s << "\tpSetLayouts = " << value.pSetLayouts << '\n';
+       s << "\tpushConstantRangeCount = " << value.pushConstantRangeCount << '\n';
+       s << "\tpPushConstantRanges = " << value.pPushConstantRanges << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkSamplerCreateInfo& value)
+{
+       s << "VkSamplerCreateInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tflags = " << getSamplerCreateFlagsStr(value.flags) << '\n';
+       s << "\tmagFilter = " << value.magFilter << '\n';
+       s << "\tminFilter = " << value.minFilter << '\n';
+       s << "\tmipmapMode = " << value.mipmapMode << '\n';
+       s << "\taddressModeU = " << value.addressModeU << '\n';
+       s << "\taddressModeV = " << value.addressModeV << '\n';
+       s << "\taddressModeW = " << value.addressModeW << '\n';
+       s << "\tmipLodBias = " << value.mipLodBias << '\n';
+       s << "\tanisotropyEnable = " << value.anisotropyEnable << '\n';
+       s << "\tmaxAnisotropy = " << value.maxAnisotropy << '\n';
+       s << "\tcompareEnable = " << value.compareEnable << '\n';
+       s << "\tcompareOp = " << value.compareOp << '\n';
+       s << "\tminLod = " << value.minLod << '\n';
+       s << "\tmaxLod = " << value.maxLod << '\n';
+       s << "\tborderColor = " << value.borderColor << '\n';
+       s << "\tunnormalizedCoordinates = " << value.unnormalizedCoordinates << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkCopyDescriptorSet& value)
+{
+       s << "VkCopyDescriptorSet = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tsrcSet = " << value.srcSet << '\n';
+       s << "\tsrcBinding = " << value.srcBinding << '\n';
+       s << "\tsrcArrayElement = " << value.srcArrayElement << '\n';
+       s << "\tdstSet = " << value.dstSet << '\n';
+       s << "\tdstBinding = " << value.dstBinding << '\n';
+       s << "\tdstArrayElement = " << value.dstArrayElement << '\n';
+       s << "\tdescriptorCount = " << value.descriptorCount << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkDescriptorBufferInfo& value)
+{
+       s << "VkDescriptorBufferInfo = {\n";
+       s << "\tbuffer = " << value.buffer << '\n';
+       s << "\toffset = " << value.offset << '\n';
+       s << "\trange = " << value.range << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkDescriptorImageInfo& value)
+{
+       s << "VkDescriptorImageInfo = {\n";
+       s << "\tsampler = " << value.sampler << '\n';
+       s << "\timageView = " << value.imageView << '\n';
+       s << "\timageLayout = " << value.imageLayout << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkDescriptorPoolSize& value)
+{
+       s << "VkDescriptorPoolSize = {\n";
+       s << "\ttype = " << value.type << '\n';
+       s << "\tdescriptorCount = " << value.descriptorCount << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkDescriptorPoolCreateInfo& value)
+{
+       s << "VkDescriptorPoolCreateInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tflags = " << getDescriptorPoolCreateFlagsStr(value.flags) << '\n';
+       s << "\tmaxSets = " << value.maxSets << '\n';
+       s << "\tpoolSizeCount = " << value.poolSizeCount << '\n';
+       s << "\tpPoolSizes = " << value.pPoolSizes << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkDescriptorSetAllocateInfo& value)
+{
+       s << "VkDescriptorSetAllocateInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tdescriptorPool = " << value.descriptorPool << '\n';
+       s << "\tdescriptorSetCount = " << value.descriptorSetCount << '\n';
+       s << "\tpSetLayouts = " << value.pSetLayouts << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkDescriptorSetLayoutBinding& value)
+{
+       s << "VkDescriptorSetLayoutBinding = {\n";
+       s << "\tbinding = " << value.binding << '\n';
+       s << "\tdescriptorType = " << value.descriptorType << '\n';
+       s << "\tdescriptorCount = " << value.descriptorCount << '\n';
+       s << "\tstageFlags = " << getShaderStageFlagsStr(value.stageFlags) << '\n';
+       s << "\tpImmutableSamplers = " << value.pImmutableSamplers << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkDescriptorSetLayoutCreateInfo& value)
+{
+       s << "VkDescriptorSetLayoutCreateInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tflags = " << getDescriptorSetLayoutCreateFlagsStr(value.flags) << '\n';
+       s << "\tbindingCount = " << value.bindingCount << '\n';
+       s << "\tpBindings = " << value.pBindings << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkWriteDescriptorSet& value)
+{
+       s << "VkWriteDescriptorSet = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tdstSet = " << value.dstSet << '\n';
+       s << "\tdstBinding = " << value.dstBinding << '\n';
+       s << "\tdstArrayElement = " << value.dstArrayElement << '\n';
+       s << "\tdescriptorCount = " << value.descriptorCount << '\n';
+       s << "\tdescriptorType = " << value.descriptorType << '\n';
+       s << "\tpImageInfo = " << value.pImageInfo << '\n';
+       s << "\tpBufferInfo = " << value.pBufferInfo << '\n';
+       s << "\tpTexelBufferView = " << value.pTexelBufferView << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkAttachmentDescription& value)
+{
+       s << "VkAttachmentDescription = {\n";
+       s << "\tflags = " << getAttachmentDescriptionFlagsStr(value.flags) << '\n';
+       s << "\tformat = " << value.format << '\n';
+       s << "\tsamples = " << value.samples << '\n';
+       s << "\tloadOp = " << value.loadOp << '\n';
+       s << "\tstoreOp = " << value.storeOp << '\n';
+       s << "\tstencilLoadOp = " << value.stencilLoadOp << '\n';
+       s << "\tstencilStoreOp = " << value.stencilStoreOp << '\n';
+       s << "\tinitialLayout = " << value.initialLayout << '\n';
+       s << "\tfinalLayout = " << value.finalLayout << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkAttachmentReference& value)
+{
+       s << "VkAttachmentReference = {\n";
+       s << "\tattachment = " << value.attachment << '\n';
+       s << "\tlayout = " << value.layout << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkFramebufferCreateInfo& value)
+{
+       s << "VkFramebufferCreateInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tflags = " << getFramebufferCreateFlagsStr(value.flags) << '\n';
+       s << "\trenderPass = " << value.renderPass << '\n';
+       s << "\tattachmentCount = " << value.attachmentCount << '\n';
+       s << "\tpAttachments = " << value.pAttachments << '\n';
+       s << "\twidth = " << value.width << '\n';
+       s << "\theight = " << value.height << '\n';
+       s << "\tlayers = " << value.layers << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkSubpassDescription& value)
+{
+       s << "VkSubpassDescription = {\n";
+       s << "\tflags = " << getSubpassDescriptionFlagsStr(value.flags) << '\n';
+       s << "\tpipelineBindPoint = " << value.pipelineBindPoint << '\n';
+       s << "\tinputAttachmentCount = " << value.inputAttachmentCount << '\n';
+       s << "\tpInputAttachments = " << value.pInputAttachments << '\n';
+       s << "\tcolorAttachmentCount = " << value.colorAttachmentCount << '\n';
+       s << "\tpColorAttachments = " << value.pColorAttachments << '\n';
+       s << "\tpResolveAttachments = " << value.pResolveAttachments << '\n';
+       s << "\tpDepthStencilAttachment = " << value.pDepthStencilAttachment << '\n';
+       s << "\tpreserveAttachmentCount = " << value.preserveAttachmentCount << '\n';
+       s << "\tpPreserveAttachments = " << value.pPreserveAttachments << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkSubpassDependency& value)
+{
+       s << "VkSubpassDependency = {\n";
+       s << "\tsrcSubpass = " << value.srcSubpass << '\n';
+       s << "\tdstSubpass = " << value.dstSubpass << '\n';
+       s << "\tsrcStageMask = " << getPipelineStageFlagsStr(value.srcStageMask) << '\n';
+       s << "\tdstStageMask = " << getPipelineStageFlagsStr(value.dstStageMask) << '\n';
+       s << "\tsrcAccessMask = " << getAccessFlagsStr(value.srcAccessMask) << '\n';
+       s << "\tdstAccessMask = " << getAccessFlagsStr(value.dstAccessMask) << '\n';
+       s << "\tdependencyFlags = " << getDependencyFlagsStr(value.dependencyFlags) << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkRenderPassCreateInfo& value)
+{
+       s << "VkRenderPassCreateInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tflags = " << getRenderPassCreateFlagsStr(value.flags) << '\n';
+       s << "\tattachmentCount = " << value.attachmentCount << '\n';
+       s << "\tpAttachments = " << value.pAttachments << '\n';
+       s << "\tsubpassCount = " << value.subpassCount << '\n';
+       s << "\tpSubpasses = " << value.pSubpasses << '\n';
+       s << "\tdependencyCount = " << value.dependencyCount << '\n';
+       s << "\tpDependencies = " << value.pDependencies << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkCommandPoolCreateInfo& value)
+{
+       s << "VkCommandPoolCreateInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tflags = " << getCommandPoolCreateFlagsStr(value.flags) << '\n';
+       s << "\tqueueFamilyIndex = " << value.queueFamilyIndex << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkCommandBufferAllocateInfo& value)
+{
+       s << "VkCommandBufferAllocateInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tcommandPool = " << value.commandPool << '\n';
+       s << "\tlevel = " << value.level << '\n';
+       s << "\tcommandBufferCount = " << value.commandBufferCount << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkCommandBufferInheritanceInfo& value)
+{
+       s << "VkCommandBufferInheritanceInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\trenderPass = " << value.renderPass << '\n';
+       s << "\tsubpass = " << value.subpass << '\n';
+       s << "\tframebuffer = " << value.framebuffer << '\n';
+       s << "\tocclusionQueryEnable = " << value.occlusionQueryEnable << '\n';
+       s << "\tqueryFlags = " << getQueryControlFlagsStr(value.queryFlags) << '\n';
+       s << "\tpipelineStatistics = " << getQueryPipelineStatisticFlagsStr(value.pipelineStatistics) << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkCommandBufferBeginInfo& value)
+{
+       s << "VkCommandBufferBeginInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tflags = " << getCommandBufferUsageFlagsStr(value.flags) << '\n';
+       s << "\tpInheritanceInfo = " << value.pInheritanceInfo << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkBufferCopy& value)
+{
+       s << "VkBufferCopy = {\n";
+       s << "\tsrcOffset = " << value.srcOffset << '\n';
+       s << "\tdstOffset = " << value.dstOffset << '\n';
+       s << "\tsize = " << value.size << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkImageSubresourceLayers& value)
+{
+       s << "VkImageSubresourceLayers = {\n";
+       s << "\taspectMask = " << getImageAspectFlagsStr(value.aspectMask) << '\n';
+       s << "\tmipLevel = " << value.mipLevel << '\n';
+       s << "\tbaseArrayLayer = " << value.baseArrayLayer << '\n';
+       s << "\tlayerCount = " << value.layerCount << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkBufferImageCopy& value)
+{
+       s << "VkBufferImageCopy = {\n";
+       s << "\tbufferOffset = " << value.bufferOffset << '\n';
+       s << "\tbufferRowLength = " << value.bufferRowLength << '\n';
+       s << "\tbufferImageHeight = " << value.bufferImageHeight << '\n';
+       s << "\timageSubresource = " << value.imageSubresource << '\n';
+       s << "\timageOffset = " << value.imageOffset << '\n';
+       s << "\timageExtent = " << value.imageExtent << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkClearColorValue& value)
+{
+       s << "VkClearColorValue = {\n";
+       s << "\tfloat32 = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.float32), DE_ARRAY_END(value.float32)) << '\n';
+       s << "\tint32 = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.int32), DE_ARRAY_END(value.int32)) << '\n';
+       s << "\tuint32 = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.uint32), DE_ARRAY_END(value.uint32)) << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkClearDepthStencilValue& value)
+{
+       s << "VkClearDepthStencilValue = {\n";
+       s << "\tdepth = " << value.depth << '\n';
+       s << "\tstencil = " << value.stencil << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkClearValue& value)
+{
+       s << "VkClearValue = {\n";
+       s << "\tcolor = " << value.color << '\n';
+       s << "\tdepthStencil = " << value.depthStencil << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkClearAttachment& value)
+{
+       s << "VkClearAttachment = {\n";
+       s << "\taspectMask = " << getImageAspectFlagsStr(value.aspectMask) << '\n';
+       s << "\tcolorAttachment = " << value.colorAttachment << '\n';
+       s << "\tclearValue = " << value.clearValue << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkClearRect& value)
+{
+       s << "VkClearRect = {\n";
+       s << "\trect = " << value.rect << '\n';
+       s << "\tbaseArrayLayer = " << value.baseArrayLayer << '\n';
+       s << "\tlayerCount = " << value.layerCount << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkImageBlit& value)
+{
+       s << "VkImageBlit = {\n";
+       s << "\tsrcSubresource = " << value.srcSubresource << '\n';
+       s << "\tsrcOffsets = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.srcOffsets), DE_ARRAY_END(value.srcOffsets)) << '\n';
+       s << "\tdstSubresource = " << value.dstSubresource << '\n';
+       s << "\tdstOffsets = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.dstOffsets), DE_ARRAY_END(value.dstOffsets)) << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkImageCopy& value)
+{
+       s << "VkImageCopy = {\n";
+       s << "\tsrcSubresource = " << value.srcSubresource << '\n';
+       s << "\tsrcOffset = " << value.srcOffset << '\n';
+       s << "\tdstSubresource = " << value.dstSubresource << '\n';
+       s << "\tdstOffset = " << value.dstOffset << '\n';
+       s << "\textent = " << value.extent << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkImageResolve& value)
+{
+       s << "VkImageResolve = {\n";
+       s << "\tsrcSubresource = " << value.srcSubresource << '\n';
+       s << "\tsrcOffset = " << value.srcOffset << '\n';
+       s << "\tdstSubresource = " << value.dstSubresource << '\n';
+       s << "\tdstOffset = " << value.dstOffset << '\n';
+       s << "\textent = " << value.extent << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkRenderPassBeginInfo& value)
+{
+       s << "VkRenderPassBeginInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\trenderPass = " << value.renderPass << '\n';
+       s << "\tframebuffer = " << value.framebuffer << '\n';
+       s << "\trenderArea = " << value.renderArea << '\n';
+       s << "\tclearValueCount = " << value.clearValueCount << '\n';
+       s << "\tpClearValues = " << value.pClearValues << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceVulkanSC10Features& value)
+{
+       s << "VkPhysicalDeviceVulkanSC10Features = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tpipelineIdentifier = " << value.pipelineIdentifier << '\n';
+       s << "\tshaderAtomicInstructions = " << value.shaderAtomicInstructions << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceVulkanSC10Properties& value)
+{
+       s << "VkPhysicalDeviceVulkanSC10Properties = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tdeviceDestroyFreesMemory = " << value.deviceDestroyFreesMemory << '\n';
+       s << "\tcommandPoolMultipleCommandBuffersRecording = " << value.commandPoolMultipleCommandBuffersRecording << '\n';
+       s << "\tcommandPoolResetCommandBuffer = " << value.commandPoolResetCommandBuffer << '\n';
+       s << "\tdescriptorPoolFreeDescriptorSets = " << value.descriptorPoolFreeDescriptorSets << '\n';
+       s << "\texternalSubpassDependencies = " << value.externalSubpassDependencies << '\n';
+       s << "\trecyclePipelineMemory = " << value.recyclePipelineMemory << '\n';
+       s << "\tmaxSubpasses = " << value.maxSubpasses << '\n';
+       s << "\tmaxInputAttachments = " << value.maxInputAttachments << '\n';
+       s << "\tmaxPreserveAttachments = " << value.maxPreserveAttachments << '\n';
+       s << "\tmaxFramebufferAttachments = " << value.maxFramebufferAttachments << '\n';
+       s << "\tmaxQueryFaultCount = " << value.maxQueryFaultCount << '\n';
+       s << "\tmaxCallbackFaultCount = " << value.maxCallbackFaultCount << '\n';
+       s << "\tcommandBufferSimultaneousUse = " << value.commandBufferSimultaneousUse << '\n';
+       s << "\tsecondaryCommandBufferNullFramebuffer = " << value.secondaryCommandBufferNullFramebuffer << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPipelinePoolSize& value)
+{
+       s << "VkPipelinePoolSize = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tpoolEntrySize = " << value.poolEntrySize << '\n';
+       s << "\tpoolEntryCount = " << value.poolEntryCount << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkDeviceMemoryReservationCreateInfo& value)
+{
+       s << "VkDeviceMemoryReservationCreateInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tpipelineCacheCreateInfoCount = " << value.pipelineCacheCreateInfoCount << '\n';
+       s << "\tpPipelineCacheCreateInfos = " << value.pPipelineCacheCreateInfos << '\n';
+       s << "\tpipelinePoolSizeCount = " << value.pipelinePoolSizeCount << '\n';
+       s << "\tpPipelinePoolSizes = " << value.pPipelinePoolSizes << '\n';
+       s << "\tdescriptorSetLayoutBindingCount = " << value.descriptorSetLayoutBindingCount << '\n';
+       s << "\timageViewMaxMipLevels = " << value.imageViewMaxMipLevels << '\n';
+       s << "\timageViewMaxArrayLayers = " << value.imageViewMaxArrayLayers << '\n';
+       s << "\tlayeredImageViewMaxMipLevels = " << value.layeredImageViewMaxMipLevels << '\n';
+       s << "\tsemaphoreRequestCount = " << value.semaphoreRequestCount << '\n';
+       s << "\tcommandBufferRequestCount = " << value.commandBufferRequestCount << '\n';
+       s << "\tfenceRequestCount = " << value.fenceRequestCount << '\n';
+       s << "\tdeviceMemoryRequestCount = " << value.deviceMemoryRequestCount << '\n';
+       s << "\tbufferRequestCount = " << value.bufferRequestCount << '\n';
+       s << "\timageRequestCount = " << value.imageRequestCount << '\n';
+       s << "\teventRequestCount = " << value.eventRequestCount << '\n';
+       s << "\tqueryPoolRequestCount = " << value.queryPoolRequestCount << '\n';
+       s << "\tbufferViewRequestCount = " << value.bufferViewRequestCount << '\n';
+       s << "\timageViewRequestCount = " << value.imageViewRequestCount << '\n';
+       s << "\tlayeredImageViewRequestCount = " << value.layeredImageViewRequestCount << '\n';
+       s << "\tpipelineLayoutRequestCount = " << value.pipelineLayoutRequestCount << '\n';
+       s << "\trenderPassRequestCount = " << value.renderPassRequestCount << '\n';
+       s << "\tgraphicsPipelineRequestCount = " << value.graphicsPipelineRequestCount << '\n';
+       s << "\tcomputePipelineRequestCount = " << value.computePipelineRequestCount << '\n';
+       s << "\tdescriptorSetLayoutRequestCount = " << value.descriptorSetLayoutRequestCount << '\n';
+       s << "\tsamplerRequestCount = " << value.samplerRequestCount << '\n';
+       s << "\tdescriptorPoolRequestCount = " << value.descriptorPoolRequestCount << '\n';
+       s << "\tdescriptorSetRequestCount = " << value.descriptorSetRequestCount << '\n';
+       s << "\tframebufferRequestCount = " << value.framebufferRequestCount << '\n';
+       s << "\tcommandPoolRequestCount = " << value.commandPoolRequestCount << '\n';
+       s << "\tsamplerYcbcrConversionRequestCount = " << value.samplerYcbcrConversionRequestCount << '\n';
+       s << "\tsurfaceRequestCount = " << value.surfaceRequestCount << '\n';
+       s << "\tswapchainRequestCount = " << value.swapchainRequestCount << '\n';
+       s << "\tdisplayModeRequestCount = " << value.displayModeRequestCount << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkCommandPoolMemoryReservationCreateInfo& value)
+{
+       s << "VkCommandPoolMemoryReservationCreateInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tcommandPoolReservedSize = " << value.commandPoolReservedSize << '\n';
+       s << "\tcommandPoolMaxCommandBuffers = " << value.commandPoolMaxCommandBuffers << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkCommandPoolMemoryConsumption& value)
+{
+       s << "VkCommandPoolMemoryConsumption = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tcommandPoolAllocated = " << value.commandPoolAllocated << '\n';
+       s << "\tcommandPoolReservedSize = " << value.commandPoolReservedSize << '\n';
+       s << "\tcommandBufferAllocated = " << value.commandBufferAllocated << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPipelinePoolEntrySizeCreateInfo& value)
+{
+       s << "VkPipelinePoolEntrySizeCreateInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tpoolEntrySize = " << value.poolEntrySize << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkFaultData& value)
+{
+       s << "VkFaultData = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tfaultLevel = " << value.faultLevel << '\n';
+       s << "\tfaultType = " << value.faultType << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkFaultCallbackInfo& value)
+{
+       s << "VkFaultCallbackInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tpFaults = " << value.pFaults << '\n';
+       s << "\tpfnFaultCallback = " << value.pfnFaultCallback << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceFaultHandlingProperties& value)
+{
+       s << "VkPhysicalDeviceFaultHandlingProperties = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tmaxQueryFaultCount = " << value.maxQueryFaultCount << '\n';
+       s << "\tmaxCallbackFaultCount = " << value.maxCallbackFaultCount << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDevicePipelineIdentifierFeatures& value)
+{
+       s << "VkPhysicalDevicePipelineIdentifierFeatures = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tpipelineIdentifier = " << value.pipelineIdentifier << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPipelineIdentifierInfo& value)
+{
+       s << "VkPipelineIdentifierInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tpipelineIdentifier = " << '\n' << tcu::formatArray(tcu::Format::HexIterator<deUint8>(DE_ARRAY_BEGIN(value.pipelineIdentifier)), tcu::Format::HexIterator<deUint8>(DE_ARRAY_END(value.pipelineIdentifier))) << '\n';
+       s << "\tmatchControl = " << value.matchControl << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceSubgroupProperties& value)
+{
+       s << "VkPhysicalDeviceSubgroupProperties = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tsubgroupSize = " << value.subgroupSize << '\n';
+       s << "\tsupportedStages = " << getShaderStageFlagsStr(value.supportedStages) << '\n';
+       s << "\tsupportedOperations = " << getSubgroupFeatureFlagsStr(value.supportedOperations) << '\n';
+       s << "\tquadOperationsInAllStages = " << value.quadOperationsInAllStages << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkBindBufferMemoryInfo& value)
+{
+       s << "VkBindBufferMemoryInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tbuffer = " << value.buffer << '\n';
+       s << "\tmemory = " << value.memory << '\n';
+       s << "\tmemoryOffset = " << value.memoryOffset << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkBindImageMemoryInfo& value)
+{
+       s << "VkBindImageMemoryInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\timage = " << value.image << '\n';
+       s << "\tmemory = " << value.memory << '\n';
+       s << "\tmemoryOffset = " << value.memoryOffset << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDevice16BitStorageFeatures& value)
+{
+       s << "VkPhysicalDevice16BitStorageFeatures = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tstorageBuffer16BitAccess = " << value.storageBuffer16BitAccess << '\n';
+       s << "\tuniformAndStorageBuffer16BitAccess = " << value.uniformAndStorageBuffer16BitAccess << '\n';
+       s << "\tstoragePushConstant16 = " << value.storagePushConstant16 << '\n';
+       s << "\tstorageInputOutput16 = " << value.storageInputOutput16 << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkMemoryDedicatedRequirements& value)
+{
+       s << "VkMemoryDedicatedRequirements = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tprefersDedicatedAllocation = " << value.prefersDedicatedAllocation << '\n';
+       s << "\trequiresDedicatedAllocation = " << value.requiresDedicatedAllocation << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkMemoryDedicatedAllocateInfo& value)
+{
+       s << "VkMemoryDedicatedAllocateInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\timage = " << value.image << '\n';
+       s << "\tbuffer = " << value.buffer << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkMemoryAllocateFlagsInfo& value)
+{
+       s << "VkMemoryAllocateFlagsInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tflags = " << getMemoryAllocateFlagsStr(value.flags) << '\n';
+       s << "\tdeviceMask = " << value.deviceMask << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkDeviceGroupRenderPassBeginInfo& value)
+{
+       s << "VkDeviceGroupRenderPassBeginInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tdeviceMask = " << value.deviceMask << '\n';
+       s << "\tdeviceRenderAreaCount = " << value.deviceRenderAreaCount << '\n';
+       s << "\tpDeviceRenderAreas = " << value.pDeviceRenderAreas << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkDeviceGroupCommandBufferBeginInfo& value)
+{
+       s << "VkDeviceGroupCommandBufferBeginInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tdeviceMask = " << value.deviceMask << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkDeviceGroupSubmitInfo& value)
+{
+       s << "VkDeviceGroupSubmitInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\twaitSemaphoreCount = " << value.waitSemaphoreCount << '\n';
+       s << "\tpWaitSemaphoreDeviceIndices = " << value.pWaitSemaphoreDeviceIndices << '\n';
+       s << "\tcommandBufferCount = " << value.commandBufferCount << '\n';
+       s << "\tpCommandBufferDeviceMasks = " << value.pCommandBufferDeviceMasks << '\n';
+       s << "\tsignalSemaphoreCount = " << value.signalSemaphoreCount << '\n';
+       s << "\tpSignalSemaphoreDeviceIndices = " << value.pSignalSemaphoreDeviceIndices << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkDeviceGroupBindSparseInfo& value)
+{
+       s << "VkDeviceGroupBindSparseInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tresourceDeviceIndex = " << value.resourceDeviceIndex << '\n';
+       s << "\tmemoryDeviceIndex = " << value.memoryDeviceIndex << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkBindBufferMemoryDeviceGroupInfo& value)
+{
+       s << "VkBindBufferMemoryDeviceGroupInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tdeviceIndexCount = " << value.deviceIndexCount << '\n';
+       s << "\tpDeviceIndices = " << value.pDeviceIndices << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkBindImageMemoryDeviceGroupInfo& value)
+{
+       s << "VkBindImageMemoryDeviceGroupInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tdeviceIndexCount = " << value.deviceIndexCount << '\n';
+       s << "\tpDeviceIndices = " << value.pDeviceIndices << '\n';
+       s << "\tsplitInstanceBindRegionCount = " << value.splitInstanceBindRegionCount << '\n';
+       s << "\tpSplitInstanceBindRegions = " << value.pSplitInstanceBindRegions << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceGroupProperties& value)
+{
+       s << "VkPhysicalDeviceGroupProperties = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tphysicalDeviceCount = " << value.physicalDeviceCount << '\n';
+       s << "\tphysicalDevices = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.physicalDevices), DE_ARRAY_END(value.physicalDevices)) << '\n';
+       s << "\tsubsetAllocation = " << value.subsetAllocation << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkDeviceGroupDeviceCreateInfo& value)
+{
+       s << "VkDeviceGroupDeviceCreateInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tphysicalDeviceCount = " << value.physicalDeviceCount << '\n';
+       s << "\tpPhysicalDevices = " << value.pPhysicalDevices << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkBufferMemoryRequirementsInfo2& value)
+{
+       s << "VkBufferMemoryRequirementsInfo2 = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tbuffer = " << value.buffer << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkImageMemoryRequirementsInfo2& value)
+{
+       s << "VkImageMemoryRequirementsInfo2 = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\timage = " << value.image << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkImageSparseMemoryRequirementsInfo2& value)
+{
+       s << "VkImageSparseMemoryRequirementsInfo2 = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\timage = " << value.image << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkMemoryRequirements2& value)
+{
+       s << "VkMemoryRequirements2 = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tmemoryRequirements = " << value.memoryRequirements << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkSparseImageMemoryRequirements2& value)
+{
+       s << "VkSparseImageMemoryRequirements2 = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tmemoryRequirements = " << value.memoryRequirements << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceFeatures2& value)
+{
+       s << "VkPhysicalDeviceFeatures2 = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tfeatures = " << value.features << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceProperties2& value)
+{
+       s << "VkPhysicalDeviceProperties2 = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tproperties = " << value.properties << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkFormatProperties2& value)
+{
+       s << "VkFormatProperties2 = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tformatProperties = " << value.formatProperties << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkImageFormatProperties2& value)
+{
+       s << "VkImageFormatProperties2 = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\timageFormatProperties = " << value.imageFormatProperties << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceImageFormatInfo2& value)
+{
+       s << "VkPhysicalDeviceImageFormatInfo2 = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tformat = " << value.format << '\n';
+       s << "\ttype = " << value.type << '\n';
+       s << "\ttiling = " << value.tiling << '\n';
+       s << "\tusage = " << getImageUsageFlagsStr(value.usage) << '\n';
+       s << "\tflags = " << getImageCreateFlagsStr(value.flags) << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkQueueFamilyProperties2& value)
+{
+       s << "VkQueueFamilyProperties2 = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tqueueFamilyProperties = " << value.queueFamilyProperties << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceMemoryProperties2& value)
+{
+       s << "VkPhysicalDeviceMemoryProperties2 = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tmemoryProperties = " << value.memoryProperties << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkSparseImageFormatProperties2& value)
+{
+       s << "VkSparseImageFormatProperties2 = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tproperties = " << value.properties << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceSparseImageFormatInfo2& value)
+{
+       s << "VkPhysicalDeviceSparseImageFormatInfo2 = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tformat = " << value.format << '\n';
+       s << "\ttype = " << value.type << '\n';
+       s << "\tsamples = " << value.samples << '\n';
+       s << "\tusage = " << getImageUsageFlagsStr(value.usage) << '\n';
+       s << "\ttiling = " << value.tiling << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDevicePointClippingProperties& value)
+{
+       s << "VkPhysicalDevicePointClippingProperties = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tpointClippingBehavior = " << value.pointClippingBehavior << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkInputAttachmentAspectReference& value)
+{
+       s << "VkInputAttachmentAspectReference = {\n";
+       s << "\tsubpass = " << value.subpass << '\n';
+       s << "\tinputAttachmentIndex = " << value.inputAttachmentIndex << '\n';
+       s << "\taspectMask = " << getImageAspectFlagsStr(value.aspectMask) << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkRenderPassInputAttachmentAspectCreateInfo& value)
+{
+       s << "VkRenderPassInputAttachmentAspectCreateInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\taspectReferenceCount = " << value.aspectReferenceCount << '\n';
+       s << "\tpAspectReferences = " << value.pAspectReferences << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkImageViewUsageCreateInfo& value)
+{
+       s << "VkImageViewUsageCreateInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tusage = " << getImageUsageFlagsStr(value.usage) << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPipelineTessellationDomainOriginStateCreateInfo& value)
+{
+       s << "VkPipelineTessellationDomainOriginStateCreateInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tdomainOrigin = " << value.domainOrigin << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkRenderPassMultiviewCreateInfo& value)
+{
+       s << "VkRenderPassMultiviewCreateInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tsubpassCount = " << value.subpassCount << '\n';
+       s << "\tpViewMasks = " << value.pViewMasks << '\n';
+       s << "\tdependencyCount = " << value.dependencyCount << '\n';
+       s << "\tpViewOffsets = " << value.pViewOffsets << '\n';
+       s << "\tcorrelationMaskCount = " << value.correlationMaskCount << '\n';
+       s << "\tpCorrelationMasks = " << value.pCorrelationMasks << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceMultiviewFeatures& value)
+{
+       s << "VkPhysicalDeviceMultiviewFeatures = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tmultiview = " << value.multiview << '\n';
+       s << "\tmultiviewGeometryShader = " << value.multiviewGeometryShader << '\n';
+       s << "\tmultiviewTessellationShader = " << value.multiviewTessellationShader << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceMultiviewProperties& value)
+{
+       s << "VkPhysicalDeviceMultiviewProperties = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tmaxMultiviewViewCount = " << value.maxMultiviewViewCount << '\n';
+       s << "\tmaxMultiviewInstanceIndex = " << value.maxMultiviewInstanceIndex << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceVariablePointersFeatures& value)
+{
+       s << "VkPhysicalDeviceVariablePointersFeatures = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tvariablePointersStorageBuffer = " << value.variablePointersStorageBuffer << '\n';
+       s << "\tvariablePointers = " << value.variablePointers << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceProtectedMemoryFeatures& value)
+{
+       s << "VkPhysicalDeviceProtectedMemoryFeatures = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tprotectedMemory = " << value.protectedMemory << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceProtectedMemoryProperties& value)
+{
+       s << "VkPhysicalDeviceProtectedMemoryProperties = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tprotectedNoFault = " << value.protectedNoFault << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkDeviceQueueInfo2& value)
+{
+       s << "VkDeviceQueueInfo2 = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tflags = " << getDeviceQueueCreateFlagsStr(value.flags) << '\n';
+       s << "\tqueueFamilyIndex = " << value.queueFamilyIndex << '\n';
+       s << "\tqueueIndex = " << value.queueIndex << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkProtectedSubmitInfo& value)
+{
+       s << "VkProtectedSubmitInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tprotectedSubmit = " << value.protectedSubmit << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkSamplerYcbcrConversionCreateInfo& value)
+{
+       s << "VkSamplerYcbcrConversionCreateInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tformat = " << value.format << '\n';
+       s << "\tycbcrModel = " << value.ycbcrModel << '\n';
+       s << "\tycbcrRange = " << value.ycbcrRange << '\n';
+       s << "\tcomponents = " << value.components << '\n';
+       s << "\txChromaOffset = " << value.xChromaOffset << '\n';
+       s << "\tyChromaOffset = " << value.yChromaOffset << '\n';
+       s << "\tchromaFilter = " << value.chromaFilter << '\n';
+       s << "\tforceExplicitReconstruction = " << value.forceExplicitReconstruction << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkSamplerYcbcrConversionInfo& value)
+{
+       s << "VkSamplerYcbcrConversionInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tconversion = " << value.conversion << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkBindImagePlaneMemoryInfo& value)
+{
+       s << "VkBindImagePlaneMemoryInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tplaneAspect = " << value.planeAspect << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkImagePlaneMemoryRequirementsInfo& value)
+{
+       s << "VkImagePlaneMemoryRequirementsInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tplaneAspect = " << value.planeAspect << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceSamplerYcbcrConversionFeatures& value)
+{
+       s << "VkPhysicalDeviceSamplerYcbcrConversionFeatures = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tsamplerYcbcrConversion = " << value.samplerYcbcrConversion << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkSamplerYcbcrConversionImageFormatProperties& value)
+{
+       s << "VkSamplerYcbcrConversionImageFormatProperties = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tcombinedImageSamplerDescriptorCount = " << value.combinedImageSamplerDescriptorCount << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkExternalMemoryProperties& value)
+{
+       s << "VkExternalMemoryProperties = {\n";
+       s << "\texternalMemoryFeatures = " << getExternalMemoryFeatureFlagsStr(value.externalMemoryFeatures) << '\n';
+       s << "\texportFromImportedHandleTypes = " << getExternalMemoryHandleTypeFlagsStr(value.exportFromImportedHandleTypes) << '\n';
+       s << "\tcompatibleHandleTypes = " << getExternalMemoryHandleTypeFlagsStr(value.compatibleHandleTypes) << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceExternalImageFormatInfo& value)
+{
+       s << "VkPhysicalDeviceExternalImageFormatInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\thandleType = " << value.handleType << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkExternalImageFormatProperties& value)
+{
+       s << "VkExternalImageFormatProperties = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\texternalMemoryProperties = " << value.externalMemoryProperties << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceExternalBufferInfo& value)
+{
+       s << "VkPhysicalDeviceExternalBufferInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tflags = " << getBufferCreateFlagsStr(value.flags) << '\n';
+       s << "\tusage = " << getBufferUsageFlagsStr(value.usage) << '\n';
+       s << "\thandleType = " << value.handleType << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkExternalBufferProperties& value)
+{
+       s << "VkExternalBufferProperties = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\texternalMemoryProperties = " << value.externalMemoryProperties << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceIDProperties& value)
+{
+       s << "VkPhysicalDeviceIDProperties = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tdeviceUUID = " << '\n' << tcu::formatArray(tcu::Format::HexIterator<deUint8>(DE_ARRAY_BEGIN(value.deviceUUID)), tcu::Format::HexIterator<deUint8>(DE_ARRAY_END(value.deviceUUID))) << '\n';
+       s << "\tdriverUUID = " << '\n' << tcu::formatArray(tcu::Format::HexIterator<deUint8>(DE_ARRAY_BEGIN(value.driverUUID)), tcu::Format::HexIterator<deUint8>(DE_ARRAY_END(value.driverUUID))) << '\n';
+       s << "\tdeviceLUID = " << '\n' << tcu::formatArray(tcu::Format::HexIterator<deUint8>(DE_ARRAY_BEGIN(value.deviceLUID)), tcu::Format::HexIterator<deUint8>(DE_ARRAY_END(value.deviceLUID))) << '\n';
+       s << "\tdeviceNodeMask = " << value.deviceNodeMask << '\n';
+       s << "\tdeviceLUIDValid = " << value.deviceLUIDValid << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkExternalMemoryImageCreateInfo& value)
+{
+       s << "VkExternalMemoryImageCreateInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\thandleTypes = " << getExternalMemoryHandleTypeFlagsStr(value.handleTypes) << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkExternalMemoryBufferCreateInfo& value)
+{
+       s << "VkExternalMemoryBufferCreateInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\thandleTypes = " << getExternalMemoryHandleTypeFlagsStr(value.handleTypes) << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkExportMemoryAllocateInfo& value)
+{
+       s << "VkExportMemoryAllocateInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\thandleTypes = " << getExternalMemoryHandleTypeFlagsStr(value.handleTypes) << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceExternalFenceInfo& value)
+{
+       s << "VkPhysicalDeviceExternalFenceInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\thandleType = " << value.handleType << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkExternalFenceProperties& value)
+{
+       s << "VkExternalFenceProperties = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\texportFromImportedHandleTypes = " << getExternalFenceHandleTypeFlagsStr(value.exportFromImportedHandleTypes) << '\n';
+       s << "\tcompatibleHandleTypes = " << getExternalFenceHandleTypeFlagsStr(value.compatibleHandleTypes) << '\n';
+       s << "\texternalFenceFeatures = " << getExternalFenceFeatureFlagsStr(value.externalFenceFeatures) << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkExportFenceCreateInfo& value)
+{
+       s << "VkExportFenceCreateInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\thandleTypes = " << getExternalFenceHandleTypeFlagsStr(value.handleTypes) << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkExportSemaphoreCreateInfo& value)
+{
+       s << "VkExportSemaphoreCreateInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\thandleTypes = " << getExternalSemaphoreHandleTypeFlagsStr(value.handleTypes) << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceExternalSemaphoreInfo& value)
+{
+       s << "VkPhysicalDeviceExternalSemaphoreInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\thandleType = " << value.handleType << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkExternalSemaphoreProperties& value)
+{
+       s << "VkExternalSemaphoreProperties = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\texportFromImportedHandleTypes = " << getExternalSemaphoreHandleTypeFlagsStr(value.exportFromImportedHandleTypes) << '\n';
+       s << "\tcompatibleHandleTypes = " << getExternalSemaphoreHandleTypeFlagsStr(value.compatibleHandleTypes) << '\n';
+       s << "\texternalSemaphoreFeatures = " << getExternalSemaphoreFeatureFlagsStr(value.externalSemaphoreFeatures) << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceMaintenance3Properties& value)
+{
+       s << "VkPhysicalDeviceMaintenance3Properties = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tmaxPerSetDescriptors = " << value.maxPerSetDescriptors << '\n';
+       s << "\tmaxMemoryAllocationSize = " << value.maxMemoryAllocationSize << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkDescriptorSetLayoutSupport& value)
+{
+       s << "VkDescriptorSetLayoutSupport = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tsupported = " << value.supported << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceShaderDrawParametersFeatures& value)
+{
+       s << "VkPhysicalDeviceShaderDrawParametersFeatures = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tshaderDrawParameters = " << value.shaderDrawParameters << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceVulkan11Features& value)
+{
+       s << "VkPhysicalDeviceVulkan11Features = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tstorageBuffer16BitAccess = " << value.storageBuffer16BitAccess << '\n';
+       s << "\tuniformAndStorageBuffer16BitAccess = " << value.uniformAndStorageBuffer16BitAccess << '\n';
+       s << "\tstoragePushConstant16 = " << value.storagePushConstant16 << '\n';
+       s << "\tstorageInputOutput16 = " << value.storageInputOutput16 << '\n';
+       s << "\tmultiview = " << value.multiview << '\n';
+       s << "\tmultiviewGeometryShader = " << value.multiviewGeometryShader << '\n';
+       s << "\tmultiviewTessellationShader = " << value.multiviewTessellationShader << '\n';
+       s << "\tvariablePointersStorageBuffer = " << value.variablePointersStorageBuffer << '\n';
+       s << "\tvariablePointers = " << value.variablePointers << '\n';
+       s << "\tprotectedMemory = " << value.protectedMemory << '\n';
+       s << "\tsamplerYcbcrConversion = " << value.samplerYcbcrConversion << '\n';
+       s << "\tshaderDrawParameters = " << value.shaderDrawParameters << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceVulkan11Properties& value)
+{
+       s << "VkPhysicalDeviceVulkan11Properties = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tdeviceUUID = " << '\n' << tcu::formatArray(tcu::Format::HexIterator<deUint8>(DE_ARRAY_BEGIN(value.deviceUUID)), tcu::Format::HexIterator<deUint8>(DE_ARRAY_END(value.deviceUUID))) << '\n';
+       s << "\tdriverUUID = " << '\n' << tcu::formatArray(tcu::Format::HexIterator<deUint8>(DE_ARRAY_BEGIN(value.driverUUID)), tcu::Format::HexIterator<deUint8>(DE_ARRAY_END(value.driverUUID))) << '\n';
+       s << "\tdeviceLUID = " << '\n' << tcu::formatArray(tcu::Format::HexIterator<deUint8>(DE_ARRAY_BEGIN(value.deviceLUID)), tcu::Format::HexIterator<deUint8>(DE_ARRAY_END(value.deviceLUID))) << '\n';
+       s << "\tdeviceNodeMask = " << value.deviceNodeMask << '\n';
+       s << "\tdeviceLUIDValid = " << value.deviceLUIDValid << '\n';
+       s << "\tsubgroupSize = " << value.subgroupSize << '\n';
+       s << "\tsubgroupSupportedStages = " << getShaderStageFlagsStr(value.subgroupSupportedStages) << '\n';
+       s << "\tsubgroupSupportedOperations = " << getSubgroupFeatureFlagsStr(value.subgroupSupportedOperations) << '\n';
+       s << "\tsubgroupQuadOperationsInAllStages = " << value.subgroupQuadOperationsInAllStages << '\n';
+       s << "\tpointClippingBehavior = " << value.pointClippingBehavior << '\n';
+       s << "\tmaxMultiviewViewCount = " << value.maxMultiviewViewCount << '\n';
+       s << "\tmaxMultiviewInstanceIndex = " << value.maxMultiviewInstanceIndex << '\n';
+       s << "\tprotectedNoFault = " << value.protectedNoFault << '\n';
+       s << "\tmaxPerSetDescriptors = " << value.maxPerSetDescriptors << '\n';
+       s << "\tmaxMemoryAllocationSize = " << value.maxMemoryAllocationSize << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceVulkan12Features& value)
+{
+       s << "VkPhysicalDeviceVulkan12Features = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tsamplerMirrorClampToEdge = " << value.samplerMirrorClampToEdge << '\n';
+       s << "\tdrawIndirectCount = " << value.drawIndirectCount << '\n';
+       s << "\tstorageBuffer8BitAccess = " << value.storageBuffer8BitAccess << '\n';
+       s << "\tuniformAndStorageBuffer8BitAccess = " << value.uniformAndStorageBuffer8BitAccess << '\n';
+       s << "\tstoragePushConstant8 = " << value.storagePushConstant8 << '\n';
+       s << "\tshaderBufferInt64Atomics = " << value.shaderBufferInt64Atomics << '\n';
+       s << "\tshaderSharedInt64Atomics = " << value.shaderSharedInt64Atomics << '\n';
+       s << "\tshaderFloat16 = " << value.shaderFloat16 << '\n';
+       s << "\tshaderInt8 = " << value.shaderInt8 << '\n';
+       s << "\tdescriptorIndexing = " << value.descriptorIndexing << '\n';
+       s << "\tshaderInputAttachmentArrayDynamicIndexing = " << value.shaderInputAttachmentArrayDynamicIndexing << '\n';
+       s << "\tshaderUniformTexelBufferArrayDynamicIndexing = " << value.shaderUniformTexelBufferArrayDynamicIndexing << '\n';
+       s << "\tshaderStorageTexelBufferArrayDynamicIndexing = " << value.shaderStorageTexelBufferArrayDynamicIndexing << '\n';
+       s << "\tshaderUniformBufferArrayNonUniformIndexing = " << value.shaderUniformBufferArrayNonUniformIndexing << '\n';
+       s << "\tshaderSampledImageArrayNonUniformIndexing = " << value.shaderSampledImageArrayNonUniformIndexing << '\n';
+       s << "\tshaderStorageBufferArrayNonUniformIndexing = " << value.shaderStorageBufferArrayNonUniformIndexing << '\n';
+       s << "\tshaderStorageImageArrayNonUniformIndexing = " << value.shaderStorageImageArrayNonUniformIndexing << '\n';
+       s << "\tshaderInputAttachmentArrayNonUniformIndexing = " << value.shaderInputAttachmentArrayNonUniformIndexing << '\n';
+       s << "\tshaderUniformTexelBufferArrayNonUniformIndexing = " << value.shaderUniformTexelBufferArrayNonUniformIndexing << '\n';
+       s << "\tshaderStorageTexelBufferArrayNonUniformIndexing = " << value.shaderStorageTexelBufferArrayNonUniformIndexing << '\n';
+       s << "\tdescriptorBindingUniformBufferUpdateAfterBind = " << value.descriptorBindingUniformBufferUpdateAfterBind << '\n';
+       s << "\tdescriptorBindingSampledImageUpdateAfterBind = " << value.descriptorBindingSampledImageUpdateAfterBind << '\n';
+       s << "\tdescriptorBindingStorageImageUpdateAfterBind = " << value.descriptorBindingStorageImageUpdateAfterBind << '\n';
+       s << "\tdescriptorBindingStorageBufferUpdateAfterBind = " << value.descriptorBindingStorageBufferUpdateAfterBind << '\n';
+       s << "\tdescriptorBindingUniformTexelBufferUpdateAfterBind = " << value.descriptorBindingUniformTexelBufferUpdateAfterBind << '\n';
+       s << "\tdescriptorBindingStorageTexelBufferUpdateAfterBind = " << value.descriptorBindingStorageTexelBufferUpdateAfterBind << '\n';
+       s << "\tdescriptorBindingUpdateUnusedWhilePending = " << value.descriptorBindingUpdateUnusedWhilePending << '\n';
+       s << "\tdescriptorBindingPartiallyBound = " << value.descriptorBindingPartiallyBound << '\n';
+       s << "\tdescriptorBindingVariableDescriptorCount = " << value.descriptorBindingVariableDescriptorCount << '\n';
+       s << "\truntimeDescriptorArray = " << value.runtimeDescriptorArray << '\n';
+       s << "\tsamplerFilterMinmax = " << value.samplerFilterMinmax << '\n';
+       s << "\tscalarBlockLayout = " << value.scalarBlockLayout << '\n';
+       s << "\timagelessFramebuffer = " << value.imagelessFramebuffer << '\n';
+       s << "\tuniformBufferStandardLayout = " << value.uniformBufferStandardLayout << '\n';
+       s << "\tshaderSubgroupExtendedTypes = " << value.shaderSubgroupExtendedTypes << '\n';
+       s << "\tseparateDepthStencilLayouts = " << value.separateDepthStencilLayouts << '\n';
+       s << "\thostQueryReset = " << value.hostQueryReset << '\n';
+       s << "\ttimelineSemaphore = " << value.timelineSemaphore << '\n';
+       s << "\tbufferDeviceAddress = " << value.bufferDeviceAddress << '\n';
+       s << "\tbufferDeviceAddressCaptureReplay = " << value.bufferDeviceAddressCaptureReplay << '\n';
+       s << "\tbufferDeviceAddressMultiDevice = " << value.bufferDeviceAddressMultiDevice << '\n';
+       s << "\tvulkanMemoryModel = " << value.vulkanMemoryModel << '\n';
+       s << "\tvulkanMemoryModelDeviceScope = " << value.vulkanMemoryModelDeviceScope << '\n';
+       s << "\tvulkanMemoryModelAvailabilityVisibilityChains = " << value.vulkanMemoryModelAvailabilityVisibilityChains << '\n';
+       s << "\tshaderOutputViewportIndex = " << value.shaderOutputViewportIndex << '\n';
+       s << "\tshaderOutputLayer = " << value.shaderOutputLayer << '\n';
+       s << "\tsubgroupBroadcastDynamicId = " << value.subgroupBroadcastDynamicId << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkConformanceVersion& value)
+{
+       s << "VkConformanceVersion = {\n";
+       s << "\tmajor = " << value.major << '\n';
+       s << "\tminor = " << value.minor << '\n';
+       s << "\tsubminor = " << value.subminor << '\n';
+       s << "\tpatch = " << value.patch << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceVulkan12Properties& value)
+{
+       s << "VkPhysicalDeviceVulkan12Properties = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tdriverID = " << value.driverID << '\n';
+       s << "\tdriverName = " << '\n' << tcu::formatArray(tcu::Format::HexIterator<char>(DE_ARRAY_BEGIN(value.driverName)), tcu::Format::HexIterator<char>(DE_ARRAY_END(value.driverName))) << '\n';
+       s << "\tdriverInfo = " << '\n' << tcu::formatArray(tcu::Format::HexIterator<char>(DE_ARRAY_BEGIN(value.driverInfo)), tcu::Format::HexIterator<char>(DE_ARRAY_END(value.driverInfo))) << '\n';
+       s << "\tconformanceVersion = " << value.conformanceVersion << '\n';
+       s << "\tdenormBehaviorIndependence = " << value.denormBehaviorIndependence << '\n';
+       s << "\troundingModeIndependence = " << value.roundingModeIndependence << '\n';
+       s << "\tshaderSignedZeroInfNanPreserveFloat16 = " << value.shaderSignedZeroInfNanPreserveFloat16 << '\n';
+       s << "\tshaderSignedZeroInfNanPreserveFloat32 = " << value.shaderSignedZeroInfNanPreserveFloat32 << '\n';
+       s << "\tshaderSignedZeroInfNanPreserveFloat64 = " << value.shaderSignedZeroInfNanPreserveFloat64 << '\n';
+       s << "\tshaderDenormPreserveFloat16 = " << value.shaderDenormPreserveFloat16 << '\n';
+       s << "\tshaderDenormPreserveFloat32 = " << value.shaderDenormPreserveFloat32 << '\n';
+       s << "\tshaderDenormPreserveFloat64 = " << value.shaderDenormPreserveFloat64 << '\n';
+       s << "\tshaderDenormFlushToZeroFloat16 = " << value.shaderDenormFlushToZeroFloat16 << '\n';
+       s << "\tshaderDenormFlushToZeroFloat32 = " << value.shaderDenormFlushToZeroFloat32 << '\n';
+       s << "\tshaderDenormFlushToZeroFloat64 = " << value.shaderDenormFlushToZeroFloat64 << '\n';
+       s << "\tshaderRoundingModeRTEFloat16 = " << value.shaderRoundingModeRTEFloat16 << '\n';
+       s << "\tshaderRoundingModeRTEFloat32 = " << value.shaderRoundingModeRTEFloat32 << '\n';
+       s << "\tshaderRoundingModeRTEFloat64 = " << value.shaderRoundingModeRTEFloat64 << '\n';
+       s << "\tshaderRoundingModeRTZFloat16 = " << value.shaderRoundingModeRTZFloat16 << '\n';
+       s << "\tshaderRoundingModeRTZFloat32 = " << value.shaderRoundingModeRTZFloat32 << '\n';
+       s << "\tshaderRoundingModeRTZFloat64 = " << value.shaderRoundingModeRTZFloat64 << '\n';
+       s << "\tmaxUpdateAfterBindDescriptorsInAllPools = " << value.maxUpdateAfterBindDescriptorsInAllPools << '\n';
+       s << "\tshaderUniformBufferArrayNonUniformIndexingNative = " << value.shaderUniformBufferArrayNonUniformIndexingNative << '\n';
+       s << "\tshaderSampledImageArrayNonUniformIndexingNative = " << value.shaderSampledImageArrayNonUniformIndexingNative << '\n';
+       s << "\tshaderStorageBufferArrayNonUniformIndexingNative = " << value.shaderStorageBufferArrayNonUniformIndexingNative << '\n';
+       s << "\tshaderStorageImageArrayNonUniformIndexingNative = " << value.shaderStorageImageArrayNonUniformIndexingNative << '\n';
+       s << "\tshaderInputAttachmentArrayNonUniformIndexingNative = " << value.shaderInputAttachmentArrayNonUniformIndexingNative << '\n';
+       s << "\trobustBufferAccessUpdateAfterBind = " << value.robustBufferAccessUpdateAfterBind << '\n';
+       s << "\tquadDivergentImplicitLod = " << value.quadDivergentImplicitLod << '\n';
+       s << "\tmaxPerStageDescriptorUpdateAfterBindSamplers = " << value.maxPerStageDescriptorUpdateAfterBindSamplers << '\n';
+       s << "\tmaxPerStageDescriptorUpdateAfterBindUniformBuffers = " << value.maxPerStageDescriptorUpdateAfterBindUniformBuffers << '\n';
+       s << "\tmaxPerStageDescriptorUpdateAfterBindStorageBuffers = " << value.maxPerStageDescriptorUpdateAfterBindStorageBuffers << '\n';
+       s << "\tmaxPerStageDescriptorUpdateAfterBindSampledImages = " << value.maxPerStageDescriptorUpdateAfterBindSampledImages << '\n';
+       s << "\tmaxPerStageDescriptorUpdateAfterBindStorageImages = " << value.maxPerStageDescriptorUpdateAfterBindStorageImages << '\n';
+       s << "\tmaxPerStageDescriptorUpdateAfterBindInputAttachments = " << value.maxPerStageDescriptorUpdateAfterBindInputAttachments << '\n';
+       s << "\tmaxPerStageUpdateAfterBindResources = " << value.maxPerStageUpdateAfterBindResources << '\n';
+       s << "\tmaxDescriptorSetUpdateAfterBindSamplers = " << value.maxDescriptorSetUpdateAfterBindSamplers << '\n';
+       s << "\tmaxDescriptorSetUpdateAfterBindUniformBuffers = " << value.maxDescriptorSetUpdateAfterBindUniformBuffers << '\n';
+       s << "\tmaxDescriptorSetUpdateAfterBindUniformBuffersDynamic = " << value.maxDescriptorSetUpdateAfterBindUniformBuffersDynamic << '\n';
+       s << "\tmaxDescriptorSetUpdateAfterBindStorageBuffers = " << value.maxDescriptorSetUpdateAfterBindStorageBuffers << '\n';
+       s << "\tmaxDescriptorSetUpdateAfterBindStorageBuffersDynamic = " << value.maxDescriptorSetUpdateAfterBindStorageBuffersDynamic << '\n';
+       s << "\tmaxDescriptorSetUpdateAfterBindSampledImages = " << value.maxDescriptorSetUpdateAfterBindSampledImages << '\n';
+       s << "\tmaxDescriptorSetUpdateAfterBindStorageImages = " << value.maxDescriptorSetUpdateAfterBindStorageImages << '\n';
+       s << "\tmaxDescriptorSetUpdateAfterBindInputAttachments = " << value.maxDescriptorSetUpdateAfterBindInputAttachments << '\n';
+       s << "\tsupportedDepthResolveModes = " << getResolveModeFlagsStr(value.supportedDepthResolveModes) << '\n';
+       s << "\tsupportedStencilResolveModes = " << getResolveModeFlagsStr(value.supportedStencilResolveModes) << '\n';
+       s << "\tindependentResolveNone = " << value.independentResolveNone << '\n';
+       s << "\tindependentResolve = " << value.independentResolve << '\n';
+       s << "\tfilterMinmaxSingleComponentFormats = " << value.filterMinmaxSingleComponentFormats << '\n';
+       s << "\tfilterMinmaxImageComponentMapping = " << value.filterMinmaxImageComponentMapping << '\n';
+       s << "\tmaxTimelineSemaphoreValueDifference = " << value.maxTimelineSemaphoreValueDifference << '\n';
+       s << "\tframebufferIntegerColorSampleCounts = " << getSampleCountFlagsStr(value.framebufferIntegerColorSampleCounts) << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkImageFormatListCreateInfo& value)
+{
+       s << "VkImageFormatListCreateInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tviewFormatCount = " << value.viewFormatCount << '\n';
+       s << "\tpViewFormats = " << value.pViewFormats << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkAttachmentDescription2& value)
+{
+       s << "VkAttachmentDescription2 = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tflags = " << getAttachmentDescriptionFlagsStr(value.flags) << '\n';
+       s << "\tformat = " << value.format << '\n';
+       s << "\tsamples = " << value.samples << '\n';
+       s << "\tloadOp = " << value.loadOp << '\n';
+       s << "\tstoreOp = " << value.storeOp << '\n';
+       s << "\tstencilLoadOp = " << value.stencilLoadOp << '\n';
+       s << "\tstencilStoreOp = " << value.stencilStoreOp << '\n';
+       s << "\tinitialLayout = " << value.initialLayout << '\n';
+       s << "\tfinalLayout = " << value.finalLayout << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkAttachmentReference2& value)
+{
+       s << "VkAttachmentReference2 = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tattachment = " << value.attachment << '\n';
+       s << "\tlayout = " << value.layout << '\n';
+       s << "\taspectMask = " << getImageAspectFlagsStr(value.aspectMask) << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkSubpassDescription2& value)
+{
+       s << "VkSubpassDescription2 = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tflags = " << getSubpassDescriptionFlagsStr(value.flags) << '\n';
+       s << "\tpipelineBindPoint = " << value.pipelineBindPoint << '\n';
+       s << "\tviewMask = " << value.viewMask << '\n';
+       s << "\tinputAttachmentCount = " << value.inputAttachmentCount << '\n';
+       s << "\tpInputAttachments = " << value.pInputAttachments << '\n';
+       s << "\tcolorAttachmentCount = " << value.colorAttachmentCount << '\n';
+       s << "\tpColorAttachments = " << value.pColorAttachments << '\n';
+       s << "\tpResolveAttachments = " << value.pResolveAttachments << '\n';
+       s << "\tpDepthStencilAttachment = " << value.pDepthStencilAttachment << '\n';
+       s << "\tpreserveAttachmentCount = " << value.preserveAttachmentCount << '\n';
+       s << "\tpPreserveAttachments = " << value.pPreserveAttachments << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkSubpassDependency2& value)
+{
+       s << "VkSubpassDependency2 = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tsrcSubpass = " << value.srcSubpass << '\n';
+       s << "\tdstSubpass = " << value.dstSubpass << '\n';
+       s << "\tsrcStageMask = " << getPipelineStageFlagsStr(value.srcStageMask) << '\n';
+       s << "\tdstStageMask = " << getPipelineStageFlagsStr(value.dstStageMask) << '\n';
+       s << "\tsrcAccessMask = " << getAccessFlagsStr(value.srcAccessMask) << '\n';
+       s << "\tdstAccessMask = " << getAccessFlagsStr(value.dstAccessMask) << '\n';
+       s << "\tdependencyFlags = " << getDependencyFlagsStr(value.dependencyFlags) << '\n';
+       s << "\tviewOffset = " << value.viewOffset << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkRenderPassCreateInfo2& value)
+{
+       s << "VkRenderPassCreateInfo2 = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tflags = " << getRenderPassCreateFlagsStr(value.flags) << '\n';
+       s << "\tattachmentCount = " << value.attachmentCount << '\n';
+       s << "\tpAttachments = " << value.pAttachments << '\n';
+       s << "\tsubpassCount = " << value.subpassCount << '\n';
+       s << "\tpSubpasses = " << value.pSubpasses << '\n';
+       s << "\tdependencyCount = " << value.dependencyCount << '\n';
+       s << "\tpDependencies = " << value.pDependencies << '\n';
+       s << "\tcorrelatedViewMaskCount = " << value.correlatedViewMaskCount << '\n';
+       s << "\tpCorrelatedViewMasks = " << value.pCorrelatedViewMasks << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkSubpassBeginInfo& value)
+{
+       s << "VkSubpassBeginInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tcontents = " << value.contents << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkSubpassEndInfo& value)
+{
+       s << "VkSubpassEndInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDevice8BitStorageFeatures& value)
+{
+       s << "VkPhysicalDevice8BitStorageFeatures = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tstorageBuffer8BitAccess = " << value.storageBuffer8BitAccess << '\n';
+       s << "\tuniformAndStorageBuffer8BitAccess = " << value.uniformAndStorageBuffer8BitAccess << '\n';
+       s << "\tstoragePushConstant8 = " << value.storagePushConstant8 << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceDriverProperties& value)
+{
+       s << "VkPhysicalDeviceDriverProperties = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tdriverID = " << value.driverID << '\n';
+       s << "\tdriverName = " << '\n' << tcu::formatArray(tcu::Format::HexIterator<char>(DE_ARRAY_BEGIN(value.driverName)), tcu::Format::HexIterator<char>(DE_ARRAY_END(value.driverName))) << '\n';
+       s << "\tdriverInfo = " << '\n' << tcu::formatArray(tcu::Format::HexIterator<char>(DE_ARRAY_BEGIN(value.driverInfo)), tcu::Format::HexIterator<char>(DE_ARRAY_END(value.driverInfo))) << '\n';
+       s << "\tconformanceVersion = " << value.conformanceVersion << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceShaderAtomicInt64Features& value)
+{
+       s << "VkPhysicalDeviceShaderAtomicInt64Features = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tshaderBufferInt64Atomics = " << value.shaderBufferInt64Atomics << '\n';
+       s << "\tshaderSharedInt64Atomics = " << value.shaderSharedInt64Atomics << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceShaderFloat16Int8Features& value)
+{
+       s << "VkPhysicalDeviceShaderFloat16Int8Features = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tshaderFloat16 = " << value.shaderFloat16 << '\n';
+       s << "\tshaderInt8 = " << value.shaderInt8 << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceFloatControlsProperties& value)
+{
+       s << "VkPhysicalDeviceFloatControlsProperties = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tdenormBehaviorIndependence = " << value.denormBehaviorIndependence << '\n';
+       s << "\troundingModeIndependence = " << value.roundingModeIndependence << '\n';
+       s << "\tshaderSignedZeroInfNanPreserveFloat16 = " << value.shaderSignedZeroInfNanPreserveFloat16 << '\n';
+       s << "\tshaderSignedZeroInfNanPreserveFloat32 = " << value.shaderSignedZeroInfNanPreserveFloat32 << '\n';
+       s << "\tshaderSignedZeroInfNanPreserveFloat64 = " << value.shaderSignedZeroInfNanPreserveFloat64 << '\n';
+       s << "\tshaderDenormPreserveFloat16 = " << value.shaderDenormPreserveFloat16 << '\n';
+       s << "\tshaderDenormPreserveFloat32 = " << value.shaderDenormPreserveFloat32 << '\n';
+       s << "\tshaderDenormPreserveFloat64 = " << value.shaderDenormPreserveFloat64 << '\n';
+       s << "\tshaderDenormFlushToZeroFloat16 = " << value.shaderDenormFlushToZeroFloat16 << '\n';
+       s << "\tshaderDenormFlushToZeroFloat32 = " << value.shaderDenormFlushToZeroFloat32 << '\n';
+       s << "\tshaderDenormFlushToZeroFloat64 = " << value.shaderDenormFlushToZeroFloat64 << '\n';
+       s << "\tshaderRoundingModeRTEFloat16 = " << value.shaderRoundingModeRTEFloat16 << '\n';
+       s << "\tshaderRoundingModeRTEFloat32 = " << value.shaderRoundingModeRTEFloat32 << '\n';
+       s << "\tshaderRoundingModeRTEFloat64 = " << value.shaderRoundingModeRTEFloat64 << '\n';
+       s << "\tshaderRoundingModeRTZFloat16 = " << value.shaderRoundingModeRTZFloat16 << '\n';
+       s << "\tshaderRoundingModeRTZFloat32 = " << value.shaderRoundingModeRTZFloat32 << '\n';
+       s << "\tshaderRoundingModeRTZFloat64 = " << value.shaderRoundingModeRTZFloat64 << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkDescriptorSetLayoutBindingFlagsCreateInfo& value)
+{
+       s << "VkDescriptorSetLayoutBindingFlagsCreateInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tbindingCount = " << value.bindingCount << '\n';
+       s << "\tpBindingFlags = " << value.pBindingFlags << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceDescriptorIndexingFeatures& value)
+{
+       s << "VkPhysicalDeviceDescriptorIndexingFeatures = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tshaderInputAttachmentArrayDynamicIndexing = " << value.shaderInputAttachmentArrayDynamicIndexing << '\n';
+       s << "\tshaderUniformTexelBufferArrayDynamicIndexing = " << value.shaderUniformTexelBufferArrayDynamicIndexing << '\n';
+       s << "\tshaderStorageTexelBufferArrayDynamicIndexing = " << value.shaderStorageTexelBufferArrayDynamicIndexing << '\n';
+       s << "\tshaderUniformBufferArrayNonUniformIndexing = " << value.shaderUniformBufferArrayNonUniformIndexing << '\n';
+       s << "\tshaderSampledImageArrayNonUniformIndexing = " << value.shaderSampledImageArrayNonUniformIndexing << '\n';
+       s << "\tshaderStorageBufferArrayNonUniformIndexing = " << value.shaderStorageBufferArrayNonUniformIndexing << '\n';
+       s << "\tshaderStorageImageArrayNonUniformIndexing = " << value.shaderStorageImageArrayNonUniformIndexing << '\n';
+       s << "\tshaderInputAttachmentArrayNonUniformIndexing = " << value.shaderInputAttachmentArrayNonUniformIndexing << '\n';
+       s << "\tshaderUniformTexelBufferArrayNonUniformIndexing = " << value.shaderUniformTexelBufferArrayNonUniformIndexing << '\n';
+       s << "\tshaderStorageTexelBufferArrayNonUniformIndexing = " << value.shaderStorageTexelBufferArrayNonUniformIndexing << '\n';
+       s << "\tdescriptorBindingUniformBufferUpdateAfterBind = " << value.descriptorBindingUniformBufferUpdateAfterBind << '\n';
+       s << "\tdescriptorBindingSampledImageUpdateAfterBind = " << value.descriptorBindingSampledImageUpdateAfterBind << '\n';
+       s << "\tdescriptorBindingStorageImageUpdateAfterBind = " << value.descriptorBindingStorageImageUpdateAfterBind << '\n';
+       s << "\tdescriptorBindingStorageBufferUpdateAfterBind = " << value.descriptorBindingStorageBufferUpdateAfterBind << '\n';
+       s << "\tdescriptorBindingUniformTexelBufferUpdateAfterBind = " << value.descriptorBindingUniformTexelBufferUpdateAfterBind << '\n';
+       s << "\tdescriptorBindingStorageTexelBufferUpdateAfterBind = " << value.descriptorBindingStorageTexelBufferUpdateAfterBind << '\n';
+       s << "\tdescriptorBindingUpdateUnusedWhilePending = " << value.descriptorBindingUpdateUnusedWhilePending << '\n';
+       s << "\tdescriptorBindingPartiallyBound = " << value.descriptorBindingPartiallyBound << '\n';
+       s << "\tdescriptorBindingVariableDescriptorCount = " << value.descriptorBindingVariableDescriptorCount << '\n';
+       s << "\truntimeDescriptorArray = " << value.runtimeDescriptorArray << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceDescriptorIndexingProperties& value)
+{
+       s << "VkPhysicalDeviceDescriptorIndexingProperties = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tmaxUpdateAfterBindDescriptorsInAllPools = " << value.maxUpdateAfterBindDescriptorsInAllPools << '\n';
+       s << "\tshaderUniformBufferArrayNonUniformIndexingNative = " << value.shaderUniformBufferArrayNonUniformIndexingNative << '\n';
+       s << "\tshaderSampledImageArrayNonUniformIndexingNative = " << value.shaderSampledImageArrayNonUniformIndexingNative << '\n';
+       s << "\tshaderStorageBufferArrayNonUniformIndexingNative = " << value.shaderStorageBufferArrayNonUniformIndexingNative << '\n';
+       s << "\tshaderStorageImageArrayNonUniformIndexingNative = " << value.shaderStorageImageArrayNonUniformIndexingNative << '\n';
+       s << "\tshaderInputAttachmentArrayNonUniformIndexingNative = " << value.shaderInputAttachmentArrayNonUniformIndexingNative << '\n';
+       s << "\trobustBufferAccessUpdateAfterBind = " << value.robustBufferAccessUpdateAfterBind << '\n';
+       s << "\tquadDivergentImplicitLod = " << value.quadDivergentImplicitLod << '\n';
+       s << "\tmaxPerStageDescriptorUpdateAfterBindSamplers = " << value.maxPerStageDescriptorUpdateAfterBindSamplers << '\n';
+       s << "\tmaxPerStageDescriptorUpdateAfterBindUniformBuffers = " << value.maxPerStageDescriptorUpdateAfterBindUniformBuffers << '\n';
+       s << "\tmaxPerStageDescriptorUpdateAfterBindStorageBuffers = " << value.maxPerStageDescriptorUpdateAfterBindStorageBuffers << '\n';
+       s << "\tmaxPerStageDescriptorUpdateAfterBindSampledImages = " << value.maxPerStageDescriptorUpdateAfterBindSampledImages << '\n';
+       s << "\tmaxPerStageDescriptorUpdateAfterBindStorageImages = " << value.maxPerStageDescriptorUpdateAfterBindStorageImages << '\n';
+       s << "\tmaxPerStageDescriptorUpdateAfterBindInputAttachments = " << value.maxPerStageDescriptorUpdateAfterBindInputAttachments << '\n';
+       s << "\tmaxPerStageUpdateAfterBindResources = " << value.maxPerStageUpdateAfterBindResources << '\n';
+       s << "\tmaxDescriptorSetUpdateAfterBindSamplers = " << value.maxDescriptorSetUpdateAfterBindSamplers << '\n';
+       s << "\tmaxDescriptorSetUpdateAfterBindUniformBuffers = " << value.maxDescriptorSetUpdateAfterBindUniformBuffers << '\n';
+       s << "\tmaxDescriptorSetUpdateAfterBindUniformBuffersDynamic = " << value.maxDescriptorSetUpdateAfterBindUniformBuffersDynamic << '\n';
+       s << "\tmaxDescriptorSetUpdateAfterBindStorageBuffers = " << value.maxDescriptorSetUpdateAfterBindStorageBuffers << '\n';
+       s << "\tmaxDescriptorSetUpdateAfterBindStorageBuffersDynamic = " << value.maxDescriptorSetUpdateAfterBindStorageBuffersDynamic << '\n';
+       s << "\tmaxDescriptorSetUpdateAfterBindSampledImages = " << value.maxDescriptorSetUpdateAfterBindSampledImages << '\n';
+       s << "\tmaxDescriptorSetUpdateAfterBindStorageImages = " << value.maxDescriptorSetUpdateAfterBindStorageImages << '\n';
+       s << "\tmaxDescriptorSetUpdateAfterBindInputAttachments = " << value.maxDescriptorSetUpdateAfterBindInputAttachments << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkDescriptorSetVariableDescriptorCountAllocateInfo& value)
+{
+       s << "VkDescriptorSetVariableDescriptorCountAllocateInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tdescriptorSetCount = " << value.descriptorSetCount << '\n';
+       s << "\tpDescriptorCounts = " << value.pDescriptorCounts << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkDescriptorSetVariableDescriptorCountLayoutSupport& value)
+{
+       s << "VkDescriptorSetVariableDescriptorCountLayoutSupport = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tmaxVariableDescriptorCount = " << value.maxVariableDescriptorCount << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkSubpassDescriptionDepthStencilResolve& value)
+{
+       s << "VkSubpassDescriptionDepthStencilResolve = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tdepthResolveMode = " << value.depthResolveMode << '\n';
+       s << "\tstencilResolveMode = " << value.stencilResolveMode << '\n';
+       s << "\tpDepthStencilResolveAttachment = " << value.pDepthStencilResolveAttachment << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceDepthStencilResolveProperties& value)
+{
+       s << "VkPhysicalDeviceDepthStencilResolveProperties = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tsupportedDepthResolveModes = " << getResolveModeFlagsStr(value.supportedDepthResolveModes) << '\n';
+       s << "\tsupportedStencilResolveModes = " << getResolveModeFlagsStr(value.supportedStencilResolveModes) << '\n';
+       s << "\tindependentResolveNone = " << value.independentResolveNone << '\n';
+       s << "\tindependentResolve = " << value.independentResolve << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceScalarBlockLayoutFeatures& value)
+{
+       s << "VkPhysicalDeviceScalarBlockLayoutFeatures = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tscalarBlockLayout = " << value.scalarBlockLayout << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkImageStencilUsageCreateInfo& value)
+{
+       s << "VkImageStencilUsageCreateInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tstencilUsage = " << getImageUsageFlagsStr(value.stencilUsage) << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkSamplerReductionModeCreateInfo& value)
+{
+       s << "VkSamplerReductionModeCreateInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\treductionMode = " << value.reductionMode << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceSamplerFilterMinmaxProperties& value)
+{
+       s << "VkPhysicalDeviceSamplerFilterMinmaxProperties = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tfilterMinmaxSingleComponentFormats = " << value.filterMinmaxSingleComponentFormats << '\n';
+       s << "\tfilterMinmaxImageComponentMapping = " << value.filterMinmaxImageComponentMapping << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceVulkanMemoryModelFeatures& value)
+{
+       s << "VkPhysicalDeviceVulkanMemoryModelFeatures = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tvulkanMemoryModel = " << value.vulkanMemoryModel << '\n';
+       s << "\tvulkanMemoryModelDeviceScope = " << value.vulkanMemoryModelDeviceScope << '\n';
+       s << "\tvulkanMemoryModelAvailabilityVisibilityChains = " << value.vulkanMemoryModelAvailabilityVisibilityChains << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceImagelessFramebufferFeatures& value)
+{
+       s << "VkPhysicalDeviceImagelessFramebufferFeatures = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\timagelessFramebuffer = " << value.imagelessFramebuffer << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkFramebufferAttachmentImageInfo& value)
+{
+       s << "VkFramebufferAttachmentImageInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tflags = " << getImageCreateFlagsStr(value.flags) << '\n';
+       s << "\tusage = " << getImageUsageFlagsStr(value.usage) << '\n';
+       s << "\twidth = " << value.width << '\n';
+       s << "\theight = " << value.height << '\n';
+       s << "\tlayerCount = " << value.layerCount << '\n';
+       s << "\tviewFormatCount = " << value.viewFormatCount << '\n';
+       s << "\tpViewFormats = " << value.pViewFormats << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkFramebufferAttachmentsCreateInfo& value)
+{
+       s << "VkFramebufferAttachmentsCreateInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tattachmentImageInfoCount = " << value.attachmentImageInfoCount << '\n';
+       s << "\tpAttachmentImageInfos = " << value.pAttachmentImageInfos << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkRenderPassAttachmentBeginInfo& value)
+{
+       s << "VkRenderPassAttachmentBeginInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tattachmentCount = " << value.attachmentCount << '\n';
+       s << "\tpAttachments = " << value.pAttachments << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceUniformBufferStandardLayoutFeatures& value)
+{
+       s << "VkPhysicalDeviceUniformBufferStandardLayoutFeatures = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tuniformBufferStandardLayout = " << value.uniformBufferStandardLayout << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures& value)
+{
+       s << "VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tshaderSubgroupExtendedTypes = " << value.shaderSubgroupExtendedTypes << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures& value)
+{
+       s << "VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tseparateDepthStencilLayouts = " << value.separateDepthStencilLayouts << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkAttachmentReferenceStencilLayout& value)
+{
+       s << "VkAttachmentReferenceStencilLayout = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tstencilLayout = " << value.stencilLayout << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkAttachmentDescriptionStencilLayout& value)
+{
+       s << "VkAttachmentDescriptionStencilLayout = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tstencilInitialLayout = " << value.stencilInitialLayout << '\n';
+       s << "\tstencilFinalLayout = " << value.stencilFinalLayout << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceHostQueryResetFeatures& value)
+{
+       s << "VkPhysicalDeviceHostQueryResetFeatures = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\thostQueryReset = " << value.hostQueryReset << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceTimelineSemaphoreFeatures& value)
+{
+       s << "VkPhysicalDeviceTimelineSemaphoreFeatures = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\ttimelineSemaphore = " << value.timelineSemaphore << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceTimelineSemaphoreProperties& value)
+{
+       s << "VkPhysicalDeviceTimelineSemaphoreProperties = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tmaxTimelineSemaphoreValueDifference = " << value.maxTimelineSemaphoreValueDifference << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkSemaphoreTypeCreateInfo& value)
+{
+       s << "VkSemaphoreTypeCreateInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tsemaphoreType = " << value.semaphoreType << '\n';
+       s << "\tinitialValue = " << value.initialValue << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkTimelineSemaphoreSubmitInfo& value)
+{
+       s << "VkTimelineSemaphoreSubmitInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\twaitSemaphoreValueCount = " << value.waitSemaphoreValueCount << '\n';
+       s << "\tpWaitSemaphoreValues = " << value.pWaitSemaphoreValues << '\n';
+       s << "\tsignalSemaphoreValueCount = " << value.signalSemaphoreValueCount << '\n';
+       s << "\tpSignalSemaphoreValues = " << value.pSignalSemaphoreValues << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkSemaphoreWaitInfo& value)
+{
+       s << "VkSemaphoreWaitInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tflags = " << getSemaphoreWaitFlagsStr(value.flags) << '\n';
+       s << "\tsemaphoreCount = " << value.semaphoreCount << '\n';
+       s << "\tpSemaphores = " << value.pSemaphores << '\n';
+       s << "\tpValues = " << value.pValues << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkSemaphoreSignalInfo& value)
+{
+       s << "VkSemaphoreSignalInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tsemaphore = " << value.semaphore << '\n';
+       s << "\tvalue = " << value.value << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceBufferDeviceAddressFeatures& value)
+{
+       s << "VkPhysicalDeviceBufferDeviceAddressFeatures = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tbufferDeviceAddress = " << value.bufferDeviceAddress << '\n';
+       s << "\tbufferDeviceAddressCaptureReplay = " << value.bufferDeviceAddressCaptureReplay << '\n';
+       s << "\tbufferDeviceAddressMultiDevice = " << value.bufferDeviceAddressMultiDevice << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkBufferDeviceAddressInfo& value)
+{
+       s << "VkBufferDeviceAddressInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tbuffer = " << value.buffer << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkBufferOpaqueCaptureAddressCreateInfo& value)
+{
+       s << "VkBufferOpaqueCaptureAddressCreateInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\topaqueCaptureAddress = " << value.opaqueCaptureAddress << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkMemoryOpaqueCaptureAddressAllocateInfo& value)
+{
+       s << "VkMemoryOpaqueCaptureAddressAllocateInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\topaqueCaptureAddress = " << value.opaqueCaptureAddress << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkDeviceMemoryOpaqueCaptureAddressInfo& value)
+{
+       s << "VkDeviceMemoryOpaqueCaptureAddressInfo = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tmemory = " << value.memory << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkSurfaceCapabilitiesKHR& value)
+{
+       s << "VkSurfaceCapabilitiesKHR = {\n";
+       s << "\tminImageCount = " << value.minImageCount << '\n';
+       s << "\tmaxImageCount = " << value.maxImageCount << '\n';
+       s << "\tcurrentExtent = " << value.currentExtent << '\n';
+       s << "\tminImageExtent = " << value.minImageExtent << '\n';
+       s << "\tmaxImageExtent = " << value.maxImageExtent << '\n';
+       s << "\tmaxImageArrayLayers = " << value.maxImageArrayLayers << '\n';
+       s << "\tsupportedTransforms = " << getSurfaceTransformFlagsKHRStr(value.supportedTransforms) << '\n';
+       s << "\tcurrentTransform = " << value.currentTransform << '\n';
+       s << "\tsupportedCompositeAlpha = " << getCompositeAlphaFlagsKHRStr(value.supportedCompositeAlpha) << '\n';
+       s << "\tsupportedUsageFlags = " << getImageUsageFlagsStr(value.supportedUsageFlags) << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkSurfaceFormatKHR& value)
+{
+       s << "VkSurfaceFormatKHR = {\n";
+       s << "\tformat = " << value.format << '\n';
+       s << "\tcolorSpace = " << value.colorSpace << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkSwapchainCreateInfoKHR& value)
+{
+       s << "VkSwapchainCreateInfoKHR = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tflags = " << getSwapchainCreateFlagsKHRStr(value.flags) << '\n';
+       s << "\tsurface = " << value.surface << '\n';
+       s << "\tminImageCount = " << value.minImageCount << '\n';
+       s << "\timageFormat = " << value.imageFormat << '\n';
+       s << "\timageColorSpace = " << value.imageColorSpace << '\n';
+       s << "\timageExtent = " << value.imageExtent << '\n';
+       s << "\timageArrayLayers = " << value.imageArrayLayers << '\n';
+       s << "\timageUsage = " << getImageUsageFlagsStr(value.imageUsage) << '\n';
+       s << "\timageSharingMode = " << value.imageSharingMode << '\n';
+       s << "\tqueueFamilyIndexCount = " << value.queueFamilyIndexCount << '\n';
+       s << "\tpQueueFamilyIndices = " << value.pQueueFamilyIndices << '\n';
+       s << "\tpreTransform = " << value.preTransform << '\n';
+       s << "\tcompositeAlpha = " << value.compositeAlpha << '\n';
+       s << "\tpresentMode = " << value.presentMode << '\n';
+       s << "\tclipped = " << value.clipped << '\n';
+       s << "\toldSwapchain = " << value.oldSwapchain << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPresentInfoKHR& value)
+{
+       s << "VkPresentInfoKHR = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\twaitSemaphoreCount = " << value.waitSemaphoreCount << '\n';
+       s << "\tpWaitSemaphores = " << value.pWaitSemaphores << '\n';
+       s << "\tswapchainCount = " << value.swapchainCount << '\n';
+       s << "\tpSwapchains = " << value.pSwapchains << '\n';
+       s << "\tpImageIndices = " << value.pImageIndices << '\n';
+       s << "\tpResults = " << value.pResults << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkImageSwapchainCreateInfoKHR& value)
+{
+       s << "VkImageSwapchainCreateInfoKHR = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tswapchain = " << value.swapchain << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkBindImageMemorySwapchainInfoKHR& value)
+{
+       s << "VkBindImageMemorySwapchainInfoKHR = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tswapchain = " << value.swapchain << '\n';
+       s << "\timageIndex = " << value.imageIndex << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkAcquireNextImageInfoKHR& value)
+{
+       s << "VkAcquireNextImageInfoKHR = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tswapchain = " << value.swapchain << '\n';
+       s << "\ttimeout = " << value.timeout << '\n';
+       s << "\tsemaphore = " << value.semaphore << '\n';
+       s << "\tfence = " << value.fence << '\n';
+       s << "\tdeviceMask = " << value.deviceMask << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkDeviceGroupPresentCapabilitiesKHR& value)
+{
+       s << "VkDeviceGroupPresentCapabilitiesKHR = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tpresentMask = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.presentMask), DE_ARRAY_END(value.presentMask)) << '\n';
+       s << "\tmodes = " << getDeviceGroupPresentModeFlagsKHRStr(value.modes) << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkDeviceGroupPresentInfoKHR& value)
+{
+       s << "VkDeviceGroupPresentInfoKHR = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tswapchainCount = " << value.swapchainCount << '\n';
+       s << "\tpDeviceMasks = " << value.pDeviceMasks << '\n';
+       s << "\tmode = " << value.mode << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkDeviceGroupSwapchainCreateInfoKHR& value)
+{
+       s << "VkDeviceGroupSwapchainCreateInfoKHR = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tmodes = " << getDeviceGroupPresentModeFlagsKHRStr(value.modes) << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkDisplayModeParametersKHR& value)
+{
+       s << "VkDisplayModeParametersKHR = {\n";
+       s << "\tvisibleRegion = " << value.visibleRegion << '\n';
+       s << "\trefreshRate = " << value.refreshRate << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkDisplayModeCreateInfoKHR& value)
+{
+       s << "VkDisplayModeCreateInfoKHR = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tflags = " << getDisplayModeCreateFlagsKHRStr(value.flags) << '\n';
+       s << "\tparameters = " << value.parameters << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkDisplayModePropertiesKHR& value)
+{
+       s << "VkDisplayModePropertiesKHR = {\n";
+       s << "\tdisplayMode = " << value.displayMode << '\n';
+       s << "\tparameters = " << value.parameters << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkDisplayPlaneCapabilitiesKHR& value)
+{
+       s << "VkDisplayPlaneCapabilitiesKHR = {\n";
+       s << "\tsupportedAlpha = " << getDisplayPlaneAlphaFlagsKHRStr(value.supportedAlpha) << '\n';
+       s << "\tminSrcPosition = " << value.minSrcPosition << '\n';
+       s << "\tmaxSrcPosition = " << value.maxSrcPosition << '\n';
+       s << "\tminSrcExtent = " << value.minSrcExtent << '\n';
+       s << "\tmaxSrcExtent = " << value.maxSrcExtent << '\n';
+       s << "\tminDstPosition = " << value.minDstPosition << '\n';
+       s << "\tmaxDstPosition = " << value.maxDstPosition << '\n';
+       s << "\tminDstExtent = " << value.minDstExtent << '\n';
+       s << "\tmaxDstExtent = " << value.maxDstExtent << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkDisplayPlanePropertiesKHR& value)
+{
+       s << "VkDisplayPlanePropertiesKHR = {\n";
+       s << "\tcurrentDisplay = " << value.currentDisplay << '\n';
+       s << "\tcurrentStackIndex = " << value.currentStackIndex << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkDisplayPropertiesKHR& value)
+{
+       s << "VkDisplayPropertiesKHR = {\n";
+       s << "\tdisplay = " << value.display << '\n';
+       s << "\tdisplayName = " << getCharPtrStr(value.displayName) << '\n';
+       s << "\tphysicalDimensions = " << value.physicalDimensions << '\n';
+       s << "\tphysicalResolution = " << value.physicalResolution << '\n';
+       s << "\tsupportedTransforms = " << getSurfaceTransformFlagsKHRStr(value.supportedTransforms) << '\n';
+       s << "\tplaneReorderPossible = " << value.planeReorderPossible << '\n';
+       s << "\tpersistentContent = " << value.persistentContent << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkDisplaySurfaceCreateInfoKHR& value)
+{
+       s << "VkDisplaySurfaceCreateInfoKHR = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tflags = " << getDisplaySurfaceCreateFlagsKHRStr(value.flags) << '\n';
+       s << "\tdisplayMode = " << value.displayMode << '\n';
+       s << "\tplaneIndex = " << value.planeIndex << '\n';
+       s << "\tplaneStackIndex = " << value.planeStackIndex << '\n';
+       s << "\ttransform = " << value.transform << '\n';
+       s << "\tglobalAlpha = " << value.globalAlpha << '\n';
+       s << "\talphaMode = " << value.alphaMode << '\n';
+       s << "\timageExtent = " << value.imageExtent << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkDisplayPresentInfoKHR& value)
+{
+       s << "VkDisplayPresentInfoKHR = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tsrcRect = " << value.srcRect << '\n';
+       s << "\tdstRect = " << value.dstRect << '\n';
+       s << "\tpersistent = " << value.persistent << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkImportMemoryFdInfoKHR& value)
+{
+       s << "VkImportMemoryFdInfoKHR = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\thandleType = " << value.handleType << '\n';
+       s << "\tfd = " << value.fd << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkMemoryFdPropertiesKHR& value)
+{
+       s << "VkMemoryFdPropertiesKHR = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tmemoryTypeBits = " << value.memoryTypeBits << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkMemoryGetFdInfoKHR& value)
+{
+       s << "VkMemoryGetFdInfoKHR = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tmemory = " << value.memory << '\n';
+       s << "\thandleType = " << value.handleType << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkImportSemaphoreFdInfoKHR& value)
+{
+       s << "VkImportSemaphoreFdInfoKHR = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tsemaphore = " << value.semaphore << '\n';
+       s << "\tflags = " << getSemaphoreImportFlagsStr(value.flags) << '\n';
+       s << "\thandleType = " << value.handleType << '\n';
+       s << "\tfd = " << value.fd << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkSemaphoreGetFdInfoKHR& value)
+{
+       s << "VkSemaphoreGetFdInfoKHR = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tsemaphore = " << value.semaphore << '\n';
+       s << "\thandleType = " << value.handleType << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkRectLayerKHR& value)
+{
+       s << "VkRectLayerKHR = {\n";
+       s << "\toffset = " << value.offset << '\n';
+       s << "\textent = " << value.extent << '\n';
+       s << "\tlayer = " << value.layer << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPresentRegionKHR& value)
+{
+       s << "VkPresentRegionKHR = {\n";
+       s << "\trectangleCount = " << value.rectangleCount << '\n';
+       s << "\tpRectangles = " << value.pRectangles << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPresentRegionsKHR& value)
+{
+       s << "VkPresentRegionsKHR = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tswapchainCount = " << value.swapchainCount << '\n';
+       s << "\tpRegions = " << value.pRegions << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkSharedPresentSurfaceCapabilitiesKHR& value)
+{
+       s << "VkSharedPresentSurfaceCapabilitiesKHR = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tsharedPresentSupportedUsageFlags = " << getImageUsageFlagsStr(value.sharedPresentSupportedUsageFlags) << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkImportFenceFdInfoKHR& value)
+{
+       s << "VkImportFenceFdInfoKHR = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tfence = " << value.fence << '\n';
+       s << "\tflags = " << getFenceImportFlagsStr(value.flags) << '\n';
+       s << "\thandleType = " << value.handleType << '\n';
+       s << "\tfd = " << value.fd << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkFenceGetFdInfoKHR& value)
+{
+       s << "VkFenceGetFdInfoKHR = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tfence = " << value.fence << '\n';
+       s << "\thandleType = " << value.handleType << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceSurfaceInfo2KHR& value)
+{
+       s << "VkPhysicalDeviceSurfaceInfo2KHR = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tsurface = " << value.surface << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkSurfaceCapabilities2KHR& value)
+{
+       s << "VkSurfaceCapabilities2KHR = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tsurfaceCapabilities = " << value.surfaceCapabilities << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkSurfaceFormat2KHR& value)
+{
+       s << "VkSurfaceFormat2KHR = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tsurfaceFormat = " << value.surfaceFormat << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkDisplayProperties2KHR& value)
+{
+       s << "VkDisplayProperties2KHR = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tdisplayProperties = " << value.displayProperties << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkDisplayPlaneProperties2KHR& value)
+{
+       s << "VkDisplayPlaneProperties2KHR = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tdisplayPlaneProperties = " << value.displayPlaneProperties << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkDisplayModeProperties2KHR& value)
+{
+       s << "VkDisplayModeProperties2KHR = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tdisplayModeProperties = " << value.displayModeProperties << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkDisplayPlaneInfo2KHR& value)
+{
+       s << "VkDisplayPlaneInfo2KHR = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tmode = " << value.mode << '\n';
+       s << "\tplaneIndex = " << value.planeIndex << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkDisplayPlaneCapabilities2KHR& value)
+{
+       s << "VkDisplayPlaneCapabilities2KHR = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tcapabilities = " << value.capabilities << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceShaderClockFeaturesKHR& value)
+{
+       s << "VkPhysicalDeviceShaderClockFeaturesKHR = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tshaderSubgroupClock = " << value.shaderSubgroupClock << '\n';
+       s << "\tshaderDeviceClock = " << value.shaderDeviceClock << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR& value)
+{
+       s << "VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tshaderTerminateInvocation = " << value.shaderTerminateInvocation << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkFragmentShadingRateAttachmentInfoKHR& value)
+{
+       s << "VkFragmentShadingRateAttachmentInfoKHR = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tpFragmentShadingRateAttachment = " << value.pFragmentShadingRateAttachment << '\n';
+       s << "\tshadingRateAttachmentTexelSize = " << value.shadingRateAttachmentTexelSize << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPipelineFragmentShadingRateStateCreateInfoKHR& value)
+{
+       s << "VkPipelineFragmentShadingRateStateCreateInfoKHR = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tfragmentSize = " << value.fragmentSize << '\n';
+       s << "\tcombinerOps = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.combinerOps), DE_ARRAY_END(value.combinerOps)) << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceFragmentShadingRateFeaturesKHR& value)
+{
+       s << "VkPhysicalDeviceFragmentShadingRateFeaturesKHR = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tpipelineFragmentShadingRate = " << value.pipelineFragmentShadingRate << '\n';
+       s << "\tprimitiveFragmentShadingRate = " << value.primitiveFragmentShadingRate << '\n';
+       s << "\tattachmentFragmentShadingRate = " << value.attachmentFragmentShadingRate << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceFragmentShadingRatePropertiesKHR& value)
+{
+       s << "VkPhysicalDeviceFragmentShadingRatePropertiesKHR = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tminFragmentShadingRateAttachmentTexelSize = " << value.minFragmentShadingRateAttachmentTexelSize << '\n';
+       s << "\tmaxFragmentShadingRateAttachmentTexelSize = " << value.maxFragmentShadingRateAttachmentTexelSize << '\n';
+       s << "\tmaxFragmentShadingRateAttachmentTexelSizeAspectRatio = " << value.maxFragmentShadingRateAttachmentTexelSizeAspectRatio << '\n';
+       s << "\tprimitiveFragmentShadingRateWithMultipleViewports = " << value.primitiveFragmentShadingRateWithMultipleViewports << '\n';
+       s << "\tlayeredShadingRateAttachments = " << value.layeredShadingRateAttachments << '\n';
+       s << "\tfragmentShadingRateNonTrivialCombinerOps = " << value.fragmentShadingRateNonTrivialCombinerOps << '\n';
+       s << "\tmaxFragmentSize = " << value.maxFragmentSize << '\n';
+       s << "\tmaxFragmentSizeAspectRatio = " << value.maxFragmentSizeAspectRatio << '\n';
+       s << "\tmaxFragmentShadingRateCoverageSamples = " << value.maxFragmentShadingRateCoverageSamples << '\n';
+       s << "\tmaxFragmentShadingRateRasterizationSamples = " << value.maxFragmentShadingRateRasterizationSamples << '\n';
+       s << "\tfragmentShadingRateWithShaderDepthStencilWrites = " << value.fragmentShadingRateWithShaderDepthStencilWrites << '\n';
+       s << "\tfragmentShadingRateWithSampleMask = " << value.fragmentShadingRateWithSampleMask << '\n';
+       s << "\tfragmentShadingRateWithShaderSampleMask = " << value.fragmentShadingRateWithShaderSampleMask << '\n';
+       s << "\tfragmentShadingRateWithConservativeRasterization = " << value.fragmentShadingRateWithConservativeRasterization << '\n';
+       s << "\tfragmentShadingRateWithFragmentShaderInterlock = " << value.fragmentShadingRateWithFragmentShaderInterlock << '\n';
+       s << "\tfragmentShadingRateWithCustomSampleLocations = " << value.fragmentShadingRateWithCustomSampleLocations << '\n';
+       s << "\tfragmentShadingRateStrictMultiplyCombiner = " << value.fragmentShadingRateStrictMultiplyCombiner << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceFragmentShadingRateKHR& value)
+{
+       s << "VkPhysicalDeviceFragmentShadingRateKHR = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tsampleCounts = " << getSampleCountFlagsStr(value.sampleCounts) << '\n';
+       s << "\tfragmentSize = " << value.fragmentSize << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkRefreshObjectKHR& value)
+{
+       s << "VkRefreshObjectKHR = {\n";
+       s << "\tobjectType = " << value.objectType << '\n';
+       s << "\tobjectHandle = " << value.objectHandle << '\n';
+       s << "\tflags = " << getRefreshObjectFlagsKHRStr(value.flags) << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkRefreshObjectListKHR& value)
+{
+       s << "VkRefreshObjectListKHR = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tobjectCount = " << value.objectCount << '\n';
+       s << "\tpObjects = " << value.pObjects << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkBufferCopy2KHR& value)
+{
+       s << "VkBufferCopy2KHR = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tsrcOffset = " << value.srcOffset << '\n';
+       s << "\tdstOffset = " << value.dstOffset << '\n';
+       s << "\tsize = " << value.size << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkCopyBufferInfo2KHR& value)
+{
+       s << "VkCopyBufferInfo2KHR = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tsrcBuffer = " << value.srcBuffer << '\n';
+       s << "\tdstBuffer = " << value.dstBuffer << '\n';
+       s << "\tregionCount = " << value.regionCount << '\n';
+       s << "\tpRegions = " << value.pRegions << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkImageCopy2KHR& value)
+{
+       s << "VkImageCopy2KHR = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tsrcSubresource = " << value.srcSubresource << '\n';
+       s << "\tsrcOffset = " << value.srcOffset << '\n';
+       s << "\tdstSubresource = " << value.dstSubresource << '\n';
+       s << "\tdstOffset = " << value.dstOffset << '\n';
+       s << "\textent = " << value.extent << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkCopyImageInfo2KHR& value)
+{
+       s << "VkCopyImageInfo2KHR = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tsrcImage = " << value.srcImage << '\n';
+       s << "\tsrcImageLayout = " << value.srcImageLayout << '\n';
+       s << "\tdstImage = " << value.dstImage << '\n';
+       s << "\tdstImageLayout = " << value.dstImageLayout << '\n';
+       s << "\tregionCount = " << value.regionCount << '\n';
+       s << "\tpRegions = " << value.pRegions << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkBufferImageCopy2KHR& value)
+{
+       s << "VkBufferImageCopy2KHR = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tbufferOffset = " << value.bufferOffset << '\n';
+       s << "\tbufferRowLength = " << value.bufferRowLength << '\n';
+       s << "\tbufferImageHeight = " << value.bufferImageHeight << '\n';
+       s << "\timageSubresource = " << value.imageSubresource << '\n';
+       s << "\timageOffset = " << value.imageOffset << '\n';
+       s << "\timageExtent = " << value.imageExtent << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkCopyBufferToImageInfo2KHR& value)
+{
+       s << "VkCopyBufferToImageInfo2KHR = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tsrcBuffer = " << value.srcBuffer << '\n';
+       s << "\tdstImage = " << value.dstImage << '\n';
+       s << "\tdstImageLayout = " << value.dstImageLayout << '\n';
+       s << "\tregionCount = " << value.regionCount << '\n';
+       s << "\tpRegions = " << value.pRegions << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkCopyImageToBufferInfo2KHR& value)
+{
+       s << "VkCopyImageToBufferInfo2KHR = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tsrcImage = " << value.srcImage << '\n';
+       s << "\tsrcImageLayout = " << value.srcImageLayout << '\n';
+       s << "\tdstBuffer = " << value.dstBuffer << '\n';
+       s << "\tregionCount = " << value.regionCount << '\n';
+       s << "\tpRegions = " << value.pRegions << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkImageBlit2KHR& value)
+{
+       s << "VkImageBlit2KHR = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tsrcSubresource = " << value.srcSubresource << '\n';
+       s << "\tsrcOffsets = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.srcOffsets), DE_ARRAY_END(value.srcOffsets)) << '\n';
+       s << "\tdstSubresource = " << value.dstSubresource << '\n';
+       s << "\tdstOffsets = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.dstOffsets), DE_ARRAY_END(value.dstOffsets)) << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkBlitImageInfo2KHR& value)
+{
+       s << "VkBlitImageInfo2KHR = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tsrcImage = " << value.srcImage << '\n';
+       s << "\tsrcImageLayout = " << value.srcImageLayout << '\n';
+       s << "\tdstImage = " << value.dstImage << '\n';
+       s << "\tdstImageLayout = " << value.dstImageLayout << '\n';
+       s << "\tregionCount = " << value.regionCount << '\n';
+       s << "\tpRegions = " << value.pRegions << '\n';
+       s << "\tfilter = " << value.filter << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkImageResolve2KHR& value)
+{
+       s << "VkImageResolve2KHR = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tsrcSubresource = " << value.srcSubresource << '\n';
+       s << "\tsrcOffset = " << value.srcOffset << '\n';
+       s << "\tdstSubresource = " << value.dstSubresource << '\n';
+       s << "\tdstOffset = " << value.dstOffset << '\n';
+       s << "\textent = " << value.extent << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkResolveImageInfo2KHR& value)
+{
+       s << "VkResolveImageInfo2KHR = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tsrcImage = " << value.srcImage << '\n';
+       s << "\tsrcImageLayout = " << value.srcImageLayout << '\n';
+       s << "\tdstImage = " << value.dstImage << '\n';
+       s << "\tdstImageLayout = " << value.dstImageLayout << '\n';
+       s << "\tregionCount = " << value.regionCount << '\n';
+       s << "\tpRegions = " << value.pRegions << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT& value)
+{
+       s << "VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\ttextureCompressionASTC_HDR = " << value.textureCompressionASTC_HDR << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkImageViewASTCDecodeModeEXT& value)
+{
+       s << "VkImageViewASTCDecodeModeEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tdecodeMode = " << value.decodeMode << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceASTCDecodeFeaturesEXT& value)
+{
+       s << "VkPhysicalDeviceASTCDecodeFeaturesEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tdecodeModeSharedExponent = " << value.decodeModeSharedExponent << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkSurfaceCapabilities2EXT& value)
+{
+       s << "VkSurfaceCapabilities2EXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tminImageCount = " << value.minImageCount << '\n';
+       s << "\tmaxImageCount = " << value.maxImageCount << '\n';
+       s << "\tcurrentExtent = " << value.currentExtent << '\n';
+       s << "\tminImageExtent = " << value.minImageExtent << '\n';
+       s << "\tmaxImageExtent = " << value.maxImageExtent << '\n';
+       s << "\tmaxImageArrayLayers = " << value.maxImageArrayLayers << '\n';
+       s << "\tsupportedTransforms = " << getSurfaceTransformFlagsKHRStr(value.supportedTransforms) << '\n';
+       s << "\tcurrentTransform = " << value.currentTransform << '\n';
+       s << "\tsupportedCompositeAlpha = " << getCompositeAlphaFlagsKHRStr(value.supportedCompositeAlpha) << '\n';
+       s << "\tsupportedUsageFlags = " << getImageUsageFlagsStr(value.supportedUsageFlags) << '\n';
+       s << "\tsupportedSurfaceCounters = " << getSurfaceCounterFlagsEXTStr(value.supportedSurfaceCounters) << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkDisplayPowerInfoEXT& value)
+{
+       s << "VkDisplayPowerInfoEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tpowerState = " << value.powerState << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkDeviceEventInfoEXT& value)
+{
+       s << "VkDeviceEventInfoEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tdeviceEvent = " << value.deviceEvent << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkDisplayEventInfoEXT& value)
+{
+       s << "VkDisplayEventInfoEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tdisplayEvent = " << value.displayEvent << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkSwapchainCounterCreateInfoEXT& value)
+{
+       s << "VkSwapchainCounterCreateInfoEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tsurfaceCounters = " << getSurfaceCounterFlagsEXTStr(value.surfaceCounters) << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceDiscardRectanglePropertiesEXT& value)
+{
+       s << "VkPhysicalDeviceDiscardRectanglePropertiesEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tmaxDiscardRectangles = " << value.maxDiscardRectangles << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPipelineDiscardRectangleStateCreateInfoEXT& value)
+{
+       s << "VkPipelineDiscardRectangleStateCreateInfoEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tflags = " << getPipelineDiscardRectangleStateCreateFlagsEXTStr(value.flags) << '\n';
+       s << "\tdiscardRectangleMode = " << value.discardRectangleMode << '\n';
+       s << "\tdiscardRectangleCount = " << value.discardRectangleCount << '\n';
+       s << "\tpDiscardRectangles = " << value.pDiscardRectangles << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceConservativeRasterizationPropertiesEXT& value)
+{
+       s << "VkPhysicalDeviceConservativeRasterizationPropertiesEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tprimitiveOverestimationSize = " << value.primitiveOverestimationSize << '\n';
+       s << "\tmaxExtraPrimitiveOverestimationSize = " << value.maxExtraPrimitiveOverestimationSize << '\n';
+       s << "\textraPrimitiveOverestimationSizeGranularity = " << value.extraPrimitiveOverestimationSizeGranularity << '\n';
+       s << "\tprimitiveUnderestimation = " << value.primitiveUnderestimation << '\n';
+       s << "\tconservativePointAndLineRasterization = " << value.conservativePointAndLineRasterization << '\n';
+       s << "\tdegenerateTrianglesRasterized = " << value.degenerateTrianglesRasterized << '\n';
+       s << "\tdegenerateLinesRasterized = " << value.degenerateLinesRasterized << '\n';
+       s << "\tfullyCoveredFragmentShaderInputVariable = " << value.fullyCoveredFragmentShaderInputVariable << '\n';
+       s << "\tconservativeRasterizationPostDepthCoverage = " << value.conservativeRasterizationPostDepthCoverage << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPipelineRasterizationConservativeStateCreateInfoEXT& value)
+{
+       s << "VkPipelineRasterizationConservativeStateCreateInfoEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tflags = " << getPipelineRasterizationConservativeStateCreateFlagsEXTStr(value.flags) << '\n';
+       s << "\tconservativeRasterizationMode = " << value.conservativeRasterizationMode << '\n';
+       s << "\textraPrimitiveOverestimationSize = " << value.extraPrimitiveOverestimationSize << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceDepthClipEnableFeaturesEXT& value)
+{
+       s << "VkPhysicalDeviceDepthClipEnableFeaturesEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tdepthClipEnable = " << value.depthClipEnable << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPipelineRasterizationDepthClipStateCreateInfoEXT& value)
+{
+       s << "VkPipelineRasterizationDepthClipStateCreateInfoEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tflags = " << getPipelineRasterizationDepthClipStateCreateFlagsEXTStr(value.flags) << '\n';
+       s << "\tdepthClipEnable = " << value.depthClipEnable << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkXYColorEXT& value)
+{
+       s << "VkXYColorEXT = {\n";
+       s << "\tx = " << value.x << '\n';
+       s << "\ty = " << value.y << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkHdrMetadataEXT& value)
+{
+       s << "VkHdrMetadataEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tdisplayPrimaryRed = " << value.displayPrimaryRed << '\n';
+       s << "\tdisplayPrimaryGreen = " << value.displayPrimaryGreen << '\n';
+       s << "\tdisplayPrimaryBlue = " << value.displayPrimaryBlue << '\n';
+       s << "\twhitePoint = " << value.whitePoint << '\n';
+       s << "\tmaxLuminance = " << value.maxLuminance << '\n';
+       s << "\tminLuminance = " << value.minLuminance << '\n';
+       s << "\tmaxContentLightLevel = " << value.maxContentLightLevel << '\n';
+       s << "\tmaxFrameAverageLightLevel = " << value.maxFrameAverageLightLevel << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkSampleLocationEXT& value)
+{
+       s << "VkSampleLocationEXT = {\n";
+       s << "\tx = " << value.x << '\n';
+       s << "\ty = " << value.y << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkSampleLocationsInfoEXT& value)
+{
+       s << "VkSampleLocationsInfoEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tsampleLocationsPerPixel = " << value.sampleLocationsPerPixel << '\n';
+       s << "\tsampleLocationGridSize = " << value.sampleLocationGridSize << '\n';
+       s << "\tsampleLocationsCount = " << value.sampleLocationsCount << '\n';
+       s << "\tpSampleLocations = " << value.pSampleLocations << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkAttachmentSampleLocationsEXT& value)
+{
+       s << "VkAttachmentSampleLocationsEXT = {\n";
+       s << "\tattachmentIndex = " << value.attachmentIndex << '\n';
+       s << "\tsampleLocationsInfo = " << value.sampleLocationsInfo << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkSubpassSampleLocationsEXT& value)
+{
+       s << "VkSubpassSampleLocationsEXT = {\n";
+       s << "\tsubpassIndex = " << value.subpassIndex << '\n';
+       s << "\tsampleLocationsInfo = " << value.sampleLocationsInfo << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkRenderPassSampleLocationsBeginInfoEXT& value)
+{
+       s << "VkRenderPassSampleLocationsBeginInfoEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tattachmentInitialSampleLocationsCount = " << value.attachmentInitialSampleLocationsCount << '\n';
+       s << "\tpAttachmentInitialSampleLocations = " << value.pAttachmentInitialSampleLocations << '\n';
+       s << "\tpostSubpassSampleLocationsCount = " << value.postSubpassSampleLocationsCount << '\n';
+       s << "\tpPostSubpassSampleLocations = " << value.pPostSubpassSampleLocations << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPipelineSampleLocationsStateCreateInfoEXT& value)
+{
+       s << "VkPipelineSampleLocationsStateCreateInfoEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tsampleLocationsEnable = " << value.sampleLocationsEnable << '\n';
+       s << "\tsampleLocationsInfo = " << value.sampleLocationsInfo << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceSampleLocationsPropertiesEXT& value)
+{
+       s << "VkPhysicalDeviceSampleLocationsPropertiesEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tsampleLocationSampleCounts = " << getSampleCountFlagsStr(value.sampleLocationSampleCounts) << '\n';
+       s << "\tmaxSampleLocationGridSize = " << value.maxSampleLocationGridSize << '\n';
+       s << "\tsampleLocationCoordinateRange = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.sampleLocationCoordinateRange), DE_ARRAY_END(value.sampleLocationCoordinateRange)) << '\n';
+       s << "\tsampleLocationSubPixelBits = " << value.sampleLocationSubPixelBits << '\n';
+       s << "\tvariableSampleLocations = " << value.variableSampleLocations << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkMultisamplePropertiesEXT& value)
+{
+       s << "VkMultisamplePropertiesEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tmaxSampleLocationGridSize = " << value.maxSampleLocationGridSize << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT& value)
+{
+       s << "VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tadvancedBlendCoherentOperations = " << value.advancedBlendCoherentOperations << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT& value)
+{
+       s << "VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tadvancedBlendMaxColorAttachments = " << value.advancedBlendMaxColorAttachments << '\n';
+       s << "\tadvancedBlendIndependentBlend = " << value.advancedBlendIndependentBlend << '\n';
+       s << "\tadvancedBlendNonPremultipliedSrcColor = " << value.advancedBlendNonPremultipliedSrcColor << '\n';
+       s << "\tadvancedBlendNonPremultipliedDstColor = " << value.advancedBlendNonPremultipliedDstColor << '\n';
+       s << "\tadvancedBlendCorrelatedOverlap = " << value.advancedBlendCorrelatedOverlap << '\n';
+       s << "\tadvancedBlendAllOperations = " << value.advancedBlendAllOperations << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPipelineColorBlendAdvancedStateCreateInfoEXT& value)
+{
+       s << "VkPipelineColorBlendAdvancedStateCreateInfoEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tsrcPremultiplied = " << value.srcPremultiplied << '\n';
+       s << "\tdstPremultiplied = " << value.dstPremultiplied << '\n';
+       s << "\tblendOverlap = " << value.blendOverlap << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkDrmFormatModifierPropertiesEXT& value)
+{
+       s << "VkDrmFormatModifierPropertiesEXT = {\n";
+       s << "\tdrmFormatModifier = " << value.drmFormatModifier << '\n';
+       s << "\tdrmFormatModifierPlaneCount = " << value.drmFormatModifierPlaneCount << '\n';
+       s << "\tdrmFormatModifierTilingFeatures = " << getFormatFeatureFlagsStr(value.drmFormatModifierTilingFeatures) << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkDrmFormatModifierPropertiesListEXT& value)
+{
+       s << "VkDrmFormatModifierPropertiesListEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tdrmFormatModifierCount = " << value.drmFormatModifierCount << '\n';
+       s << "\tpDrmFormatModifierProperties = " << value.pDrmFormatModifierProperties << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceImageDrmFormatModifierInfoEXT& value)
+{
+       s << "VkPhysicalDeviceImageDrmFormatModifierInfoEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tdrmFormatModifier = " << value.drmFormatModifier << '\n';
+       s << "\tsharingMode = " << value.sharingMode << '\n';
+       s << "\tqueueFamilyIndexCount = " << value.queueFamilyIndexCount << '\n';
+       s << "\tpQueueFamilyIndices = " << value.pQueueFamilyIndices << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkImageDrmFormatModifierListCreateInfoEXT& value)
+{
+       s << "VkImageDrmFormatModifierListCreateInfoEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tdrmFormatModifierCount = " << value.drmFormatModifierCount << '\n';
+       s << "\tpDrmFormatModifiers = " << value.pDrmFormatModifiers << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkImageDrmFormatModifierExplicitCreateInfoEXT& value)
+{
+       s << "VkImageDrmFormatModifierExplicitCreateInfoEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tdrmFormatModifier = " << value.drmFormatModifier << '\n';
+       s << "\tdrmFormatModifierPlaneCount = " << value.drmFormatModifierPlaneCount << '\n';
+       s << "\tpPlaneLayouts = " << value.pPlaneLayouts << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkImageDrmFormatModifierPropertiesEXT& value)
+{
+       s << "VkImageDrmFormatModifierPropertiesEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tdrmFormatModifier = " << value.drmFormatModifier << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceImageViewImageFormatInfoEXT& value)
+{
+       s << "VkPhysicalDeviceImageViewImageFormatInfoEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\timageViewType = " << value.imageViewType << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkFilterCubicImageViewImageFormatPropertiesEXT& value)
+{
+       s << "VkFilterCubicImageViewImageFormatPropertiesEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tfilterCubic = " << value.filterCubic << '\n';
+       s << "\tfilterCubicMinmax = " << value.filterCubicMinmax << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkDeviceQueueGlobalPriorityCreateInfoEXT& value)
+{
+       s << "VkDeviceQueueGlobalPriorityCreateInfoEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tglobalPriority = " << value.globalPriority << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkImportMemoryHostPointerInfoEXT& value)
+{
+       s << "VkImportMemoryHostPointerInfoEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\thandleType = " << value.handleType << '\n';
+       s << "\tpHostPointer = " << value.pHostPointer << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkMemoryHostPointerPropertiesEXT& value)
+{
+       s << "VkMemoryHostPointerPropertiesEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tmemoryTypeBits = " << value.memoryTypeBits << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceExternalMemoryHostPropertiesEXT& value)
+{
+       s << "VkPhysicalDeviceExternalMemoryHostPropertiesEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tminImportedHostPointerAlignment = " << value.minImportedHostPointerAlignment << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkCalibratedTimestampInfoEXT& value)
+{
+       s << "VkCalibratedTimestampInfoEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\ttimeDomain = " << value.timeDomain << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT& value)
+{
+       s << "VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tmaxVertexAttribDivisor = " << value.maxVertexAttribDivisor << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkVertexInputBindingDivisorDescriptionEXT& value)
+{
+       s << "VkVertexInputBindingDivisorDescriptionEXT = {\n";
+       s << "\tbinding = " << value.binding << '\n';
+       s << "\tdivisor = " << value.divisor << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPipelineVertexInputDivisorStateCreateInfoEXT& value)
+{
+       s << "VkPipelineVertexInputDivisorStateCreateInfoEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tvertexBindingDivisorCount = " << value.vertexBindingDivisorCount << '\n';
+       s << "\tpVertexBindingDivisors = " << value.pVertexBindingDivisors << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT& value)
+{
+       s << "VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tvertexAttributeInstanceRateDivisor = " << value.vertexAttributeInstanceRateDivisor << '\n';
+       s << "\tvertexAttributeInstanceRateZeroDivisor = " << value.vertexAttributeInstanceRateZeroDivisor << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDevicePCIBusInfoPropertiesEXT& value)
+{
+       s << "VkPhysicalDevicePCIBusInfoPropertiesEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tpciDomain = " << value.pciDomain << '\n';
+       s << "\tpciBus = " << value.pciBus << '\n';
+       s << "\tpciDevice = " << value.pciDevice << '\n';
+       s << "\tpciFunction = " << value.pciFunction << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceSubgroupSizeControlFeaturesEXT& value)
+{
+       s << "VkPhysicalDeviceSubgroupSizeControlFeaturesEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tsubgroupSizeControl = " << value.subgroupSizeControl << '\n';
+       s << "\tcomputeFullSubgroups = " << value.computeFullSubgroups << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceSubgroupSizeControlPropertiesEXT& value)
+{
+       s << "VkPhysicalDeviceSubgroupSizeControlPropertiesEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tminSubgroupSize = " << value.minSubgroupSize << '\n';
+       s << "\tmaxSubgroupSize = " << value.maxSubgroupSize << '\n';
+       s << "\tmaxComputeWorkgroupSubgroups = " << value.maxComputeWorkgroupSubgroups << '\n';
+       s << "\trequiredSubgroupSizeStages = " << getShaderStageFlagsStr(value.requiredSubgroupSizeStages) << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT& value)
+{
+       s << "VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\trequiredSubgroupSize = " << value.requiredSubgroupSize << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT& value)
+{
+       s << "VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tshaderImageInt64Atomics = " << value.shaderImageInt64Atomics << '\n';
+       s << "\tsparseImageInt64Atomics = " << value.sparseImageInt64Atomics << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceMemoryBudgetPropertiesEXT& value)
+{
+       s << "VkPhysicalDeviceMemoryBudgetPropertiesEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\theapBudget = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.heapBudget), DE_ARRAY_END(value.heapBudget)) << '\n';
+       s << "\theapUsage = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.heapUsage), DE_ARRAY_END(value.heapUsage)) << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT& value)
+{
+       s << "VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tfragmentShaderSampleInterlock = " << value.fragmentShaderSampleInterlock << '\n';
+       s << "\tfragmentShaderPixelInterlock = " << value.fragmentShaderPixelInterlock << '\n';
+       s << "\tfragmentShaderShadingRateInterlock = " << value.fragmentShaderShadingRateInterlock << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceYcbcrImageArraysFeaturesEXT& value)
+{
+       s << "VkPhysicalDeviceYcbcrImageArraysFeaturesEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tycbcrImageArrays = " << value.ycbcrImageArrays << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkHeadlessSurfaceCreateInfoEXT& value)
+{
+       s << "VkHeadlessSurfaceCreateInfoEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tflags = " << getHeadlessSurfaceCreateFlagsEXTStr(value.flags) << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceLineRasterizationFeaturesEXT& value)
+{
+       s << "VkPhysicalDeviceLineRasterizationFeaturesEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\trectangularLines = " << value.rectangularLines << '\n';
+       s << "\tbresenhamLines = " << value.bresenhamLines << '\n';
+       s << "\tsmoothLines = " << value.smoothLines << '\n';
+       s << "\tstippledRectangularLines = " << value.stippledRectangularLines << '\n';
+       s << "\tstippledBresenhamLines = " << value.stippledBresenhamLines << '\n';
+       s << "\tstippledSmoothLines = " << value.stippledSmoothLines << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceLineRasterizationPropertiesEXT& value)
+{
+       s << "VkPhysicalDeviceLineRasterizationPropertiesEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tlineSubPixelPrecisionBits = " << value.lineSubPixelPrecisionBits << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPipelineRasterizationLineStateCreateInfoEXT& value)
+{
+       s << "VkPipelineRasterizationLineStateCreateInfoEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tlineRasterizationMode = " << value.lineRasterizationMode << '\n';
+       s << "\tstippledLineEnable = " << value.stippledLineEnable << '\n';
+       s << "\tlineStippleFactor = " << value.lineStippleFactor << '\n';
+       s << "\tlineStipplePattern = " << value.lineStipplePattern << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceShaderAtomicFloatFeaturesEXT& value)
+{
+       s << "VkPhysicalDeviceShaderAtomicFloatFeaturesEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tshaderBufferFloat32Atomics = " << value.shaderBufferFloat32Atomics << '\n';
+       s << "\tshaderBufferFloat32AtomicAdd = " << value.shaderBufferFloat32AtomicAdd << '\n';
+       s << "\tshaderBufferFloat64Atomics = " << value.shaderBufferFloat64Atomics << '\n';
+       s << "\tshaderBufferFloat64AtomicAdd = " << value.shaderBufferFloat64AtomicAdd << '\n';
+       s << "\tshaderSharedFloat32Atomics = " << value.shaderSharedFloat32Atomics << '\n';
+       s << "\tshaderSharedFloat32AtomicAdd = " << value.shaderSharedFloat32AtomicAdd << '\n';
+       s << "\tshaderSharedFloat64Atomics = " << value.shaderSharedFloat64Atomics << '\n';
+       s << "\tshaderSharedFloat64AtomicAdd = " << value.shaderSharedFloat64AtomicAdd << '\n';
+       s << "\tshaderImageFloat32Atomics = " << value.shaderImageFloat32Atomics << '\n';
+       s << "\tshaderImageFloat32AtomicAdd = " << value.shaderImageFloat32AtomicAdd << '\n';
+       s << "\tsparseImageFloat32Atomics = " << value.sparseImageFloat32Atomics << '\n';
+       s << "\tsparseImageFloat32AtomicAdd = " << value.sparseImageFloat32AtomicAdd << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceIndexTypeUint8FeaturesEXT& value)
+{
+       s << "VkPhysicalDeviceIndexTypeUint8FeaturesEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tindexTypeUint8 = " << value.indexTypeUint8 << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceExtendedDynamicStateFeaturesEXT& value)
+{
+       s << "VkPhysicalDeviceExtendedDynamicStateFeaturesEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\textendedDynamicState = " << value.extendedDynamicState << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT& value)
+{
+       s << "VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tshaderDemoteToHelperInvocation = " << value.shaderDemoteToHelperInvocation << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT& value)
+{
+       s << "VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\ttexelBufferAlignment = " << value.texelBufferAlignment << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT& value)
+{
+       s << "VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tstorageTexelBufferOffsetAlignmentBytes = " << value.storageTexelBufferOffsetAlignmentBytes << '\n';
+       s << "\tstorageTexelBufferOffsetSingleTexelAlignment = " << value.storageTexelBufferOffsetSingleTexelAlignment << '\n';
+       s << "\tuniformTexelBufferOffsetAlignmentBytes = " << value.uniformTexelBufferOffsetAlignmentBytes << '\n';
+       s << "\tuniformTexelBufferOffsetSingleTexelAlignment = " << value.uniformTexelBufferOffsetSingleTexelAlignment << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceRobustness2FeaturesEXT& value)
+{
+       s << "VkPhysicalDeviceRobustness2FeaturesEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\trobustBufferAccess2 = " << value.robustBufferAccess2 << '\n';
+       s << "\trobustImageAccess2 = " << value.robustImageAccess2 << '\n';
+       s << "\tnullDescriptor = " << value.nullDescriptor << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceRobustness2PropertiesEXT& value)
+{
+       s << "VkPhysicalDeviceRobustness2PropertiesEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\trobustStorageBufferAccessSizeAlignment = " << value.robustStorageBufferAccessSizeAlignment << '\n';
+       s << "\trobustUniformBufferAccessSizeAlignment = " << value.robustUniformBufferAccessSizeAlignment << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkSamplerCustomBorderColorCreateInfoEXT& value)
+{
+       s << "VkSamplerCustomBorderColorCreateInfoEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tcustomBorderColor = " << value.customBorderColor << '\n';
+       s << "\tformat = " << value.format << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceCustomBorderColorPropertiesEXT& value)
+{
+       s << "VkPhysicalDeviceCustomBorderColorPropertiesEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tmaxCustomBorderColorSamplers = " << value.maxCustomBorderColorSamplers << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceCustomBorderColorFeaturesEXT& value)
+{
+       s << "VkPhysicalDeviceCustomBorderColorFeaturesEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tcustomBorderColors = " << value.customBorderColors << '\n';
+       s << "\tcustomBorderColorWithoutFormat = " << value.customBorderColorWithoutFormat << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceImageRobustnessFeaturesEXT& value)
+{
+       s << "VkPhysicalDeviceImageRobustnessFeaturesEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\trobustImageAccess = " << value.robustImageAccess << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDevice4444FormatsFeaturesEXT& value)
+{
+       s << "VkPhysicalDevice4444FormatsFeaturesEXT = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tformatA4R4G4B4 = " << value.formatA4R4G4B4 << '\n';
+       s << "\tformatA4B4G4R4 = " << value.formatA4B4G4R4 << '\n';
+       s << '}';
+       return s;
+}
diff --git a/external/vulkancts/framework/vulkan/generated/vulkansc/vkStructTypes.inl b/external/vulkancts/framework/vulkan/generated/vulkansc/vkStructTypes.inl
new file mode 100644 (file)
index 0000000..9629b01
--- /dev/null
@@ -0,0 +1,3582 @@
+/* WARNING: This is auto-generated file. Do not modify, since changes will
+ * be lost! Modify the generating script instead.
+ */
+struct VkExtent2D
+{
+       deUint32        width;
+       deUint32        height;
+};
+
+struct VkExtent3D
+{
+       deUint32        width;
+       deUint32        height;
+       deUint32        depth;
+};
+
+struct VkOffset2D
+{
+       deInt32 x;
+       deInt32 y;
+};
+
+struct VkOffset3D
+{
+       deInt32 x;
+       deInt32 y;
+       deInt32 z;
+};
+
+struct VkRect2D
+{
+       VkOffset2D      offset;
+       VkExtent2D      extent;
+};
+
+struct VkBaseInStructure
+{
+       VkStructureType                                 sType;
+       const struct VkBaseInStructure* pNext;
+};
+
+struct VkBaseOutStructure
+{
+       VkStructureType                         sType;
+       struct VkBaseOutStructure*      pNext;
+};
+
+struct VkBufferMemoryBarrier
+{
+       VkStructureType sType;
+       const void*             pNext;
+       VkAccessFlags   srcAccessMask;
+       VkAccessFlags   dstAccessMask;
+       deUint32                srcQueueFamilyIndex;
+       deUint32                dstQueueFamilyIndex;
+       VkBuffer                buffer;
+       VkDeviceSize    offset;
+       VkDeviceSize    size;
+};
+
+struct VkDispatchIndirectCommand
+{
+       deUint32        x;
+       deUint32        y;
+       deUint32        z;
+};
+
+struct VkDrawIndexedIndirectCommand
+{
+       deUint32        indexCount;
+       deUint32        instanceCount;
+       deUint32        firstIndex;
+       deInt32         vertexOffset;
+       deUint32        firstInstance;
+};
+
+struct VkDrawIndirectCommand
+{
+       deUint32        vertexCount;
+       deUint32        instanceCount;
+       deUint32        firstVertex;
+       deUint32        firstInstance;
+};
+
+struct VkImageSubresourceRange
+{
+       VkImageAspectFlags      aspectMask;
+       deUint32                        baseMipLevel;
+       deUint32                        levelCount;
+       deUint32                        baseArrayLayer;
+       deUint32                        layerCount;
+};
+
+struct VkImageMemoryBarrier
+{
+       VkStructureType                 sType;
+       const void*                             pNext;
+       VkAccessFlags                   srcAccessMask;
+       VkAccessFlags                   dstAccessMask;
+       VkImageLayout                   oldLayout;
+       VkImageLayout                   newLayout;
+       deUint32                                srcQueueFamilyIndex;
+       deUint32                                dstQueueFamilyIndex;
+       VkImage                                 image;
+       VkImageSubresourceRange subresourceRange;
+};
+
+struct VkMemoryBarrier
+{
+       VkStructureType sType;
+       const void*             pNext;
+       VkAccessFlags   srcAccessMask;
+       VkAccessFlags   dstAccessMask;
+};
+
+struct VkAllocationCallbacks
+{
+       void*                                                                   pUserData;
+       PFN_vkAllocationFunction                                pfnAllocation;
+       PFN_vkReallocationFunction                              pfnReallocation;
+       PFN_vkFreeFunction                                              pfnFree;
+       PFN_vkInternalAllocationNotification    pfnInternalAllocation;
+       PFN_vkInternalFreeNotification                  pfnInternalFree;
+};
+
+struct VkApplicationInfo
+{
+       VkStructureType sType;
+       const void*             pNext;
+       const char*             pApplicationName;
+       deUint32                applicationVersion;
+       const char*             pEngineName;
+       deUint32                engineVersion;
+       deUint32                apiVersion;
+};
+
+struct VkFormatProperties
+{
+       VkFormatFeatureFlags    linearTilingFeatures;
+       VkFormatFeatureFlags    optimalTilingFeatures;
+       VkFormatFeatureFlags    bufferFeatures;
+};
+
+struct VkImageFormatProperties
+{
+       VkExtent3D                      maxExtent;
+       deUint32                        maxMipLevels;
+       deUint32                        maxArrayLayers;
+       VkSampleCountFlags      sampleCounts;
+       VkDeviceSize            maxResourceSize;
+};
+
+struct VkInstanceCreateInfo
+{
+       VkStructureType                         sType;
+       const void*                                     pNext;
+       VkInstanceCreateFlags           flags;
+       const VkApplicationInfo*        pApplicationInfo;
+       deUint32                                        enabledLayerCount;
+       const char* const*                      ppEnabledLayerNames;
+       deUint32                                        enabledExtensionCount;
+       const char* const*                      ppEnabledExtensionNames;
+};
+
+struct VkMemoryHeap
+{
+       VkDeviceSize            size;
+       VkMemoryHeapFlags       flags;
+};
+
+struct VkMemoryType
+{
+       VkMemoryPropertyFlags   propertyFlags;
+       deUint32                                heapIndex;
+};
+
+struct VkPhysicalDeviceFeatures
+{
+       VkBool32        robustBufferAccess;
+       VkBool32        fullDrawIndexUint32;
+       VkBool32        imageCubeArray;
+       VkBool32        independentBlend;
+       VkBool32        geometryShader;
+       VkBool32        tessellationShader;
+       VkBool32        sampleRateShading;
+       VkBool32        dualSrcBlend;
+       VkBool32        logicOp;
+       VkBool32        multiDrawIndirect;
+       VkBool32        drawIndirectFirstInstance;
+       VkBool32        depthClamp;
+       VkBool32        depthBiasClamp;
+       VkBool32        fillModeNonSolid;
+       VkBool32        depthBounds;
+       VkBool32        wideLines;
+       VkBool32        largePoints;
+       VkBool32        alphaToOne;
+       VkBool32        multiViewport;
+       VkBool32        samplerAnisotropy;
+       VkBool32        textureCompressionETC2;
+       VkBool32        textureCompressionASTC_LDR;
+       VkBool32        textureCompressionBC;
+       VkBool32        occlusionQueryPrecise;
+       VkBool32        pipelineStatisticsQuery;
+       VkBool32        vertexPipelineStoresAndAtomics;
+       VkBool32        fragmentStoresAndAtomics;
+       VkBool32        shaderTessellationAndGeometryPointSize;
+       VkBool32        shaderImageGatherExtended;
+       VkBool32        shaderStorageImageExtendedFormats;
+       VkBool32        shaderStorageImageMultisample;
+       VkBool32        shaderStorageImageReadWithoutFormat;
+       VkBool32        shaderStorageImageWriteWithoutFormat;
+       VkBool32        shaderUniformBufferArrayDynamicIndexing;
+       VkBool32        shaderSampledImageArrayDynamicIndexing;
+       VkBool32        shaderStorageBufferArrayDynamicIndexing;
+       VkBool32        shaderStorageImageArrayDynamicIndexing;
+       VkBool32        shaderClipDistance;
+       VkBool32        shaderCullDistance;
+       VkBool32        shaderFloat64;
+       VkBool32        shaderInt64;
+       VkBool32        shaderInt16;
+       VkBool32        shaderResourceResidency;
+       VkBool32        shaderResourceMinLod;
+       VkBool32        sparseBinding;
+       VkBool32        sparseResidencyBuffer;
+       VkBool32        sparseResidencyImage2D;
+       VkBool32        sparseResidencyImage3D;
+       VkBool32        sparseResidency2Samples;
+       VkBool32        sparseResidency4Samples;
+       VkBool32        sparseResidency8Samples;
+       VkBool32        sparseResidency16Samples;
+       VkBool32        sparseResidencyAliased;
+       VkBool32        variableMultisampleRate;
+       VkBool32        inheritedQueries;
+};
+
+struct VkPhysicalDeviceLimits
+{
+       deUint32                        maxImageDimension1D;
+       deUint32                        maxImageDimension2D;
+       deUint32                        maxImageDimension3D;
+       deUint32                        maxImageDimensionCube;
+       deUint32                        maxImageArrayLayers;
+       deUint32                        maxTexelBufferElements;
+       deUint32                        maxUniformBufferRange;
+       deUint32                        maxStorageBufferRange;
+       deUint32                        maxPushConstantsSize;
+       deUint32                        maxMemoryAllocationCount;
+       deUint32                        maxSamplerAllocationCount;
+       VkDeviceSize            bufferImageGranularity;
+       VkDeviceSize            sparseAddressSpaceSize;
+       deUint32                        maxBoundDescriptorSets;
+       deUint32                        maxPerStageDescriptorSamplers;
+       deUint32                        maxPerStageDescriptorUniformBuffers;
+       deUint32                        maxPerStageDescriptorStorageBuffers;
+       deUint32                        maxPerStageDescriptorSampledImages;
+       deUint32                        maxPerStageDescriptorStorageImages;
+       deUint32                        maxPerStageDescriptorInputAttachments;
+       deUint32                        maxPerStageResources;
+       deUint32                        maxDescriptorSetSamplers;
+       deUint32                        maxDescriptorSetUniformBuffers;
+       deUint32                        maxDescriptorSetUniformBuffersDynamic;
+       deUint32                        maxDescriptorSetStorageBuffers;
+       deUint32                        maxDescriptorSetStorageBuffersDynamic;
+       deUint32                        maxDescriptorSetSampledImages;
+       deUint32                        maxDescriptorSetStorageImages;
+       deUint32                        maxDescriptorSetInputAttachments;
+       deUint32                        maxVertexInputAttributes;
+       deUint32                        maxVertexInputBindings;
+       deUint32                        maxVertexInputAttributeOffset;
+       deUint32                        maxVertexInputBindingStride;
+       deUint32                        maxVertexOutputComponents;
+       deUint32                        maxTessellationGenerationLevel;
+       deUint32                        maxTessellationPatchSize;
+       deUint32                        maxTessellationControlPerVertexInputComponents;
+       deUint32                        maxTessellationControlPerVertexOutputComponents;
+       deUint32                        maxTessellationControlPerPatchOutputComponents;
+       deUint32                        maxTessellationControlTotalOutputComponents;
+       deUint32                        maxTessellationEvaluationInputComponents;
+       deUint32                        maxTessellationEvaluationOutputComponents;
+       deUint32                        maxGeometryShaderInvocations;
+       deUint32                        maxGeometryInputComponents;
+       deUint32                        maxGeometryOutputComponents;
+       deUint32                        maxGeometryOutputVertices;
+       deUint32                        maxGeometryTotalOutputComponents;
+       deUint32                        maxFragmentInputComponents;
+       deUint32                        maxFragmentOutputAttachments;
+       deUint32                        maxFragmentDualSrcAttachments;
+       deUint32                        maxFragmentCombinedOutputResources;
+       deUint32                        maxComputeSharedMemorySize;
+       deUint32                        maxComputeWorkGroupCount[3];
+       deUint32                        maxComputeWorkGroupInvocations;
+       deUint32                        maxComputeWorkGroupSize[3];
+       deUint32                        subPixelPrecisionBits;
+       deUint32                        subTexelPrecisionBits;
+       deUint32                        mipmapPrecisionBits;
+       deUint32                        maxDrawIndexedIndexValue;
+       deUint32                        maxDrawIndirectCount;
+       float                           maxSamplerLodBias;
+       float                           maxSamplerAnisotropy;
+       deUint32                        maxViewports;
+       deUint32                        maxViewportDimensions[2];
+       float                           viewportBoundsRange[2];
+       deUint32                        viewportSubPixelBits;
+       deUintptr                       minMemoryMapAlignment;
+       VkDeviceSize            minTexelBufferOffsetAlignment;
+       VkDeviceSize            minUniformBufferOffsetAlignment;
+       VkDeviceSize            minStorageBufferOffsetAlignment;
+       deInt32                         minTexelOffset;
+       deUint32                        maxTexelOffset;
+       deInt32                         minTexelGatherOffset;
+       deUint32                        maxTexelGatherOffset;
+       float                           minInterpolationOffset;
+       float                           maxInterpolationOffset;
+       deUint32                        subPixelInterpolationOffsetBits;
+       deUint32                        maxFramebufferWidth;
+       deUint32                        maxFramebufferHeight;
+       deUint32                        maxFramebufferLayers;
+       VkSampleCountFlags      framebufferColorSampleCounts;
+       VkSampleCountFlags      framebufferDepthSampleCounts;
+       VkSampleCountFlags      framebufferStencilSampleCounts;
+       VkSampleCountFlags      framebufferNoAttachmentsSampleCounts;
+       deUint32                        maxColorAttachments;
+       VkSampleCountFlags      sampledImageColorSampleCounts;
+       VkSampleCountFlags      sampledImageIntegerSampleCounts;
+       VkSampleCountFlags      sampledImageDepthSampleCounts;
+       VkSampleCountFlags      sampledImageStencilSampleCounts;
+       VkSampleCountFlags      storageImageSampleCounts;
+       deUint32                        maxSampleMaskWords;
+       VkBool32                        timestampComputeAndGraphics;
+       float                           timestampPeriod;
+       deUint32                        maxClipDistances;
+       deUint32                        maxCullDistances;
+       deUint32                        maxCombinedClipAndCullDistances;
+       deUint32                        discreteQueuePriorities;
+       float                           pointSizeRange[2];
+       float                           lineWidthRange[2];
+       float                           pointSizeGranularity;
+       float                           lineWidthGranularity;
+       VkBool32                        strictLines;
+       VkBool32                        standardSampleLocations;
+       VkDeviceSize            optimalBufferCopyOffsetAlignment;
+       VkDeviceSize            optimalBufferCopyRowPitchAlignment;
+       VkDeviceSize            nonCoherentAtomSize;
+};
+
+struct VkPhysicalDeviceMemoryProperties
+{
+       deUint32                memoryTypeCount;
+       VkMemoryType    memoryTypes[VK_MAX_MEMORY_TYPES];
+       deUint32                memoryHeapCount;
+       VkMemoryHeap    memoryHeaps[VK_MAX_MEMORY_HEAPS];
+};
+
+struct VkPhysicalDeviceSparseProperties
+{
+       VkBool32        residencyStandard2DBlockShape;
+       VkBool32        residencyStandard2DMultisampleBlockShape;
+       VkBool32        residencyStandard3DBlockShape;
+       VkBool32        residencyAlignedMipSize;
+       VkBool32        residencyNonResidentStrict;
+};
+
+struct VkPhysicalDeviceProperties
+{
+       deUint32                                                        apiVersion;
+       deUint32                                                        driverVersion;
+       deUint32                                                        vendorID;
+       deUint32                                                        deviceID;
+       VkPhysicalDeviceType                            deviceType;
+       char                                                            deviceName[VK_MAX_PHYSICAL_DEVICE_NAME_SIZE];
+       deUint8                                                         pipelineCacheUUID[VK_UUID_SIZE];
+       VkPhysicalDeviceLimits                          limits;
+       VkPhysicalDeviceSparseProperties        sparseProperties;
+};
+
+struct VkQueueFamilyProperties
+{
+       VkQueueFlags    queueFlags;
+       deUint32                queueCount;
+       deUint32                timestampValidBits;
+       VkExtent3D              minImageTransferGranularity;
+};
+
+struct VkDeviceQueueCreateInfo
+{
+       VkStructureType                         sType;
+       const void*                                     pNext;
+       VkDeviceQueueCreateFlags        flags;
+       deUint32                                        queueFamilyIndex;
+       deUint32                                        queueCount;
+       const float*                            pQueuePriorities;
+};
+
+struct VkDeviceCreateInfo
+{
+       VkStructureType                                 sType;
+       const void*                                             pNext;
+       VkDeviceCreateFlags                             flags;
+       deUint32                                                queueCreateInfoCount;
+       const VkDeviceQueueCreateInfo*  pQueueCreateInfos;
+       deUint32                                                enabledLayerCount;
+       const char* const*                              ppEnabledLayerNames;
+       deUint32                                                enabledExtensionCount;
+       const char* const*                              ppEnabledExtensionNames;
+       const VkPhysicalDeviceFeatures* pEnabledFeatures;
+};
+
+struct VkExtensionProperties
+{
+       char            extensionName[VK_MAX_EXTENSION_NAME_SIZE];
+       deUint32        specVersion;
+};
+
+struct VkLayerProperties
+{
+       char            layerName[VK_MAX_EXTENSION_NAME_SIZE];
+       deUint32        specVersion;
+       deUint32        implementationVersion;
+       char            description[VK_MAX_DESCRIPTION_SIZE];
+};
+
+struct VkSubmitInfo
+{
+       VkStructureType                         sType;
+       const void*                                     pNext;
+       deUint32                                        waitSemaphoreCount;
+       const VkSemaphore*                      pWaitSemaphores;
+       const VkPipelineStageFlags*     pWaitDstStageMask;
+       deUint32                                        commandBufferCount;
+       const VkCommandBuffer*          pCommandBuffers;
+       deUint32                                        signalSemaphoreCount;
+       const VkSemaphore*                      pSignalSemaphores;
+};
+
+struct VkMappedMemoryRange
+{
+       VkStructureType sType;
+       const void*             pNext;
+       VkDeviceMemory  memory;
+       VkDeviceSize    offset;
+       VkDeviceSize    size;
+};
+
+struct VkMemoryAllocateInfo
+{
+       VkStructureType sType;
+       const void*             pNext;
+       VkDeviceSize    allocationSize;
+       deUint32                memoryTypeIndex;
+};
+
+struct VkMemoryRequirements
+{
+       VkDeviceSize    size;
+       VkDeviceSize    alignment;
+       deUint32                memoryTypeBits;
+};
+
+struct VkSparseMemoryBind
+{
+       VkDeviceSize                    resourceOffset;
+       VkDeviceSize                    size;
+       VkDeviceMemory                  memory;
+       VkDeviceSize                    memoryOffset;
+       VkSparseMemoryBindFlags flags;
+};
+
+struct VkSparseBufferMemoryBindInfo
+{
+       VkBuffer                                        buffer;
+       deUint32                                        bindCount;
+       const VkSparseMemoryBind*       pBinds;
+};
+
+struct VkSparseImageOpaqueMemoryBindInfo
+{
+       VkImage                                         image;
+       deUint32                                        bindCount;
+       const VkSparseMemoryBind*       pBinds;
+};
+
+struct VkImageSubresource
+{
+       VkImageAspectFlags      aspectMask;
+       deUint32                        mipLevel;
+       deUint32                        arrayLayer;
+};
+
+struct VkSparseImageMemoryBind
+{
+       VkImageSubresource              subresource;
+       VkOffset3D                              offset;
+       VkExtent3D                              extent;
+       VkDeviceMemory                  memory;
+       VkDeviceSize                    memoryOffset;
+       VkSparseMemoryBindFlags flags;
+};
+
+struct VkSparseImageMemoryBindInfo
+{
+       VkImage                                                 image;
+       deUint32                                                bindCount;
+       const VkSparseImageMemoryBind*  pBinds;
+};
+
+struct VkBindSparseInfo
+{
+       VkStructureType                                                         sType;
+       const void*                                                                     pNext;
+       deUint32                                                                        waitSemaphoreCount;
+       const VkSemaphore*                                                      pWaitSemaphores;
+       deUint32                                                                        bufferBindCount;
+       const VkSparseBufferMemoryBindInfo*                     pBufferBinds;
+       deUint32                                                                        imageOpaqueBindCount;
+       const VkSparseImageOpaqueMemoryBindInfo*        pImageOpaqueBinds;
+       deUint32                                                                        imageBindCount;
+       const VkSparseImageMemoryBindInfo*                      pImageBinds;
+       deUint32                                                                        signalSemaphoreCount;
+       const VkSemaphore*                                                      pSignalSemaphores;
+};
+
+struct VkSparseImageFormatProperties
+{
+       VkImageAspectFlags                      aspectMask;
+       VkExtent3D                                      imageGranularity;
+       VkSparseImageFormatFlags        flags;
+};
+
+struct VkSparseImageMemoryRequirements
+{
+       VkSparseImageFormatProperties   formatProperties;
+       deUint32                                                imageMipTailFirstLod;
+       VkDeviceSize                                    imageMipTailSize;
+       VkDeviceSize                                    imageMipTailOffset;
+       VkDeviceSize                                    imageMipTailStride;
+};
+
+struct VkFenceCreateInfo
+{
+       VkStructureType         sType;
+       const void*                     pNext;
+       VkFenceCreateFlags      flags;
+};
+
+struct VkSemaphoreCreateInfo
+{
+       VkStructureType                 sType;
+       const void*                             pNext;
+       VkSemaphoreCreateFlags  flags;
+};
+
+struct VkEventCreateInfo
+{
+       VkStructureType         sType;
+       const void*                     pNext;
+       VkEventCreateFlags      flags;
+};
+
+struct VkQueryPoolCreateInfo
+{
+       VkStructureType                                 sType;
+       const void*                                             pNext;
+       VkQueryPoolCreateFlags                  flags;
+       VkQueryType                                             queryType;
+       deUint32                                                queryCount;
+       VkQueryPipelineStatisticFlags   pipelineStatistics;
+};
+
+struct VkBufferCreateInfo
+{
+       VkStructureType         sType;
+       const void*                     pNext;
+       VkBufferCreateFlags     flags;
+       VkDeviceSize            size;
+       VkBufferUsageFlags      usage;
+       VkSharingMode           sharingMode;
+       deUint32                        queueFamilyIndexCount;
+       const deUint32*         pQueueFamilyIndices;
+};
+
+struct VkBufferViewCreateInfo
+{
+       VkStructureType                 sType;
+       const void*                             pNext;
+       VkBufferViewCreateFlags flags;
+       VkBuffer                                buffer;
+       VkFormat                                format;
+       VkDeviceSize                    offset;
+       VkDeviceSize                    range;
+};
+
+struct VkImageCreateInfo
+{
+       VkStructureType                 sType;
+       const void*                             pNext;
+       VkImageCreateFlags              flags;
+       VkImageType                             imageType;
+       VkFormat                                format;
+       VkExtent3D                              extent;
+       deUint32                                mipLevels;
+       deUint32                                arrayLayers;
+       VkSampleCountFlagBits   samples;
+       VkImageTiling                   tiling;
+       VkImageUsageFlags               usage;
+       VkSharingMode                   sharingMode;
+       deUint32                                queueFamilyIndexCount;
+       const deUint32*                 pQueueFamilyIndices;
+       VkImageLayout                   initialLayout;
+};
+
+struct VkSubresourceLayout
+{
+       VkDeviceSize    offset;
+       VkDeviceSize    size;
+       VkDeviceSize    rowPitch;
+       VkDeviceSize    arrayPitch;
+       VkDeviceSize    depthPitch;
+};
+
+struct VkComponentMapping
+{
+       VkComponentSwizzle      r;
+       VkComponentSwizzle      g;
+       VkComponentSwizzle      b;
+       VkComponentSwizzle      a;
+};
+
+struct VkImageViewCreateInfo
+{
+       VkStructureType                 sType;
+       const void*                             pNext;
+       VkImageViewCreateFlags  flags;
+       VkImage                                 image;
+       VkImageViewType                 viewType;
+       VkFormat                                format;
+       VkComponentMapping              components;
+       VkImageSubresourceRange subresourceRange;
+};
+
+struct VkPipelineCacheCreateInfo
+{
+       VkStructureType                         sType;
+       const void*                                     pNext;
+       VkPipelineCacheCreateFlags      flags;
+       deUintptr                                       initialDataSize;
+       const void*                                     pInitialData;
+};
+
+struct VkSpecializationMapEntry
+{
+       deUint32        constantID;
+       deUint32        offset;
+       deUintptr       size;
+};
+
+struct VkSpecializationInfo
+{
+       deUint32                                                mapEntryCount;
+       const VkSpecializationMapEntry* pMapEntries;
+       deUintptr                                               dataSize;
+       const void*                                             pData;
+};
+
+struct VkPipelineShaderStageCreateInfo
+{
+       VkStructureType                                         sType;
+       const void*                                                     pNext;
+       VkPipelineShaderStageCreateFlags        flags;
+       VkShaderStageFlagBits                           stage;
+       VkShaderModule                                          module;
+       const char*                                                     pName;
+       const VkSpecializationInfo*                     pSpecializationInfo;
+};
+
+struct VkComputePipelineCreateInfo
+{
+       VkStructureType                                 sType;
+       const void*                                             pNext;
+       VkPipelineCreateFlags                   flags;
+       VkPipelineShaderStageCreateInfo stage;
+       VkPipelineLayout                                layout;
+       VkPipeline                                              basePipelineHandle;
+       deInt32                                                 basePipelineIndex;
+};
+
+struct VkVertexInputBindingDescription
+{
+       deUint32                        binding;
+       deUint32                        stride;
+       VkVertexInputRate       inputRate;
+};
+
+struct VkVertexInputAttributeDescription
+{
+       deUint32        location;
+       deUint32        binding;
+       VkFormat        format;
+       deUint32        offset;
+};
+
+struct VkPipelineVertexInputStateCreateInfo
+{
+       VkStructureType                                                         sType;
+       const void*                                                                     pNext;
+       VkPipelineVertexInputStateCreateFlags           flags;
+       deUint32                                                                        vertexBindingDescriptionCount;
+       const VkVertexInputBindingDescription*          pVertexBindingDescriptions;
+       deUint32                                                                        vertexAttributeDescriptionCount;
+       const VkVertexInputAttributeDescription*        pVertexAttributeDescriptions;
+};
+
+struct VkPipelineInputAssemblyStateCreateInfo
+{
+       VkStructureType                                                 sType;
+       const void*                                                             pNext;
+       VkPipelineInputAssemblyStateCreateFlags flags;
+       VkPrimitiveTopology                                             topology;
+       VkBool32                                                                primitiveRestartEnable;
+};
+
+struct VkPipelineTessellationStateCreateInfo
+{
+       VkStructureType                                                 sType;
+       const void*                                                             pNext;
+       VkPipelineTessellationStateCreateFlags  flags;
+       deUint32                                                                patchControlPoints;
+};
+
+struct VkViewport
+{
+       float   x;
+       float   y;
+       float   width;
+       float   height;
+       float   minDepth;
+       float   maxDepth;
+};
+
+struct VkPipelineViewportStateCreateInfo
+{
+       VkStructureType                                         sType;
+       const void*                                                     pNext;
+       VkPipelineViewportStateCreateFlags      flags;
+       deUint32                                                        viewportCount;
+       const VkViewport*                                       pViewports;
+       deUint32                                                        scissorCount;
+       const VkRect2D*                                         pScissors;
+};
+
+struct VkPipelineRasterizationStateCreateInfo
+{
+       VkStructureType                                                 sType;
+       const void*                                                             pNext;
+       VkPipelineRasterizationStateCreateFlags flags;
+       VkBool32                                                                depthClampEnable;
+       VkBool32                                                                rasterizerDiscardEnable;
+       VkPolygonMode                                                   polygonMode;
+       VkCullModeFlags                                                 cullMode;
+       VkFrontFace                                                             frontFace;
+       VkBool32                                                                depthBiasEnable;
+       float                                                                   depthBiasConstantFactor;
+       float                                                                   depthBiasClamp;
+       float                                                                   depthBiasSlopeFactor;
+       float                                                                   lineWidth;
+};
+
+struct VkPipelineMultisampleStateCreateInfo
+{
+       VkStructureType                                                 sType;
+       const void*                                                             pNext;
+       VkPipelineMultisampleStateCreateFlags   flags;
+       VkSampleCountFlagBits                                   rasterizationSamples;
+       VkBool32                                                                sampleShadingEnable;
+       float                                                                   minSampleShading;
+       const VkSampleMask*                                             pSampleMask;
+       VkBool32                                                                alphaToCoverageEnable;
+       VkBool32                                                                alphaToOneEnable;
+};
+
+struct VkStencilOpState
+{
+       VkStencilOp     failOp;
+       VkStencilOp     passOp;
+       VkStencilOp     depthFailOp;
+       VkCompareOp     compareOp;
+       deUint32        compareMask;
+       deUint32        writeMask;
+       deUint32        reference;
+};
+
+struct VkPipelineDepthStencilStateCreateInfo
+{
+       VkStructureType                                                 sType;
+       const void*                                                             pNext;
+       VkPipelineDepthStencilStateCreateFlags  flags;
+       VkBool32                                                                depthTestEnable;
+       VkBool32                                                                depthWriteEnable;
+       VkCompareOp                                                             depthCompareOp;
+       VkBool32                                                                depthBoundsTestEnable;
+       VkBool32                                                                stencilTestEnable;
+       VkStencilOpState                                                front;
+       VkStencilOpState                                                back;
+       float                                                                   minDepthBounds;
+       float                                                                   maxDepthBounds;
+};
+
+struct VkPipelineColorBlendAttachmentState
+{
+       VkBool32                                blendEnable;
+       VkBlendFactor                   srcColorBlendFactor;
+       VkBlendFactor                   dstColorBlendFactor;
+       VkBlendOp                               colorBlendOp;
+       VkBlendFactor                   srcAlphaBlendFactor;
+       VkBlendFactor                   dstAlphaBlendFactor;
+       VkBlendOp                               alphaBlendOp;
+       VkColorComponentFlags   colorWriteMask;
+};
+
+struct VkPipelineColorBlendStateCreateInfo
+{
+       VkStructureType                                                         sType;
+       const void*                                                                     pNext;
+       VkPipelineColorBlendStateCreateFlags            flags;
+       VkBool32                                                                        logicOpEnable;
+       VkLogicOp                                                                       logicOp;
+       deUint32                                                                        attachmentCount;
+       const VkPipelineColorBlendAttachmentState*      pAttachments;
+       float                                                                           blendConstants[4];
+};
+
+struct VkPipelineDynamicStateCreateInfo
+{
+       VkStructureType                                         sType;
+       const void*                                                     pNext;
+       VkPipelineDynamicStateCreateFlags       flags;
+       deUint32                                                        dynamicStateCount;
+       const VkDynamicState*                           pDynamicStates;
+};
+
+struct VkGraphicsPipelineCreateInfo
+{
+       VkStructureType                                                                 sType;
+       const void*                                                                             pNext;
+       VkPipelineCreateFlags                                                   flags;
+       deUint32                                                                                stageCount;
+       const VkPipelineShaderStageCreateInfo*                  pStages;
+       const VkPipelineVertexInputStateCreateInfo*             pVertexInputState;
+       const VkPipelineInputAssemblyStateCreateInfo*   pInputAssemblyState;
+       const VkPipelineTessellationStateCreateInfo*    pTessellationState;
+       const VkPipelineViewportStateCreateInfo*                pViewportState;
+       const VkPipelineRasterizationStateCreateInfo*   pRasterizationState;
+       const VkPipelineMultisampleStateCreateInfo*             pMultisampleState;
+       const VkPipelineDepthStencilStateCreateInfo*    pDepthStencilState;
+       const VkPipelineColorBlendStateCreateInfo*              pColorBlendState;
+       const VkPipelineDynamicStateCreateInfo*                 pDynamicState;
+       VkPipelineLayout                                                                layout;
+       VkRenderPass                                                                    renderPass;
+       deUint32                                                                                subpass;
+       VkPipeline                                                                              basePipelineHandle;
+       deInt32                                                                                 basePipelineIndex;
+};
+
+struct VkPushConstantRange
+{
+       VkShaderStageFlags      stageFlags;
+       deUint32                        offset;
+       deUint32                        size;
+};
+
+struct VkPipelineLayoutCreateInfo
+{
+       VkStructureType                                 sType;
+       const void*                                             pNext;
+       VkPipelineLayoutCreateFlags             flags;
+       deUint32                                                setLayoutCount;
+       const VkDescriptorSetLayout*    pSetLayouts;
+       deUint32                                                pushConstantRangeCount;
+       const VkPushConstantRange*              pPushConstantRanges;
+};
+
+struct VkSamplerCreateInfo
+{
+       VkStructureType                 sType;
+       const void*                             pNext;
+       VkSamplerCreateFlags    flags;
+       VkFilter                                magFilter;
+       VkFilter                                minFilter;
+       VkSamplerMipmapMode             mipmapMode;
+       VkSamplerAddressMode    addressModeU;
+       VkSamplerAddressMode    addressModeV;
+       VkSamplerAddressMode    addressModeW;
+       float                                   mipLodBias;
+       VkBool32                                anisotropyEnable;
+       float                                   maxAnisotropy;
+       VkBool32                                compareEnable;
+       VkCompareOp                             compareOp;
+       float                                   minLod;
+       float                                   maxLod;
+       VkBorderColor                   borderColor;
+       VkBool32                                unnormalizedCoordinates;
+};
+
+struct VkCopyDescriptorSet
+{
+       VkStructureType sType;
+       const void*             pNext;
+       VkDescriptorSet srcSet;
+       deUint32                srcBinding;
+       deUint32                srcArrayElement;
+       VkDescriptorSet dstSet;
+       deUint32                dstBinding;
+       deUint32                dstArrayElement;
+       deUint32                descriptorCount;
+};
+
+struct VkDescriptorBufferInfo
+{
+       VkBuffer                buffer;
+       VkDeviceSize    offset;
+       VkDeviceSize    range;
+};
+
+struct VkDescriptorImageInfo
+{
+       VkSampler               sampler;
+       VkImageView             imageView;
+       VkImageLayout   imageLayout;
+};
+
+struct VkDescriptorPoolSize
+{
+       VkDescriptorType        type;
+       deUint32                        descriptorCount;
+};
+
+struct VkDescriptorPoolCreateInfo
+{
+       VkStructureType                         sType;
+       const void*                                     pNext;
+       VkDescriptorPoolCreateFlags     flags;
+       deUint32                                        maxSets;
+       deUint32                                        poolSizeCount;
+       const VkDescriptorPoolSize*     pPoolSizes;
+};
+
+struct VkDescriptorSetAllocateInfo
+{
+       VkStructureType                                 sType;
+       const void*                                             pNext;
+       VkDescriptorPool                                descriptorPool;
+       deUint32                                                descriptorSetCount;
+       const VkDescriptorSetLayout*    pSetLayouts;
+};
+
+struct VkDescriptorSetLayoutBinding
+{
+       deUint32                        binding;
+       VkDescriptorType        descriptorType;
+       deUint32                        descriptorCount;
+       VkShaderStageFlags      stageFlags;
+       const VkSampler*        pImmutableSamplers;
+};
+
+struct VkDescriptorSetLayoutCreateInfo
+{
+       VkStructureType                                         sType;
+       const void*                                                     pNext;
+       VkDescriptorSetLayoutCreateFlags        flags;
+       deUint32                                                        bindingCount;
+       const VkDescriptorSetLayoutBinding*     pBindings;
+};
+
+struct VkWriteDescriptorSet
+{
+       VkStructureType                                 sType;
+       const void*                                             pNext;
+       VkDescriptorSet                                 dstSet;
+       deUint32                                                dstBinding;
+       deUint32                                                dstArrayElement;
+       deUint32                                                descriptorCount;
+       VkDescriptorType                                descriptorType;
+       const VkDescriptorImageInfo*    pImageInfo;
+       const VkDescriptorBufferInfo*   pBufferInfo;
+       const VkBufferView*                             pTexelBufferView;
+};
+
+struct VkAttachmentDescription
+{
+       VkAttachmentDescriptionFlags    flags;
+       VkFormat                                                format;
+       VkSampleCountFlagBits                   samples;
+       VkAttachmentLoadOp                              loadOp;
+       VkAttachmentStoreOp                             storeOp;
+       VkAttachmentLoadOp                              stencilLoadOp;
+       VkAttachmentStoreOp                             stencilStoreOp;
+       VkImageLayout                                   initialLayout;
+       VkImageLayout                                   finalLayout;
+};
+
+struct VkAttachmentReference
+{
+       deUint32                attachment;
+       VkImageLayout   layout;
+};
+
+struct VkFramebufferCreateInfo
+{
+       VkStructureType                         sType;
+       const void*                                     pNext;
+       VkFramebufferCreateFlags        flags;
+       VkRenderPass                            renderPass;
+       deUint32                                        attachmentCount;
+       const VkImageView*                      pAttachments;
+       deUint32                                        width;
+       deUint32                                        height;
+       deUint32                                        layers;
+};
+
+struct VkSubpassDescription
+{
+       VkSubpassDescriptionFlags               flags;
+       VkPipelineBindPoint                             pipelineBindPoint;
+       deUint32                                                inputAttachmentCount;
+       const VkAttachmentReference*    pInputAttachments;
+       deUint32                                                colorAttachmentCount;
+       const VkAttachmentReference*    pColorAttachments;
+       const VkAttachmentReference*    pResolveAttachments;
+       const VkAttachmentReference*    pDepthStencilAttachment;
+       deUint32                                                preserveAttachmentCount;
+       const deUint32*                                 pPreserveAttachments;
+};
+
+struct VkSubpassDependency
+{
+       deUint32                                srcSubpass;
+       deUint32                                dstSubpass;
+       VkPipelineStageFlags    srcStageMask;
+       VkPipelineStageFlags    dstStageMask;
+       VkAccessFlags                   srcAccessMask;
+       VkAccessFlags                   dstAccessMask;
+       VkDependencyFlags               dependencyFlags;
+};
+
+struct VkRenderPassCreateInfo
+{
+       VkStructureType                                 sType;
+       const void*                                             pNext;
+       VkRenderPassCreateFlags                 flags;
+       deUint32                                                attachmentCount;
+       const VkAttachmentDescription*  pAttachments;
+       deUint32                                                subpassCount;
+       const VkSubpassDescription*             pSubpasses;
+       deUint32                                                dependencyCount;
+       const VkSubpassDependency*              pDependencies;
+};
+
+struct VkCommandPoolCreateInfo
+{
+       VkStructureType                         sType;
+       const void*                                     pNext;
+       VkCommandPoolCreateFlags        flags;
+       deUint32                                        queueFamilyIndex;
+};
+
+struct VkCommandBufferAllocateInfo
+{
+       VkStructureType                 sType;
+       const void*                             pNext;
+       VkCommandPool                   commandPool;
+       VkCommandBufferLevel    level;
+       deUint32                                commandBufferCount;
+};
+
+struct VkCommandBufferInheritanceInfo
+{
+       VkStructureType                                 sType;
+       const void*                                             pNext;
+       VkRenderPass                                    renderPass;
+       deUint32                                                subpass;
+       VkFramebuffer                                   framebuffer;
+       VkBool32                                                occlusionQueryEnable;
+       VkQueryControlFlags                             queryFlags;
+       VkQueryPipelineStatisticFlags   pipelineStatistics;
+};
+
+struct VkCommandBufferBeginInfo
+{
+       VkStructureType                                                 sType;
+       const void*                                                             pNext;
+       VkCommandBufferUsageFlags                               flags;
+       const VkCommandBufferInheritanceInfo*   pInheritanceInfo;
+};
+
+struct VkBufferCopy
+{
+       VkDeviceSize    srcOffset;
+       VkDeviceSize    dstOffset;
+       VkDeviceSize    size;
+};
+
+struct VkImageSubresourceLayers
+{
+       VkImageAspectFlags      aspectMask;
+       deUint32                        mipLevel;
+       deUint32                        baseArrayLayer;
+       deUint32                        layerCount;
+};
+
+struct VkBufferImageCopy
+{
+       VkDeviceSize                            bufferOffset;
+       deUint32                                        bufferRowLength;
+       deUint32                                        bufferImageHeight;
+       VkImageSubresourceLayers        imageSubresource;
+       VkOffset3D                                      imageOffset;
+       VkExtent3D                                      imageExtent;
+};
+
+union VkClearColorValue
+{
+       float           float32[4];
+       deInt32         int32[4];
+       deUint32        uint32[4];
+};
+
+struct VkClearDepthStencilValue
+{
+       float           depth;
+       deUint32        stencil;
+};
+
+union VkClearValue
+{
+       VkClearColorValue                       color;
+       VkClearDepthStencilValue        depthStencil;
+};
+
+struct VkClearAttachment
+{
+       VkImageAspectFlags      aspectMask;
+       deUint32                        colorAttachment;
+       VkClearValue            clearValue;
+};
+
+struct VkClearRect
+{
+       VkRect2D        rect;
+       deUint32        baseArrayLayer;
+       deUint32        layerCount;
+};
+
+struct VkImageBlit
+{
+       VkImageSubresourceLayers        srcSubresource;
+       VkOffset3D                                      srcOffsets[2];
+       VkImageSubresourceLayers        dstSubresource;
+       VkOffset3D                                      dstOffsets[2];
+};
+
+struct VkImageCopy
+{
+       VkImageSubresourceLayers        srcSubresource;
+       VkOffset3D                                      srcOffset;
+       VkImageSubresourceLayers        dstSubresource;
+       VkOffset3D                                      dstOffset;
+       VkExtent3D                                      extent;
+};
+
+struct VkImageResolve
+{
+       VkImageSubresourceLayers        srcSubresource;
+       VkOffset3D                                      srcOffset;
+       VkImageSubresourceLayers        dstSubresource;
+       VkOffset3D                                      dstOffset;
+       VkExtent3D                                      extent;
+};
+
+struct VkRenderPassBeginInfo
+{
+       VkStructureType         sType;
+       const void*                     pNext;
+       VkRenderPass            renderPass;
+       VkFramebuffer           framebuffer;
+       VkRect2D                        renderArea;
+       deUint32                        clearValueCount;
+       const VkClearValue*     pClearValues;
+};
+
+struct VkPhysicalDeviceVulkanSC10Features
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkBool32                pipelineIdentifier;
+       VkBool32                shaderAtomicInstructions;
+};
+
+struct VkPhysicalDeviceVulkanSC10Properties
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkBool32                deviceDestroyFreesMemory;
+       VkBool32                commandPoolMultipleCommandBuffersRecording;
+       VkBool32                commandPoolResetCommandBuffer;
+       VkBool32                descriptorPoolFreeDescriptorSets;
+       VkBool32                externalSubpassDependencies;
+       VkBool32                recyclePipelineMemory;
+       deUint32                maxSubpasses;
+       deUint32                maxInputAttachments;
+       deUint32                maxPreserveAttachments;
+       deUint32                maxFramebufferAttachments;
+       deUint32                maxQueryFaultCount;
+       deUint32                maxCallbackFaultCount;
+       VkBool32                commandBufferSimultaneousUse;
+       VkBool32                secondaryCommandBufferNullFramebuffer;
+};
+
+struct VkPipelinePoolSize
+{
+       VkStructureType sType;
+       const void*             pNext;
+       VkDeviceSize    poolEntrySize;
+       deUint32                poolEntryCount;
+};
+
+struct VkDeviceMemoryReservationCreateInfo
+{
+       VkStructureType                                         sType;
+       const void*                                                     pNext;
+       deUint32                                                        pipelineCacheCreateInfoCount;
+       const VkPipelineCacheCreateInfo*        pPipelineCacheCreateInfos;
+       deUint32                                                        pipelinePoolSizeCount;
+       const VkPipelinePoolSize*                       pPipelinePoolSizes;
+       deUint32                                                        descriptorSetLayoutBindingCount;
+       deUint32                                                        imageViewMaxMipLevels;
+       deUint32                                                        imageViewMaxArrayLayers;
+       deUint32                                                        layeredImageViewMaxMipLevels;
+       deUint32                                                        semaphoreRequestCount;
+       deUint32                                                        commandBufferRequestCount;
+       deUint32                                                        fenceRequestCount;
+       deUint32                                                        deviceMemoryRequestCount;
+       deUint32                                                        bufferRequestCount;
+       deUint32                                                        imageRequestCount;
+       deUint32                                                        eventRequestCount;
+       deUint32                                                        queryPoolRequestCount;
+       deUint32                                                        bufferViewRequestCount;
+       deUint32                                                        imageViewRequestCount;
+       deUint32                                                        layeredImageViewRequestCount;
+       deUint32                                                        pipelineLayoutRequestCount;
+       deUint32                                                        renderPassRequestCount;
+       deUint32                                                        graphicsPipelineRequestCount;
+       deUint32                                                        computePipelineRequestCount;
+       deUint32                                                        descriptorSetLayoutRequestCount;
+       deUint32                                                        samplerRequestCount;
+       deUint32                                                        descriptorPoolRequestCount;
+       deUint32                                                        descriptorSetRequestCount;
+       deUint32                                                        framebufferRequestCount;
+       deUint32                                                        commandPoolRequestCount;
+       deUint32                                                        samplerYcbcrConversionRequestCount;
+       deUint32                                                        surfaceRequestCount;
+       deUint32                                                        swapchainRequestCount;
+       deUint32                                                        displayModeRequestCount;
+};
+
+struct VkCommandPoolMemoryReservationCreateInfo
+{
+       VkStructureType sType;
+       const void*             pNext;
+       VkDeviceSize    commandPoolReservedSize;
+       deUint32                commandPoolMaxCommandBuffers;
+};
+
+struct VkCommandPoolMemoryConsumption
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkDeviceSize    commandPoolAllocated;
+       VkDeviceSize    commandPoolReservedSize;
+       VkDeviceSize    commandBufferAllocated;
+};
+
+struct VkPipelinePoolEntrySizeCreateInfo
+{
+       VkStructureType sType;
+       const void*             pNext;
+       VkDeviceSize    poolEntrySize;
+};
+
+struct VkFaultData
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkFaultLevel    faultLevel;
+       VkFaultType             faultType;
+};
+
+struct VkFaultCallbackInfo
+{
+       VkStructureType                         sType;
+       void*                                           pNext;
+       VkFaultData*                            pFaults;
+       PFN_vkFaultCallbackFunction     pfnFaultCallback;
+};
+
+struct VkPhysicalDeviceFaultHandlingProperties
+{
+       VkStructureType sType;
+       void*                   pNext;
+       deUint32                maxQueryFaultCount;
+       deUint32                maxCallbackFaultCount;
+};
+
+struct VkPhysicalDevicePipelineIdentifierFeatures
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkBool32                pipelineIdentifier;
+};
+
+struct VkPipelineIdentifierInfo
+{
+       VkStructureType                 sType;
+       const void*                             pNext;
+       deUint8                                 pipelineIdentifier[VK_UUID_SIZE];
+       VkPipelineMatchControl  matchControl;
+};
+
+struct VkPhysicalDeviceSubgroupProperties
+{
+       VkStructureType                 sType;
+       void*                                   pNext;
+       deUint32                                subgroupSize;
+       VkShaderStageFlags              supportedStages;
+       VkSubgroupFeatureFlags  supportedOperations;
+       VkBool32                                quadOperationsInAllStages;
+};
+
+struct VkBindBufferMemoryInfo
+{
+       VkStructureType sType;
+       const void*             pNext;
+       VkBuffer                buffer;
+       VkDeviceMemory  memory;
+       VkDeviceSize    memoryOffset;
+};
+
+struct VkBindImageMemoryInfo
+{
+       VkStructureType sType;
+       const void*             pNext;
+       VkImage                 image;
+       VkDeviceMemory  memory;
+       VkDeviceSize    memoryOffset;
+};
+
+struct VkPhysicalDevice16BitStorageFeatures
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkBool32                storageBuffer16BitAccess;
+       VkBool32                uniformAndStorageBuffer16BitAccess;
+       VkBool32                storagePushConstant16;
+       VkBool32                storageInputOutput16;
+};
+
+struct VkMemoryDedicatedRequirements
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkBool32                prefersDedicatedAllocation;
+       VkBool32                requiresDedicatedAllocation;
+};
+
+struct VkMemoryDedicatedAllocateInfo
+{
+       VkStructureType sType;
+       const void*             pNext;
+       VkImage                 image;
+       VkBuffer                buffer;
+};
+
+struct VkMemoryAllocateFlagsInfo
+{
+       VkStructureType                 sType;
+       const void*                             pNext;
+       VkMemoryAllocateFlags   flags;
+       deUint32                                deviceMask;
+};
+
+struct VkDeviceGroupRenderPassBeginInfo
+{
+       VkStructureType sType;
+       const void*             pNext;
+       deUint32                deviceMask;
+       deUint32                deviceRenderAreaCount;
+       const VkRect2D* pDeviceRenderAreas;
+};
+
+struct VkDeviceGroupCommandBufferBeginInfo
+{
+       VkStructureType sType;
+       const void*             pNext;
+       deUint32                deviceMask;
+};
+
+struct VkDeviceGroupSubmitInfo
+{
+       VkStructureType sType;
+       const void*             pNext;
+       deUint32                waitSemaphoreCount;
+       const deUint32* pWaitSemaphoreDeviceIndices;
+       deUint32                commandBufferCount;
+       const deUint32* pCommandBufferDeviceMasks;
+       deUint32                signalSemaphoreCount;
+       const deUint32* pSignalSemaphoreDeviceIndices;
+};
+
+struct VkDeviceGroupBindSparseInfo
+{
+       VkStructureType sType;
+       const void*             pNext;
+       deUint32                resourceDeviceIndex;
+       deUint32                memoryDeviceIndex;
+};
+
+struct VkBindBufferMemoryDeviceGroupInfo
+{
+       VkStructureType sType;
+       const void*             pNext;
+       deUint32                deviceIndexCount;
+       const deUint32* pDeviceIndices;
+};
+
+struct VkBindImageMemoryDeviceGroupInfo
+{
+       VkStructureType sType;
+       const void*             pNext;
+       deUint32                deviceIndexCount;
+       const deUint32* pDeviceIndices;
+       deUint32                splitInstanceBindRegionCount;
+       const VkRect2D* pSplitInstanceBindRegions;
+};
+
+struct VkPhysicalDeviceGroupProperties
+{
+       VkStructureType         sType;
+       void*                           pNext;
+       deUint32                        physicalDeviceCount;
+       VkPhysicalDevice        physicalDevices[VK_MAX_DEVICE_GROUP_SIZE];
+       VkBool32                        subsetAllocation;
+};
+
+struct VkDeviceGroupDeviceCreateInfo
+{
+       VkStructureType                 sType;
+       const void*                             pNext;
+       deUint32                                physicalDeviceCount;
+       const VkPhysicalDevice* pPhysicalDevices;
+};
+
+struct VkBufferMemoryRequirementsInfo2
+{
+       VkStructureType sType;
+       const void*             pNext;
+       VkBuffer                buffer;
+};
+
+struct VkImageMemoryRequirementsInfo2
+{
+       VkStructureType sType;
+       const void*             pNext;
+       VkImage                 image;
+};
+
+struct VkImageSparseMemoryRequirementsInfo2
+{
+       VkStructureType sType;
+       const void*             pNext;
+       VkImage                 image;
+};
+
+struct VkMemoryRequirements2
+{
+       VkStructureType                 sType;
+       void*                                   pNext;
+       VkMemoryRequirements    memoryRequirements;
+};
+
+struct VkSparseImageMemoryRequirements2
+{
+       VkStructureType                                 sType;
+       void*                                                   pNext;
+       VkSparseImageMemoryRequirements memoryRequirements;
+};
+
+struct VkPhysicalDeviceFeatures2
+{
+       VkStructureType                         sType;
+       void*                                           pNext;
+       VkPhysicalDeviceFeatures        features;
+};
+
+struct VkPhysicalDeviceProperties2
+{
+       VkStructureType                         sType;
+       void*                                           pNext;
+       VkPhysicalDeviceProperties      properties;
+};
+
+struct VkFormatProperties2
+{
+       VkStructureType         sType;
+       void*                           pNext;
+       VkFormatProperties      formatProperties;
+};
+
+struct VkImageFormatProperties2
+{
+       VkStructureType                 sType;
+       void*                                   pNext;
+       VkImageFormatProperties imageFormatProperties;
+};
+
+struct VkPhysicalDeviceImageFormatInfo2
+{
+       VkStructureType         sType;
+       const void*                     pNext;
+       VkFormat                        format;
+       VkImageType                     type;
+       VkImageTiling           tiling;
+       VkImageUsageFlags       usage;
+       VkImageCreateFlags      flags;
+};
+
+struct VkQueueFamilyProperties2
+{
+       VkStructureType                 sType;
+       void*                                   pNext;
+       VkQueueFamilyProperties queueFamilyProperties;
+};
+
+struct VkPhysicalDeviceMemoryProperties2
+{
+       VkStructureType                                         sType;
+       void*                                                           pNext;
+       VkPhysicalDeviceMemoryProperties        memoryProperties;
+};
+
+struct VkSparseImageFormatProperties2
+{
+       VkStructureType                                 sType;
+       void*                                                   pNext;
+       VkSparseImageFormatProperties   properties;
+};
+
+struct VkPhysicalDeviceSparseImageFormatInfo2
+{
+       VkStructureType                 sType;
+       const void*                             pNext;
+       VkFormat                                format;
+       VkImageType                             type;
+       VkSampleCountFlagBits   samples;
+       VkImageUsageFlags               usage;
+       VkImageTiling                   tiling;
+};
+
+struct VkPhysicalDevicePointClippingProperties
+{
+       VkStructureType                 sType;
+       void*                                   pNext;
+       VkPointClippingBehavior pointClippingBehavior;
+};
+
+struct VkInputAttachmentAspectReference
+{
+       deUint32                        subpass;
+       deUint32                        inputAttachmentIndex;
+       VkImageAspectFlags      aspectMask;
+};
+
+struct VkRenderPassInputAttachmentAspectCreateInfo
+{
+       VkStructureType                                                 sType;
+       const void*                                                             pNext;
+       deUint32                                                                aspectReferenceCount;
+       const VkInputAttachmentAspectReference* pAspectReferences;
+};
+
+struct VkImageViewUsageCreateInfo
+{
+       VkStructureType         sType;
+       const void*                     pNext;
+       VkImageUsageFlags       usage;
+};
+
+struct VkPipelineTessellationDomainOriginStateCreateInfo
+{
+       VkStructureType                         sType;
+       const void*                                     pNext;
+       VkTessellationDomainOrigin      domainOrigin;
+};
+
+struct VkRenderPassMultiviewCreateInfo
+{
+       VkStructureType sType;
+       const void*             pNext;
+       deUint32                subpassCount;
+       const deUint32* pViewMasks;
+       deUint32                dependencyCount;
+       const deInt32*  pViewOffsets;
+       deUint32                correlationMaskCount;
+       const deUint32* pCorrelationMasks;
+};
+
+struct VkPhysicalDeviceMultiviewFeatures
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkBool32                multiview;
+       VkBool32                multiviewGeometryShader;
+       VkBool32                multiviewTessellationShader;
+};
+
+struct VkPhysicalDeviceMultiviewProperties
+{
+       VkStructureType sType;
+       void*                   pNext;
+       deUint32                maxMultiviewViewCount;
+       deUint32                maxMultiviewInstanceIndex;
+};
+
+struct VkPhysicalDeviceVariablePointersFeatures
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkBool32                variablePointersStorageBuffer;
+       VkBool32                variablePointers;
+};
+
+struct VkPhysicalDeviceProtectedMemoryFeatures
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkBool32                protectedMemory;
+};
+
+struct VkPhysicalDeviceProtectedMemoryProperties
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkBool32                protectedNoFault;
+};
+
+struct VkDeviceQueueInfo2
+{
+       VkStructureType                         sType;
+       const void*                                     pNext;
+       VkDeviceQueueCreateFlags        flags;
+       deUint32                                        queueFamilyIndex;
+       deUint32                                        queueIndex;
+};
+
+struct VkProtectedSubmitInfo
+{
+       VkStructureType sType;
+       const void*             pNext;
+       VkBool32                protectedSubmit;
+};
+
+struct VkSamplerYcbcrConversionCreateInfo
+{
+       VkStructureType                                 sType;
+       const void*                                             pNext;
+       VkFormat                                                format;
+       VkSamplerYcbcrModelConversion   ycbcrModel;
+       VkSamplerYcbcrRange                             ycbcrRange;
+       VkComponentMapping                              components;
+       VkChromaLocation                                xChromaOffset;
+       VkChromaLocation                                yChromaOffset;
+       VkFilter                                                chromaFilter;
+       VkBool32                                                forceExplicitReconstruction;
+};
+
+struct VkSamplerYcbcrConversionInfo
+{
+       VkStructureType                         sType;
+       const void*                                     pNext;
+       VkSamplerYcbcrConversion        conversion;
+};
+
+struct VkBindImagePlaneMemoryInfo
+{
+       VkStructureType                 sType;
+       const void*                             pNext;
+       VkImageAspectFlagBits   planeAspect;
+};
+
+struct VkImagePlaneMemoryRequirementsInfo
+{
+       VkStructureType                 sType;
+       const void*                             pNext;
+       VkImageAspectFlagBits   planeAspect;
+};
+
+struct VkPhysicalDeviceSamplerYcbcrConversionFeatures
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkBool32                samplerYcbcrConversion;
+};
+
+struct VkSamplerYcbcrConversionImageFormatProperties
+{
+       VkStructureType sType;
+       void*                   pNext;
+       deUint32                combinedImageSamplerDescriptorCount;
+};
+
+struct VkExternalMemoryProperties
+{
+       VkExternalMemoryFeatureFlags    externalMemoryFeatures;
+       VkExternalMemoryHandleTypeFlags exportFromImportedHandleTypes;
+       VkExternalMemoryHandleTypeFlags compatibleHandleTypes;
+};
+
+struct VkPhysicalDeviceExternalImageFormatInfo
+{
+       VkStructureType                                         sType;
+       const void*                                                     pNext;
+       VkExternalMemoryHandleTypeFlagBits      handleType;
+};
+
+struct VkExternalImageFormatProperties
+{
+       VkStructureType                         sType;
+       void*                                           pNext;
+       VkExternalMemoryProperties      externalMemoryProperties;
+};
+
+struct VkPhysicalDeviceExternalBufferInfo
+{
+       VkStructureType                                         sType;
+       const void*                                                     pNext;
+       VkBufferCreateFlags                                     flags;
+       VkBufferUsageFlags                                      usage;
+       VkExternalMemoryHandleTypeFlagBits      handleType;
+};
+
+struct VkExternalBufferProperties
+{
+       VkStructureType                         sType;
+       void*                                           pNext;
+       VkExternalMemoryProperties      externalMemoryProperties;
+};
+
+struct VkPhysicalDeviceIDProperties
+{
+       VkStructureType sType;
+       void*                   pNext;
+       deUint8                 deviceUUID[VK_UUID_SIZE];
+       deUint8                 driverUUID[VK_UUID_SIZE];
+       deUint8                 deviceLUID[VK_LUID_SIZE];
+       deUint32                deviceNodeMask;
+       VkBool32                deviceLUIDValid;
+};
+
+struct VkExternalMemoryImageCreateInfo
+{
+       VkStructureType                                 sType;
+       const void*                                             pNext;
+       VkExternalMemoryHandleTypeFlags handleTypes;
+};
+
+struct VkExternalMemoryBufferCreateInfo
+{
+       VkStructureType                                 sType;
+       const void*                                             pNext;
+       VkExternalMemoryHandleTypeFlags handleTypes;
+};
+
+struct VkExportMemoryAllocateInfo
+{
+       VkStructureType                                 sType;
+       const void*                                             pNext;
+       VkExternalMemoryHandleTypeFlags handleTypes;
+};
+
+struct VkPhysicalDeviceExternalFenceInfo
+{
+       VkStructureType                                         sType;
+       const void*                                                     pNext;
+       VkExternalFenceHandleTypeFlagBits       handleType;
+};
+
+struct VkExternalFenceProperties
+{
+       VkStructureType                                 sType;
+       void*                                                   pNext;
+       VkExternalFenceHandleTypeFlags  exportFromImportedHandleTypes;
+       VkExternalFenceHandleTypeFlags  compatibleHandleTypes;
+       VkExternalFenceFeatureFlags             externalFenceFeatures;
+};
+
+struct VkExportFenceCreateInfo
+{
+       VkStructureType                                 sType;
+       const void*                                             pNext;
+       VkExternalFenceHandleTypeFlags  handleTypes;
+};
+
+struct VkExportSemaphoreCreateInfo
+{
+       VkStructureType                                         sType;
+       const void*                                                     pNext;
+       VkExternalSemaphoreHandleTypeFlags      handleTypes;
+};
+
+struct VkPhysicalDeviceExternalSemaphoreInfo
+{
+       VkStructureType                                                 sType;
+       const void*                                                             pNext;
+       VkExternalSemaphoreHandleTypeFlagBits   handleType;
+};
+
+struct VkExternalSemaphoreProperties
+{
+       VkStructureType                                         sType;
+       void*                                                           pNext;
+       VkExternalSemaphoreHandleTypeFlags      exportFromImportedHandleTypes;
+       VkExternalSemaphoreHandleTypeFlags      compatibleHandleTypes;
+       VkExternalSemaphoreFeatureFlags         externalSemaphoreFeatures;
+};
+
+struct VkPhysicalDeviceMaintenance3Properties
+{
+       VkStructureType sType;
+       void*                   pNext;
+       deUint32                maxPerSetDescriptors;
+       VkDeviceSize    maxMemoryAllocationSize;
+};
+
+struct VkDescriptorSetLayoutSupport
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkBool32                supported;
+};
+
+struct VkPhysicalDeviceShaderDrawParametersFeatures
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkBool32                shaderDrawParameters;
+};
+
+struct VkPhysicalDeviceVulkan11Features
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkBool32                storageBuffer16BitAccess;
+       VkBool32                uniformAndStorageBuffer16BitAccess;
+       VkBool32                storagePushConstant16;
+       VkBool32                storageInputOutput16;
+       VkBool32                multiview;
+       VkBool32                multiviewGeometryShader;
+       VkBool32                multiviewTessellationShader;
+       VkBool32                variablePointersStorageBuffer;
+       VkBool32                variablePointers;
+       VkBool32                protectedMemory;
+       VkBool32                samplerYcbcrConversion;
+       VkBool32                shaderDrawParameters;
+};
+
+struct VkPhysicalDeviceVulkan11Properties
+{
+       VkStructureType                 sType;
+       void*                                   pNext;
+       deUint8                                 deviceUUID[VK_UUID_SIZE];
+       deUint8                                 driverUUID[VK_UUID_SIZE];
+       deUint8                                 deviceLUID[VK_LUID_SIZE];
+       deUint32                                deviceNodeMask;
+       VkBool32                                deviceLUIDValid;
+       deUint32                                subgroupSize;
+       VkShaderStageFlags              subgroupSupportedStages;
+       VkSubgroupFeatureFlags  subgroupSupportedOperations;
+       VkBool32                                subgroupQuadOperationsInAllStages;
+       VkPointClippingBehavior pointClippingBehavior;
+       deUint32                                maxMultiviewViewCount;
+       deUint32                                maxMultiviewInstanceIndex;
+       VkBool32                                protectedNoFault;
+       deUint32                                maxPerSetDescriptors;
+       VkDeviceSize                    maxMemoryAllocationSize;
+};
+
+struct VkPhysicalDeviceVulkan12Features
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkBool32                samplerMirrorClampToEdge;
+       VkBool32                drawIndirectCount;
+       VkBool32                storageBuffer8BitAccess;
+       VkBool32                uniformAndStorageBuffer8BitAccess;
+       VkBool32                storagePushConstant8;
+       VkBool32                shaderBufferInt64Atomics;
+       VkBool32                shaderSharedInt64Atomics;
+       VkBool32                shaderFloat16;
+       VkBool32                shaderInt8;
+       VkBool32                descriptorIndexing;
+       VkBool32                shaderInputAttachmentArrayDynamicIndexing;
+       VkBool32                shaderUniformTexelBufferArrayDynamicIndexing;
+       VkBool32                shaderStorageTexelBufferArrayDynamicIndexing;
+       VkBool32                shaderUniformBufferArrayNonUniformIndexing;
+       VkBool32                shaderSampledImageArrayNonUniformIndexing;
+       VkBool32                shaderStorageBufferArrayNonUniformIndexing;
+       VkBool32                shaderStorageImageArrayNonUniformIndexing;
+       VkBool32                shaderInputAttachmentArrayNonUniformIndexing;
+       VkBool32                shaderUniformTexelBufferArrayNonUniformIndexing;
+       VkBool32                shaderStorageTexelBufferArrayNonUniformIndexing;
+       VkBool32                descriptorBindingUniformBufferUpdateAfterBind;
+       VkBool32                descriptorBindingSampledImageUpdateAfterBind;
+       VkBool32                descriptorBindingStorageImageUpdateAfterBind;
+       VkBool32                descriptorBindingStorageBufferUpdateAfterBind;
+       VkBool32                descriptorBindingUniformTexelBufferUpdateAfterBind;
+       VkBool32                descriptorBindingStorageTexelBufferUpdateAfterBind;
+       VkBool32                descriptorBindingUpdateUnusedWhilePending;
+       VkBool32                descriptorBindingPartiallyBound;
+       VkBool32                descriptorBindingVariableDescriptorCount;
+       VkBool32                runtimeDescriptorArray;
+       VkBool32                samplerFilterMinmax;
+       VkBool32                scalarBlockLayout;
+       VkBool32                imagelessFramebuffer;
+       VkBool32                uniformBufferStandardLayout;
+       VkBool32                shaderSubgroupExtendedTypes;
+       VkBool32                separateDepthStencilLayouts;
+       VkBool32                hostQueryReset;
+       VkBool32                timelineSemaphore;
+       VkBool32                bufferDeviceAddress;
+       VkBool32                bufferDeviceAddressCaptureReplay;
+       VkBool32                bufferDeviceAddressMultiDevice;
+       VkBool32                vulkanMemoryModel;
+       VkBool32                vulkanMemoryModelDeviceScope;
+       VkBool32                vulkanMemoryModelAvailabilityVisibilityChains;
+       VkBool32                shaderOutputViewportIndex;
+       VkBool32                shaderOutputLayer;
+       VkBool32                subgroupBroadcastDynamicId;
+};
+
+struct VkConformanceVersion
+{
+       deUint8 major;
+       deUint8 minor;
+       deUint8 subminor;
+       deUint8 patch;
+};
+
+struct VkPhysicalDeviceVulkan12Properties
+{
+       VkStructureType                                         sType;
+       void*                                                           pNext;
+       VkDriverId                                                      driverID;
+       char                                                            driverName[VK_MAX_DRIVER_NAME_SIZE];
+       char                                                            driverInfo[VK_MAX_DRIVER_INFO_SIZE];
+       VkConformanceVersion                            conformanceVersion;
+       VkShaderFloatControlsIndependence       denormBehaviorIndependence;
+       VkShaderFloatControlsIndependence       roundingModeIndependence;
+       VkBool32                                                        shaderSignedZeroInfNanPreserveFloat16;
+       VkBool32                                                        shaderSignedZeroInfNanPreserveFloat32;
+       VkBool32                                                        shaderSignedZeroInfNanPreserveFloat64;
+       VkBool32                                                        shaderDenormPreserveFloat16;
+       VkBool32                                                        shaderDenormPreserveFloat32;
+       VkBool32                                                        shaderDenormPreserveFloat64;
+       VkBool32                                                        shaderDenormFlushToZeroFloat16;
+       VkBool32                                                        shaderDenormFlushToZeroFloat32;
+       VkBool32                                                        shaderDenormFlushToZeroFloat64;
+       VkBool32                                                        shaderRoundingModeRTEFloat16;
+       VkBool32                                                        shaderRoundingModeRTEFloat32;
+       VkBool32                                                        shaderRoundingModeRTEFloat64;
+       VkBool32                                                        shaderRoundingModeRTZFloat16;
+       VkBool32                                                        shaderRoundingModeRTZFloat32;
+       VkBool32                                                        shaderRoundingModeRTZFloat64;
+       deUint32                                                        maxUpdateAfterBindDescriptorsInAllPools;
+       VkBool32                                                        shaderUniformBufferArrayNonUniformIndexingNative;
+       VkBool32                                                        shaderSampledImageArrayNonUniformIndexingNative;
+       VkBool32                                                        shaderStorageBufferArrayNonUniformIndexingNative;
+       VkBool32                                                        shaderStorageImageArrayNonUniformIndexingNative;
+       VkBool32                                                        shaderInputAttachmentArrayNonUniformIndexingNative;
+       VkBool32                                                        robustBufferAccessUpdateAfterBind;
+       VkBool32                                                        quadDivergentImplicitLod;
+       deUint32                                                        maxPerStageDescriptorUpdateAfterBindSamplers;
+       deUint32                                                        maxPerStageDescriptorUpdateAfterBindUniformBuffers;
+       deUint32                                                        maxPerStageDescriptorUpdateAfterBindStorageBuffers;
+       deUint32                                                        maxPerStageDescriptorUpdateAfterBindSampledImages;
+       deUint32                                                        maxPerStageDescriptorUpdateAfterBindStorageImages;
+       deUint32                                                        maxPerStageDescriptorUpdateAfterBindInputAttachments;
+       deUint32                                                        maxPerStageUpdateAfterBindResources;
+       deUint32                                                        maxDescriptorSetUpdateAfterBindSamplers;
+       deUint32                                                        maxDescriptorSetUpdateAfterBindUniformBuffers;
+       deUint32                                                        maxDescriptorSetUpdateAfterBindUniformBuffersDynamic;
+       deUint32                                                        maxDescriptorSetUpdateAfterBindStorageBuffers;
+       deUint32                                                        maxDescriptorSetUpdateAfterBindStorageBuffersDynamic;
+       deUint32                                                        maxDescriptorSetUpdateAfterBindSampledImages;
+       deUint32                                                        maxDescriptorSetUpdateAfterBindStorageImages;
+       deUint32                                                        maxDescriptorSetUpdateAfterBindInputAttachments;
+       VkResolveModeFlags                                      supportedDepthResolveModes;
+       VkResolveModeFlags                                      supportedStencilResolveModes;
+       VkBool32                                                        independentResolveNone;
+       VkBool32                                                        independentResolve;
+       VkBool32                                                        filterMinmaxSingleComponentFormats;
+       VkBool32                                                        filterMinmaxImageComponentMapping;
+       deUint64                                                        maxTimelineSemaphoreValueDifference;
+       VkSampleCountFlags                                      framebufferIntegerColorSampleCounts;
+};
+
+struct VkImageFormatListCreateInfo
+{
+       VkStructureType sType;
+       const void*             pNext;
+       deUint32                viewFormatCount;
+       const VkFormat* pViewFormats;
+};
+
+struct VkAttachmentDescription2
+{
+       VkStructureType                                 sType;
+       const void*                                             pNext;
+       VkAttachmentDescriptionFlags    flags;
+       VkFormat                                                format;
+       VkSampleCountFlagBits                   samples;
+       VkAttachmentLoadOp                              loadOp;
+       VkAttachmentStoreOp                             storeOp;
+       VkAttachmentLoadOp                              stencilLoadOp;
+       VkAttachmentStoreOp                             stencilStoreOp;
+       VkImageLayout                                   initialLayout;
+       VkImageLayout                                   finalLayout;
+};
+
+struct VkAttachmentReference2
+{
+       VkStructureType         sType;
+       const void*                     pNext;
+       deUint32                        attachment;
+       VkImageLayout           layout;
+       VkImageAspectFlags      aspectMask;
+};
+
+struct VkSubpassDescription2
+{
+       VkStructureType                                 sType;
+       const void*                                             pNext;
+       VkSubpassDescriptionFlags               flags;
+       VkPipelineBindPoint                             pipelineBindPoint;
+       deUint32                                                viewMask;
+       deUint32                                                inputAttachmentCount;
+       const VkAttachmentReference2*   pInputAttachments;
+       deUint32                                                colorAttachmentCount;
+       const VkAttachmentReference2*   pColorAttachments;
+       const VkAttachmentReference2*   pResolveAttachments;
+       const VkAttachmentReference2*   pDepthStencilAttachment;
+       deUint32                                                preserveAttachmentCount;
+       const deUint32*                                 pPreserveAttachments;
+};
+
+struct VkSubpassDependency2
+{
+       VkStructureType                 sType;
+       const void*                             pNext;
+       deUint32                                srcSubpass;
+       deUint32                                dstSubpass;
+       VkPipelineStageFlags    srcStageMask;
+       VkPipelineStageFlags    dstStageMask;
+       VkAccessFlags                   srcAccessMask;
+       VkAccessFlags                   dstAccessMask;
+       VkDependencyFlags               dependencyFlags;
+       deInt32                                 viewOffset;
+};
+
+struct VkRenderPassCreateInfo2
+{
+       VkStructureType                                 sType;
+       const void*                                             pNext;
+       VkRenderPassCreateFlags                 flags;
+       deUint32                                                attachmentCount;
+       const VkAttachmentDescription2* pAttachments;
+       deUint32                                                subpassCount;
+       const VkSubpassDescription2*    pSubpasses;
+       deUint32                                                dependencyCount;
+       const VkSubpassDependency2*             pDependencies;
+       deUint32                                                correlatedViewMaskCount;
+       const deUint32*                                 pCorrelatedViewMasks;
+};
+
+struct VkSubpassBeginInfo
+{
+       VkStructureType         sType;
+       const void*                     pNext;
+       VkSubpassContents       contents;
+};
+
+struct VkSubpassEndInfo
+{
+       VkStructureType sType;
+       const void*             pNext;
+};
+
+struct VkPhysicalDevice8BitStorageFeatures
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkBool32                storageBuffer8BitAccess;
+       VkBool32                uniformAndStorageBuffer8BitAccess;
+       VkBool32                storagePushConstant8;
+};
+
+struct VkPhysicalDeviceDriverProperties
+{
+       VkStructureType                 sType;
+       void*                                   pNext;
+       VkDriverId                              driverID;
+       char                                    driverName[VK_MAX_DRIVER_NAME_SIZE];
+       char                                    driverInfo[VK_MAX_DRIVER_INFO_SIZE];
+       VkConformanceVersion    conformanceVersion;
+};
+
+struct VkPhysicalDeviceShaderAtomicInt64Features
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkBool32                shaderBufferInt64Atomics;
+       VkBool32                shaderSharedInt64Atomics;
+};
+
+struct VkPhysicalDeviceShaderFloat16Int8Features
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkBool32                shaderFloat16;
+       VkBool32                shaderInt8;
+};
+
+struct VkPhysicalDeviceFloatControlsProperties
+{
+       VkStructureType                                         sType;
+       void*                                                           pNext;
+       VkShaderFloatControlsIndependence       denormBehaviorIndependence;
+       VkShaderFloatControlsIndependence       roundingModeIndependence;
+       VkBool32                                                        shaderSignedZeroInfNanPreserveFloat16;
+       VkBool32                                                        shaderSignedZeroInfNanPreserveFloat32;
+       VkBool32                                                        shaderSignedZeroInfNanPreserveFloat64;
+       VkBool32                                                        shaderDenormPreserveFloat16;
+       VkBool32                                                        shaderDenormPreserveFloat32;
+       VkBool32                                                        shaderDenormPreserveFloat64;
+       VkBool32                                                        shaderDenormFlushToZeroFloat16;
+       VkBool32                                                        shaderDenormFlushToZeroFloat32;
+       VkBool32                                                        shaderDenormFlushToZeroFloat64;
+       VkBool32                                                        shaderRoundingModeRTEFloat16;
+       VkBool32                                                        shaderRoundingModeRTEFloat32;
+       VkBool32                                                        shaderRoundingModeRTEFloat64;
+       VkBool32                                                        shaderRoundingModeRTZFloat16;
+       VkBool32                                                        shaderRoundingModeRTZFloat32;
+       VkBool32                                                        shaderRoundingModeRTZFloat64;
+};
+
+struct VkDescriptorSetLayoutBindingFlagsCreateInfo
+{
+       VkStructureType                                 sType;
+       const void*                                             pNext;
+       deUint32                                                bindingCount;
+       const VkDescriptorBindingFlags* pBindingFlags;
+};
+
+struct VkPhysicalDeviceDescriptorIndexingFeatures
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkBool32                shaderInputAttachmentArrayDynamicIndexing;
+       VkBool32                shaderUniformTexelBufferArrayDynamicIndexing;
+       VkBool32                shaderStorageTexelBufferArrayDynamicIndexing;
+       VkBool32                shaderUniformBufferArrayNonUniformIndexing;
+       VkBool32                shaderSampledImageArrayNonUniformIndexing;
+       VkBool32                shaderStorageBufferArrayNonUniformIndexing;
+       VkBool32                shaderStorageImageArrayNonUniformIndexing;
+       VkBool32                shaderInputAttachmentArrayNonUniformIndexing;
+       VkBool32                shaderUniformTexelBufferArrayNonUniformIndexing;
+       VkBool32                shaderStorageTexelBufferArrayNonUniformIndexing;
+       VkBool32                descriptorBindingUniformBufferUpdateAfterBind;
+       VkBool32                descriptorBindingSampledImageUpdateAfterBind;
+       VkBool32                descriptorBindingStorageImageUpdateAfterBind;
+       VkBool32                descriptorBindingStorageBufferUpdateAfterBind;
+       VkBool32                descriptorBindingUniformTexelBufferUpdateAfterBind;
+       VkBool32                descriptorBindingStorageTexelBufferUpdateAfterBind;
+       VkBool32                descriptorBindingUpdateUnusedWhilePending;
+       VkBool32                descriptorBindingPartiallyBound;
+       VkBool32                descriptorBindingVariableDescriptorCount;
+       VkBool32                runtimeDescriptorArray;
+};
+
+struct VkPhysicalDeviceDescriptorIndexingProperties
+{
+       VkStructureType sType;
+       void*                   pNext;
+       deUint32                maxUpdateAfterBindDescriptorsInAllPools;
+       VkBool32                shaderUniformBufferArrayNonUniformIndexingNative;
+       VkBool32                shaderSampledImageArrayNonUniformIndexingNative;
+       VkBool32                shaderStorageBufferArrayNonUniformIndexingNative;
+       VkBool32                shaderStorageImageArrayNonUniformIndexingNative;
+       VkBool32                shaderInputAttachmentArrayNonUniformIndexingNative;
+       VkBool32                robustBufferAccessUpdateAfterBind;
+       VkBool32                quadDivergentImplicitLod;
+       deUint32                maxPerStageDescriptorUpdateAfterBindSamplers;
+       deUint32                maxPerStageDescriptorUpdateAfterBindUniformBuffers;
+       deUint32                maxPerStageDescriptorUpdateAfterBindStorageBuffers;
+       deUint32                maxPerStageDescriptorUpdateAfterBindSampledImages;
+       deUint32                maxPerStageDescriptorUpdateAfterBindStorageImages;
+       deUint32                maxPerStageDescriptorUpdateAfterBindInputAttachments;
+       deUint32                maxPerStageUpdateAfterBindResources;
+       deUint32                maxDescriptorSetUpdateAfterBindSamplers;
+       deUint32                maxDescriptorSetUpdateAfterBindUniformBuffers;
+       deUint32                maxDescriptorSetUpdateAfterBindUniformBuffersDynamic;
+       deUint32                maxDescriptorSetUpdateAfterBindStorageBuffers;
+       deUint32                maxDescriptorSetUpdateAfterBindStorageBuffersDynamic;
+       deUint32                maxDescriptorSetUpdateAfterBindSampledImages;
+       deUint32                maxDescriptorSetUpdateAfterBindStorageImages;
+       deUint32                maxDescriptorSetUpdateAfterBindInputAttachments;
+};
+
+struct VkDescriptorSetVariableDescriptorCountAllocateInfo
+{
+       VkStructureType sType;
+       const void*             pNext;
+       deUint32                descriptorSetCount;
+       const deUint32* pDescriptorCounts;
+};
+
+struct VkDescriptorSetVariableDescriptorCountLayoutSupport
+{
+       VkStructureType sType;
+       void*                   pNext;
+       deUint32                maxVariableDescriptorCount;
+};
+
+struct VkSubpassDescriptionDepthStencilResolve
+{
+       VkStructureType                                 sType;
+       const void*                                             pNext;
+       VkResolveModeFlagBits                   depthResolveMode;
+       VkResolveModeFlagBits                   stencilResolveMode;
+       const VkAttachmentReference2*   pDepthStencilResolveAttachment;
+};
+
+struct VkPhysicalDeviceDepthStencilResolveProperties
+{
+       VkStructureType         sType;
+       void*                           pNext;
+       VkResolveModeFlags      supportedDepthResolveModes;
+       VkResolveModeFlags      supportedStencilResolveModes;
+       VkBool32                        independentResolveNone;
+       VkBool32                        independentResolve;
+};
+
+struct VkPhysicalDeviceScalarBlockLayoutFeatures
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkBool32                scalarBlockLayout;
+};
+
+struct VkImageStencilUsageCreateInfo
+{
+       VkStructureType         sType;
+       const void*                     pNext;
+       VkImageUsageFlags       stencilUsage;
+};
+
+struct VkSamplerReductionModeCreateInfo
+{
+       VkStructureType                 sType;
+       const void*                             pNext;
+       VkSamplerReductionMode  reductionMode;
+};
+
+struct VkPhysicalDeviceSamplerFilterMinmaxProperties
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkBool32                filterMinmaxSingleComponentFormats;
+       VkBool32                filterMinmaxImageComponentMapping;
+};
+
+struct VkPhysicalDeviceVulkanMemoryModelFeatures
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkBool32                vulkanMemoryModel;
+       VkBool32                vulkanMemoryModelDeviceScope;
+       VkBool32                vulkanMemoryModelAvailabilityVisibilityChains;
+};
+
+struct VkPhysicalDeviceImagelessFramebufferFeatures
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkBool32                imagelessFramebuffer;
+};
+
+struct VkFramebufferAttachmentImageInfo
+{
+       VkStructureType         sType;
+       const void*                     pNext;
+       VkImageCreateFlags      flags;
+       VkImageUsageFlags       usage;
+       deUint32                        width;
+       deUint32                        height;
+       deUint32                        layerCount;
+       deUint32                        viewFormatCount;
+       const VkFormat*         pViewFormats;
+};
+
+struct VkFramebufferAttachmentsCreateInfo
+{
+       VkStructureType                                                 sType;
+       const void*                                                             pNext;
+       deUint32                                                                attachmentImageInfoCount;
+       const VkFramebufferAttachmentImageInfo* pAttachmentImageInfos;
+};
+
+struct VkRenderPassAttachmentBeginInfo
+{
+       VkStructureType         sType;
+       const void*                     pNext;
+       deUint32                        attachmentCount;
+       const VkImageView*      pAttachments;
+};
+
+struct VkPhysicalDeviceUniformBufferStandardLayoutFeatures
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkBool32                uniformBufferStandardLayout;
+};
+
+struct VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkBool32                shaderSubgroupExtendedTypes;
+};
+
+struct VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkBool32                separateDepthStencilLayouts;
+};
+
+struct VkAttachmentReferenceStencilLayout
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkImageLayout   stencilLayout;
+};
+
+struct VkAttachmentDescriptionStencilLayout
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkImageLayout   stencilInitialLayout;
+       VkImageLayout   stencilFinalLayout;
+};
+
+struct VkPhysicalDeviceHostQueryResetFeatures
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkBool32                hostQueryReset;
+};
+
+struct VkPhysicalDeviceTimelineSemaphoreFeatures
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkBool32                timelineSemaphore;
+};
+
+struct VkPhysicalDeviceTimelineSemaphoreProperties
+{
+       VkStructureType sType;
+       void*                   pNext;
+       deUint64                maxTimelineSemaphoreValueDifference;
+};
+
+struct VkSemaphoreTypeCreateInfo
+{
+       VkStructureType sType;
+       const void*             pNext;
+       VkSemaphoreType semaphoreType;
+       deUint64                initialValue;
+};
+
+struct VkTimelineSemaphoreSubmitInfo
+{
+       VkStructureType sType;
+       const void*             pNext;
+       deUint32                waitSemaphoreValueCount;
+       const deUint64* pWaitSemaphoreValues;
+       deUint32                signalSemaphoreValueCount;
+       const deUint64* pSignalSemaphoreValues;
+};
+
+struct VkSemaphoreWaitInfo
+{
+       VkStructureType                 sType;
+       const void*                             pNext;
+       VkSemaphoreWaitFlags    flags;
+       deUint32                                semaphoreCount;
+       const VkSemaphore*              pSemaphores;
+       const deUint64*                 pValues;
+};
+
+struct VkSemaphoreSignalInfo
+{
+       VkStructureType sType;
+       const void*             pNext;
+       VkSemaphore             semaphore;
+       deUint64                value;
+};
+
+struct VkPhysicalDeviceBufferDeviceAddressFeatures
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkBool32                bufferDeviceAddress;
+       VkBool32                bufferDeviceAddressCaptureReplay;
+       VkBool32                bufferDeviceAddressMultiDevice;
+};
+
+struct VkBufferDeviceAddressInfo
+{
+       VkStructureType sType;
+       const void*             pNext;
+       VkBuffer                buffer;
+};
+
+struct VkBufferOpaqueCaptureAddressCreateInfo
+{
+       VkStructureType sType;
+       const void*             pNext;
+       deUint64                opaqueCaptureAddress;
+};
+
+struct VkMemoryOpaqueCaptureAddressAllocateInfo
+{
+       VkStructureType sType;
+       const void*             pNext;
+       deUint64                opaqueCaptureAddress;
+};
+
+struct VkDeviceMemoryOpaqueCaptureAddressInfo
+{
+       VkStructureType sType;
+       const void*             pNext;
+       VkDeviceMemory  memory;
+};
+
+struct VkSurfaceCapabilitiesKHR
+{
+       deUint32                                                minImageCount;
+       deUint32                                                maxImageCount;
+       VkExtent2D                                              currentExtent;
+       VkExtent2D                                              minImageExtent;
+       VkExtent2D                                              maxImageExtent;
+       deUint32                                                maxImageArrayLayers;
+       VkSurfaceTransformFlagsKHR              supportedTransforms;
+       VkSurfaceTransformFlagBitsKHR   currentTransform;
+       VkCompositeAlphaFlagsKHR                supportedCompositeAlpha;
+       VkImageUsageFlags                               supportedUsageFlags;
+};
+
+struct VkSurfaceFormatKHR
+{
+       VkFormat                format;
+       VkColorSpaceKHR colorSpace;
+};
+
+struct VkSwapchainCreateInfoKHR
+{
+       VkStructureType                                 sType;
+       const void*                                             pNext;
+       VkSwapchainCreateFlagsKHR               flags;
+       VkSurfaceKHR                                    surface;
+       deUint32                                                minImageCount;
+       VkFormat                                                imageFormat;
+       VkColorSpaceKHR                                 imageColorSpace;
+       VkExtent2D                                              imageExtent;
+       deUint32                                                imageArrayLayers;
+       VkImageUsageFlags                               imageUsage;
+       VkSharingMode                                   imageSharingMode;
+       deUint32                                                queueFamilyIndexCount;
+       const deUint32*                                 pQueueFamilyIndices;
+       VkSurfaceTransformFlagBitsKHR   preTransform;
+       VkCompositeAlphaFlagBitsKHR             compositeAlpha;
+       VkPresentModeKHR                                presentMode;
+       VkBool32                                                clipped;
+       VkSwapchainKHR                                  oldSwapchain;
+};
+
+struct VkPresentInfoKHR
+{
+       VkStructureType                 sType;
+       const void*                             pNext;
+       deUint32                                waitSemaphoreCount;
+       const VkSemaphore*              pWaitSemaphores;
+       deUint32                                swapchainCount;
+       const VkSwapchainKHR*   pSwapchains;
+       const deUint32*                 pImageIndices;
+       VkResult*                               pResults;
+};
+
+struct VkImageSwapchainCreateInfoKHR
+{
+       VkStructureType sType;
+       const void*             pNext;
+       VkSwapchainKHR  swapchain;
+};
+
+struct VkBindImageMemorySwapchainInfoKHR
+{
+       VkStructureType sType;
+       const void*             pNext;
+       VkSwapchainKHR  swapchain;
+       deUint32                imageIndex;
+};
+
+struct VkAcquireNextImageInfoKHR
+{
+       VkStructureType sType;
+       const void*             pNext;
+       VkSwapchainKHR  swapchain;
+       deUint64                timeout;
+       VkSemaphore             semaphore;
+       VkFence                 fence;
+       deUint32                deviceMask;
+};
+
+struct VkDeviceGroupPresentCapabilitiesKHR
+{
+       VkStructureType                                         sType;
+       const void*                                                     pNext;
+       deUint32                                                        presentMask[VK_MAX_DEVICE_GROUP_SIZE];
+       VkDeviceGroupPresentModeFlagsKHR        modes;
+};
+
+struct VkDeviceGroupPresentInfoKHR
+{
+       VkStructureType                                         sType;
+       const void*                                                     pNext;
+       deUint32                                                        swapchainCount;
+       const deUint32*                                         pDeviceMasks;
+       VkDeviceGroupPresentModeFlagBitsKHR     mode;
+};
+
+struct VkDeviceGroupSwapchainCreateInfoKHR
+{
+       VkStructureType                                         sType;
+       const void*                                                     pNext;
+       VkDeviceGroupPresentModeFlagsKHR        modes;
+};
+
+struct VkDisplayModeParametersKHR
+{
+       VkExtent2D      visibleRegion;
+       deUint32        refreshRate;
+};
+
+struct VkDisplayModeCreateInfoKHR
+{
+       VkStructureType                         sType;
+       const void*                                     pNext;
+       VkDisplayModeCreateFlagsKHR     flags;
+       VkDisplayModeParametersKHR      parameters;
+};
+
+struct VkDisplayModePropertiesKHR
+{
+       VkDisplayModeKHR                        displayMode;
+       VkDisplayModeParametersKHR      parameters;
+};
+
+struct VkDisplayPlaneCapabilitiesKHR
+{
+       VkDisplayPlaneAlphaFlagsKHR     supportedAlpha;
+       VkOffset2D                                      minSrcPosition;
+       VkOffset2D                                      maxSrcPosition;
+       VkExtent2D                                      minSrcExtent;
+       VkExtent2D                                      maxSrcExtent;
+       VkOffset2D                                      minDstPosition;
+       VkOffset2D                                      maxDstPosition;
+       VkExtent2D                                      minDstExtent;
+       VkExtent2D                                      maxDstExtent;
+};
+
+struct VkDisplayPlanePropertiesKHR
+{
+       VkDisplayKHR    currentDisplay;
+       deUint32                currentStackIndex;
+};
+
+struct VkDisplayPropertiesKHR
+{
+       VkDisplayKHR                            display;
+       const char*                                     displayName;
+       VkExtent2D                                      physicalDimensions;
+       VkExtent2D                                      physicalResolution;
+       VkSurfaceTransformFlagsKHR      supportedTransforms;
+       VkBool32                                        planeReorderPossible;
+       VkBool32                                        persistentContent;
+};
+
+struct VkDisplaySurfaceCreateInfoKHR
+{
+       VkStructureType                                 sType;
+       const void*                                             pNext;
+       VkDisplaySurfaceCreateFlagsKHR  flags;
+       VkDisplayModeKHR                                displayMode;
+       deUint32                                                planeIndex;
+       deUint32                                                planeStackIndex;
+       VkSurfaceTransformFlagBitsKHR   transform;
+       float                                                   globalAlpha;
+       VkDisplayPlaneAlphaFlagBitsKHR  alphaMode;
+       VkExtent2D                                              imageExtent;
+};
+
+struct VkDisplayPresentInfoKHR
+{
+       VkStructureType sType;
+       const void*             pNext;
+       VkRect2D                srcRect;
+       VkRect2D                dstRect;
+       VkBool32                persistent;
+};
+
+struct VkImportMemoryFdInfoKHR
+{
+       VkStructureType                                         sType;
+       const void*                                                     pNext;
+       VkExternalMemoryHandleTypeFlagBits      handleType;
+       int                                                                     fd;
+};
+
+struct VkMemoryFdPropertiesKHR
+{
+       VkStructureType sType;
+       void*                   pNext;
+       deUint32                memoryTypeBits;
+};
+
+struct VkMemoryGetFdInfoKHR
+{
+       VkStructureType                                         sType;
+       const void*                                                     pNext;
+       VkDeviceMemory                                          memory;
+       VkExternalMemoryHandleTypeFlagBits      handleType;
+};
+
+struct VkImportSemaphoreFdInfoKHR
+{
+       VkStructureType                                                 sType;
+       const void*                                                             pNext;
+       VkSemaphore                                                             semaphore;
+       VkSemaphoreImportFlags                                  flags;
+       VkExternalSemaphoreHandleTypeFlagBits   handleType;
+       int                                                                             fd;
+};
+
+struct VkSemaphoreGetFdInfoKHR
+{
+       VkStructureType                                                 sType;
+       const void*                                                             pNext;
+       VkSemaphore                                                             semaphore;
+       VkExternalSemaphoreHandleTypeFlagBits   handleType;
+};
+
+struct VkRectLayerKHR
+{
+       VkOffset2D      offset;
+       VkExtent2D      extent;
+       deUint32        layer;
+};
+
+struct VkPresentRegionKHR
+{
+       deUint32                                rectangleCount;
+       const VkRectLayerKHR*   pRectangles;
+};
+
+struct VkPresentRegionsKHR
+{
+       VkStructureType                         sType;
+       const void*                                     pNext;
+       deUint32                                        swapchainCount;
+       const VkPresentRegionKHR*       pRegions;
+};
+
+struct VkSharedPresentSurfaceCapabilitiesKHR
+{
+       VkStructureType         sType;
+       void*                           pNext;
+       VkImageUsageFlags       sharedPresentSupportedUsageFlags;
+};
+
+struct VkImportFenceFdInfoKHR
+{
+       VkStructureType                                         sType;
+       const void*                                                     pNext;
+       VkFence                                                         fence;
+       VkFenceImportFlags                                      flags;
+       VkExternalFenceHandleTypeFlagBits       handleType;
+       int                                                                     fd;
+};
+
+struct VkFenceGetFdInfoKHR
+{
+       VkStructureType                                         sType;
+       const void*                                                     pNext;
+       VkFence                                                         fence;
+       VkExternalFenceHandleTypeFlagBits       handleType;
+};
+
+struct VkPhysicalDeviceSurfaceInfo2KHR
+{
+       VkStructureType sType;
+       const void*             pNext;
+       VkSurfaceKHR    surface;
+};
+
+struct VkSurfaceCapabilities2KHR
+{
+       VkStructureType                         sType;
+       void*                                           pNext;
+       VkSurfaceCapabilitiesKHR        surfaceCapabilities;
+};
+
+struct VkSurfaceFormat2KHR
+{
+       VkStructureType         sType;
+       void*                           pNext;
+       VkSurfaceFormatKHR      surfaceFormat;
+};
+
+struct VkDisplayProperties2KHR
+{
+       VkStructureType                 sType;
+       void*                                   pNext;
+       VkDisplayPropertiesKHR  displayProperties;
+};
+
+struct VkDisplayPlaneProperties2KHR
+{
+       VkStructureType                         sType;
+       void*                                           pNext;
+       VkDisplayPlanePropertiesKHR     displayPlaneProperties;
+};
+
+struct VkDisplayModeProperties2KHR
+{
+       VkStructureType                         sType;
+       void*                                           pNext;
+       VkDisplayModePropertiesKHR      displayModeProperties;
+};
+
+struct VkDisplayPlaneInfo2KHR
+{
+       VkStructureType         sType;
+       const void*                     pNext;
+       VkDisplayModeKHR        mode;
+       deUint32                        planeIndex;
+};
+
+struct VkDisplayPlaneCapabilities2KHR
+{
+       VkStructureType                                 sType;
+       void*                                                   pNext;
+       VkDisplayPlaneCapabilitiesKHR   capabilities;
+};
+
+struct VkPhysicalDeviceShaderClockFeaturesKHR
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkBool32                shaderSubgroupClock;
+       VkBool32                shaderDeviceClock;
+};
+
+struct VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkBool32                shaderTerminateInvocation;
+};
+
+struct VkFragmentShadingRateAttachmentInfoKHR
+{
+       VkStructureType                                 sType;
+       const void*                                             pNext;
+       const VkAttachmentReference2*   pFragmentShadingRateAttachment;
+       VkExtent2D                                              shadingRateAttachmentTexelSize;
+};
+
+struct VkPipelineFragmentShadingRateStateCreateInfoKHR
+{
+       VkStructureType                                         sType;
+       const void*                                                     pNext;
+       VkExtent2D                                                      fragmentSize;
+       VkFragmentShadingRateCombinerOpKHR      combinerOps[2];
+};
+
+struct VkPhysicalDeviceFragmentShadingRateFeaturesKHR
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkBool32                pipelineFragmentShadingRate;
+       VkBool32                primitiveFragmentShadingRate;
+       VkBool32                attachmentFragmentShadingRate;
+};
+
+struct VkPhysicalDeviceFragmentShadingRatePropertiesKHR
+{
+       VkStructureType                 sType;
+       void*                                   pNext;
+       VkExtent2D                              minFragmentShadingRateAttachmentTexelSize;
+       VkExtent2D                              maxFragmentShadingRateAttachmentTexelSize;
+       deUint32                                maxFragmentShadingRateAttachmentTexelSizeAspectRatio;
+       VkBool32                                primitiveFragmentShadingRateWithMultipleViewports;
+       VkBool32                                layeredShadingRateAttachments;
+       VkBool32                                fragmentShadingRateNonTrivialCombinerOps;
+       VkExtent2D                              maxFragmentSize;
+       deUint32                                maxFragmentSizeAspectRatio;
+       deUint32                                maxFragmentShadingRateCoverageSamples;
+       VkSampleCountFlagBits   maxFragmentShadingRateRasterizationSamples;
+       VkBool32                                fragmentShadingRateWithShaderDepthStencilWrites;
+       VkBool32                                fragmentShadingRateWithSampleMask;
+       VkBool32                                fragmentShadingRateWithShaderSampleMask;
+       VkBool32                                fragmentShadingRateWithConservativeRasterization;
+       VkBool32                                fragmentShadingRateWithFragmentShaderInterlock;
+       VkBool32                                fragmentShadingRateWithCustomSampleLocations;
+       VkBool32                                fragmentShadingRateStrictMultiplyCombiner;
+};
+
+struct VkPhysicalDeviceFragmentShadingRateKHR
+{
+       VkStructureType         sType;
+       void*                           pNext;
+       VkSampleCountFlags      sampleCounts;
+       VkExtent2D                      fragmentSize;
+};
+
+struct VkRefreshObjectKHR
+{
+       VkObjectType                    objectType;
+       deUint64                                objectHandle;
+       VkRefreshObjectFlagsKHR flags;
+};
+
+struct VkRefreshObjectListKHR
+{
+       VkStructureType                         sType;
+       const void*                                     pNext;
+       deUint32                                        objectCount;
+       const VkRefreshObjectKHR*       pObjects;
+};
+
+struct VkBufferCopy2KHR
+{
+       VkStructureType sType;
+       const void*             pNext;
+       VkDeviceSize    srcOffset;
+       VkDeviceSize    dstOffset;
+       VkDeviceSize    size;
+};
+
+struct VkCopyBufferInfo2KHR
+{
+       VkStructureType                 sType;
+       const void*                             pNext;
+       VkBuffer                                srcBuffer;
+       VkBuffer                                dstBuffer;
+       deUint32                                regionCount;
+       const VkBufferCopy2KHR* pRegions;
+};
+
+struct VkImageCopy2KHR
+{
+       VkStructureType                         sType;
+       const void*                                     pNext;
+       VkImageSubresourceLayers        srcSubresource;
+       VkOffset3D                                      srcOffset;
+       VkImageSubresourceLayers        dstSubresource;
+       VkOffset3D                                      dstOffset;
+       VkExtent3D                                      extent;
+};
+
+struct VkCopyImageInfo2KHR
+{
+       VkStructureType                 sType;
+       const void*                             pNext;
+       VkImage                                 srcImage;
+       VkImageLayout                   srcImageLayout;
+       VkImage                                 dstImage;
+       VkImageLayout                   dstImageLayout;
+       deUint32                                regionCount;
+       const VkImageCopy2KHR*  pRegions;
+};
+
+struct VkBufferImageCopy2KHR
+{
+       VkStructureType                         sType;
+       const void*                                     pNext;
+       VkDeviceSize                            bufferOffset;
+       deUint32                                        bufferRowLength;
+       deUint32                                        bufferImageHeight;
+       VkImageSubresourceLayers        imageSubresource;
+       VkOffset3D                                      imageOffset;
+       VkExtent3D                                      imageExtent;
+};
+
+struct VkCopyBufferToImageInfo2KHR
+{
+       VkStructureType                                 sType;
+       const void*                                             pNext;
+       VkBuffer                                                srcBuffer;
+       VkImage                                                 dstImage;
+       VkImageLayout                                   dstImageLayout;
+       deUint32                                                regionCount;
+       const VkBufferImageCopy2KHR*    pRegions;
+};
+
+struct VkCopyImageToBufferInfo2KHR
+{
+       VkStructureType                                 sType;
+       const void*                                             pNext;
+       VkImage                                                 srcImage;
+       VkImageLayout                                   srcImageLayout;
+       VkBuffer                                                dstBuffer;
+       deUint32                                                regionCount;
+       const VkBufferImageCopy2KHR*    pRegions;
+};
+
+struct VkImageBlit2KHR
+{
+       VkStructureType                         sType;
+       const void*                                     pNext;
+       VkImageSubresourceLayers        srcSubresource;
+       VkOffset3D                                      srcOffsets[2];
+       VkImageSubresourceLayers        dstSubresource;
+       VkOffset3D                                      dstOffsets[2];
+};
+
+struct VkBlitImageInfo2KHR
+{
+       VkStructureType                 sType;
+       const void*                             pNext;
+       VkImage                                 srcImage;
+       VkImageLayout                   srcImageLayout;
+       VkImage                                 dstImage;
+       VkImageLayout                   dstImageLayout;
+       deUint32                                regionCount;
+       const VkImageBlit2KHR*  pRegions;
+       VkFilter                                filter;
+};
+
+struct VkImageResolve2KHR
+{
+       VkStructureType                         sType;
+       const void*                                     pNext;
+       VkImageSubresourceLayers        srcSubresource;
+       VkOffset3D                                      srcOffset;
+       VkImageSubresourceLayers        dstSubresource;
+       VkOffset3D                                      dstOffset;
+       VkExtent3D                                      extent;
+};
+
+struct VkResolveImageInfo2KHR
+{
+       VkStructureType                         sType;
+       const void*                                     pNext;
+       VkImage                                         srcImage;
+       VkImageLayout                           srcImageLayout;
+       VkImage                                         dstImage;
+       VkImageLayout                           dstImageLayout;
+       deUint32                                        regionCount;
+       const VkImageResolve2KHR*       pRegions;
+};
+
+struct VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkBool32                textureCompressionASTC_HDR;
+};
+
+struct VkImageViewASTCDecodeModeEXT
+{
+       VkStructureType sType;
+       const void*             pNext;
+       VkFormat                decodeMode;
+};
+
+struct VkPhysicalDeviceASTCDecodeFeaturesEXT
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkBool32                decodeModeSharedExponent;
+};
+
+struct VkSurfaceCapabilities2EXT
+{
+       VkStructureType                                 sType;
+       void*                                                   pNext;
+       deUint32                                                minImageCount;
+       deUint32                                                maxImageCount;
+       VkExtent2D                                              currentExtent;
+       VkExtent2D                                              minImageExtent;
+       VkExtent2D                                              maxImageExtent;
+       deUint32                                                maxImageArrayLayers;
+       VkSurfaceTransformFlagsKHR              supportedTransforms;
+       VkSurfaceTransformFlagBitsKHR   currentTransform;
+       VkCompositeAlphaFlagsKHR                supportedCompositeAlpha;
+       VkImageUsageFlags                               supportedUsageFlags;
+       VkSurfaceCounterFlagsEXT                supportedSurfaceCounters;
+};
+
+struct VkDisplayPowerInfoEXT
+{
+       VkStructureType                 sType;
+       const void*                             pNext;
+       VkDisplayPowerStateEXT  powerState;
+};
+
+struct VkDeviceEventInfoEXT
+{
+       VkStructureType                 sType;
+       const void*                             pNext;
+       VkDeviceEventTypeEXT    deviceEvent;
+};
+
+struct VkDisplayEventInfoEXT
+{
+       VkStructureType                 sType;
+       const void*                             pNext;
+       VkDisplayEventTypeEXT   displayEvent;
+};
+
+struct VkSwapchainCounterCreateInfoEXT
+{
+       VkStructureType                         sType;
+       const void*                                     pNext;
+       VkSurfaceCounterFlagsEXT        surfaceCounters;
+};
+
+struct VkPhysicalDeviceDiscardRectanglePropertiesEXT
+{
+       VkStructureType sType;
+       void*                   pNext;
+       deUint32                maxDiscardRectangles;
+};
+
+struct VkPipelineDiscardRectangleStateCreateInfoEXT
+{
+       VkStructureType                                                                 sType;
+       const void*                                                                             pNext;
+       VkPipelineDiscardRectangleStateCreateFlagsEXT   flags;
+       VkDiscardRectangleModeEXT                                               discardRectangleMode;
+       deUint32                                                                                discardRectangleCount;
+       const VkRect2D*                                                                 pDiscardRectangles;
+};
+
+struct VkPhysicalDeviceConservativeRasterizationPropertiesEXT
+{
+       VkStructureType sType;
+       void*                   pNext;
+       float                   primitiveOverestimationSize;
+       float                   maxExtraPrimitiveOverestimationSize;
+       float                   extraPrimitiveOverestimationSizeGranularity;
+       VkBool32                primitiveUnderestimation;
+       VkBool32                conservativePointAndLineRasterization;
+       VkBool32                degenerateTrianglesRasterized;
+       VkBool32                degenerateLinesRasterized;
+       VkBool32                fullyCoveredFragmentShaderInputVariable;
+       VkBool32                conservativeRasterizationPostDepthCoverage;
+};
+
+struct VkPipelineRasterizationConservativeStateCreateInfoEXT
+{
+       VkStructureType                                                                                 sType;
+       const void*                                                                                             pNext;
+       VkPipelineRasterizationConservativeStateCreateFlagsEXT  flags;
+       VkConservativeRasterizationModeEXT                                              conservativeRasterizationMode;
+       float                                                                                                   extraPrimitiveOverestimationSize;
+};
+
+struct VkPhysicalDeviceDepthClipEnableFeaturesEXT
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkBool32                depthClipEnable;
+};
+
+struct VkPipelineRasterizationDepthClipStateCreateInfoEXT
+{
+       VkStructureType                                                                         sType;
+       const void*                                                                                     pNext;
+       VkPipelineRasterizationDepthClipStateCreateFlagsEXT     flags;
+       VkBool32                                                                                        depthClipEnable;
+};
+
+struct VkXYColorEXT
+{
+       float   x;
+       float   y;
+};
+
+struct VkHdrMetadataEXT
+{
+       VkStructureType sType;
+       const void*             pNext;
+       VkXYColorEXT    displayPrimaryRed;
+       VkXYColorEXT    displayPrimaryGreen;
+       VkXYColorEXT    displayPrimaryBlue;
+       VkXYColorEXT    whitePoint;
+       float                   maxLuminance;
+       float                   minLuminance;
+       float                   maxContentLightLevel;
+       float                   maxFrameAverageLightLevel;
+};
+
+struct VkSampleLocationEXT
+{
+       float   x;
+       float   y;
+};
+
+struct VkSampleLocationsInfoEXT
+{
+       VkStructureType                         sType;
+       const void*                                     pNext;
+       VkSampleCountFlagBits           sampleLocationsPerPixel;
+       VkExtent2D                                      sampleLocationGridSize;
+       deUint32                                        sampleLocationsCount;
+       const VkSampleLocationEXT*      pSampleLocations;
+};
+
+struct VkAttachmentSampleLocationsEXT
+{
+       deUint32                                        attachmentIndex;
+       VkSampleLocationsInfoEXT        sampleLocationsInfo;
+};
+
+struct VkSubpassSampleLocationsEXT
+{
+       deUint32                                        subpassIndex;
+       VkSampleLocationsInfoEXT        sampleLocationsInfo;
+};
+
+struct VkRenderPassSampleLocationsBeginInfoEXT
+{
+       VkStructureType                                                 sType;
+       const void*                                                             pNext;
+       deUint32                                                                attachmentInitialSampleLocationsCount;
+       const VkAttachmentSampleLocationsEXT*   pAttachmentInitialSampleLocations;
+       deUint32                                                                postSubpassSampleLocationsCount;
+       const VkSubpassSampleLocationsEXT*              pPostSubpassSampleLocations;
+};
+
+struct VkPipelineSampleLocationsStateCreateInfoEXT
+{
+       VkStructureType                         sType;
+       const void*                                     pNext;
+       VkBool32                                        sampleLocationsEnable;
+       VkSampleLocationsInfoEXT        sampleLocationsInfo;
+};
+
+struct VkPhysicalDeviceSampleLocationsPropertiesEXT
+{
+       VkStructureType         sType;
+       void*                           pNext;
+       VkSampleCountFlags      sampleLocationSampleCounts;
+       VkExtent2D                      maxSampleLocationGridSize;
+       float                           sampleLocationCoordinateRange[2];
+       deUint32                        sampleLocationSubPixelBits;
+       VkBool32                        variableSampleLocations;
+};
+
+struct VkMultisamplePropertiesEXT
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkExtent2D              maxSampleLocationGridSize;
+};
+
+struct VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkBool32                advancedBlendCoherentOperations;
+};
+
+struct VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT
+{
+       VkStructureType sType;
+       void*                   pNext;
+       deUint32                advancedBlendMaxColorAttachments;
+       VkBool32                advancedBlendIndependentBlend;
+       VkBool32                advancedBlendNonPremultipliedSrcColor;
+       VkBool32                advancedBlendNonPremultipliedDstColor;
+       VkBool32                advancedBlendCorrelatedOverlap;
+       VkBool32                advancedBlendAllOperations;
+};
+
+struct VkPipelineColorBlendAdvancedStateCreateInfoEXT
+{
+       VkStructureType         sType;
+       const void*                     pNext;
+       VkBool32                        srcPremultiplied;
+       VkBool32                        dstPremultiplied;
+       VkBlendOverlapEXT       blendOverlap;
+};
+
+struct VkDrmFormatModifierPropertiesEXT
+{
+       deUint64                                drmFormatModifier;
+       deUint32                                drmFormatModifierPlaneCount;
+       VkFormatFeatureFlags    drmFormatModifierTilingFeatures;
+};
+
+struct VkDrmFormatModifierPropertiesListEXT
+{
+       VkStructureType                                         sType;
+       void*                                                           pNext;
+       deUint32                                                        drmFormatModifierCount;
+       VkDrmFormatModifierPropertiesEXT*       pDrmFormatModifierProperties;
+};
+
+struct VkPhysicalDeviceImageDrmFormatModifierInfoEXT
+{
+       VkStructureType sType;
+       const void*             pNext;
+       deUint64                drmFormatModifier;
+       VkSharingMode   sharingMode;
+       deUint32                queueFamilyIndexCount;
+       const deUint32* pQueueFamilyIndices;
+};
+
+struct VkImageDrmFormatModifierListCreateInfoEXT
+{
+       VkStructureType sType;
+       const void*             pNext;
+       deUint32                drmFormatModifierCount;
+       const deUint64* pDrmFormatModifiers;
+};
+
+struct VkImageDrmFormatModifierExplicitCreateInfoEXT
+{
+       VkStructureType                         sType;
+       const void*                                     pNext;
+       deUint64                                        drmFormatModifier;
+       deUint32                                        drmFormatModifierPlaneCount;
+       const VkSubresourceLayout*      pPlaneLayouts;
+};
+
+struct VkImageDrmFormatModifierPropertiesEXT
+{
+       VkStructureType sType;
+       void*                   pNext;
+       deUint64                drmFormatModifier;
+};
+
+struct VkPhysicalDeviceImageViewImageFormatInfoEXT
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkImageViewType imageViewType;
+};
+
+struct VkFilterCubicImageViewImageFormatPropertiesEXT
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkBool32                filterCubic;
+       VkBool32                filterCubicMinmax;
+};
+
+struct VkDeviceQueueGlobalPriorityCreateInfoEXT
+{
+       VkStructureType                         sType;
+       const void*                                     pNext;
+       VkQueueGlobalPriorityEXT        globalPriority;
+};
+
+struct VkImportMemoryHostPointerInfoEXT
+{
+       VkStructureType                                         sType;
+       const void*                                                     pNext;
+       VkExternalMemoryHandleTypeFlagBits      handleType;
+       void*                                                           pHostPointer;
+};
+
+struct VkMemoryHostPointerPropertiesEXT
+{
+       VkStructureType sType;
+       void*                   pNext;
+       deUint32                memoryTypeBits;
+};
+
+struct VkPhysicalDeviceExternalMemoryHostPropertiesEXT
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkDeviceSize    minImportedHostPointerAlignment;
+};
+
+struct VkCalibratedTimestampInfoEXT
+{
+       VkStructureType sType;
+       const void*             pNext;
+       VkTimeDomainEXT timeDomain;
+};
+
+struct VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT
+{
+       VkStructureType sType;
+       void*                   pNext;
+       deUint32                maxVertexAttribDivisor;
+};
+
+struct VkVertexInputBindingDivisorDescriptionEXT
+{
+       deUint32        binding;
+       deUint32        divisor;
+};
+
+struct VkPipelineVertexInputDivisorStateCreateInfoEXT
+{
+       VkStructureType                                                                         sType;
+       const void*                                                                                     pNext;
+       deUint32                                                                                        vertexBindingDivisorCount;
+       const VkVertexInputBindingDivisorDescriptionEXT*        pVertexBindingDivisors;
+};
+
+struct VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkBool32                vertexAttributeInstanceRateDivisor;
+       VkBool32                vertexAttributeInstanceRateZeroDivisor;
+};
+
+struct VkPhysicalDevicePCIBusInfoPropertiesEXT
+{
+       VkStructureType sType;
+       void*                   pNext;
+       deUint32                pciDomain;
+       deUint32                pciBus;
+       deUint32                pciDevice;
+       deUint32                pciFunction;
+};
+
+struct VkPhysicalDeviceSubgroupSizeControlFeaturesEXT
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkBool32                subgroupSizeControl;
+       VkBool32                computeFullSubgroups;
+};
+
+struct VkPhysicalDeviceSubgroupSizeControlPropertiesEXT
+{
+       VkStructureType         sType;
+       void*                           pNext;
+       deUint32                        minSubgroupSize;
+       deUint32                        maxSubgroupSize;
+       deUint32                        maxComputeWorkgroupSubgroups;
+       VkShaderStageFlags      requiredSubgroupSizeStages;
+};
+
+struct VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT
+{
+       VkStructureType sType;
+       void*                   pNext;
+       deUint32                requiredSubgroupSize;
+};
+
+struct VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkBool32                shaderImageInt64Atomics;
+       VkBool32                sparseImageInt64Atomics;
+};
+
+struct VkPhysicalDeviceMemoryBudgetPropertiesEXT
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkDeviceSize    heapBudget[VK_MAX_MEMORY_HEAPS];
+       VkDeviceSize    heapUsage[VK_MAX_MEMORY_HEAPS];
+};
+
+struct VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkBool32                fragmentShaderSampleInterlock;
+       VkBool32                fragmentShaderPixelInterlock;
+       VkBool32                fragmentShaderShadingRateInterlock;
+};
+
+struct VkPhysicalDeviceYcbcrImageArraysFeaturesEXT
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkBool32                ycbcrImageArrays;
+};
+
+struct VkHeadlessSurfaceCreateInfoEXT
+{
+       VkStructureType                                 sType;
+       const void*                                             pNext;
+       VkHeadlessSurfaceCreateFlagsEXT flags;
+};
+
+struct VkPhysicalDeviceLineRasterizationFeaturesEXT
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkBool32                rectangularLines;
+       VkBool32                bresenhamLines;
+       VkBool32                smoothLines;
+       VkBool32                stippledRectangularLines;
+       VkBool32                stippledBresenhamLines;
+       VkBool32                stippledSmoothLines;
+};
+
+struct VkPhysicalDeviceLineRasterizationPropertiesEXT
+{
+       VkStructureType sType;
+       void*                   pNext;
+       deUint32                lineSubPixelPrecisionBits;
+};
+
+struct VkPipelineRasterizationLineStateCreateInfoEXT
+{
+       VkStructureType                         sType;
+       const void*                                     pNext;
+       VkLineRasterizationModeEXT      lineRasterizationMode;
+       VkBool32                                        stippledLineEnable;
+       deUint32                                        lineStippleFactor;
+       deUint16                                        lineStipplePattern;
+};
+
+struct VkPhysicalDeviceShaderAtomicFloatFeaturesEXT
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkBool32                shaderBufferFloat32Atomics;
+       VkBool32                shaderBufferFloat32AtomicAdd;
+       VkBool32                shaderBufferFloat64Atomics;
+       VkBool32                shaderBufferFloat64AtomicAdd;
+       VkBool32                shaderSharedFloat32Atomics;
+       VkBool32                shaderSharedFloat32AtomicAdd;
+       VkBool32                shaderSharedFloat64Atomics;
+       VkBool32                shaderSharedFloat64AtomicAdd;
+       VkBool32                shaderImageFloat32Atomics;
+       VkBool32                shaderImageFloat32AtomicAdd;
+       VkBool32                sparseImageFloat32Atomics;
+       VkBool32                sparseImageFloat32AtomicAdd;
+};
+
+struct VkPhysicalDeviceIndexTypeUint8FeaturesEXT
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkBool32                indexTypeUint8;
+};
+
+struct VkPhysicalDeviceExtendedDynamicStateFeaturesEXT
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkBool32                extendedDynamicState;
+};
+
+struct VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkBool32                shaderDemoteToHelperInvocation;
+};
+
+struct VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkBool32                texelBufferAlignment;
+};
+
+struct VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkDeviceSize    storageTexelBufferOffsetAlignmentBytes;
+       VkBool32                storageTexelBufferOffsetSingleTexelAlignment;
+       VkDeviceSize    uniformTexelBufferOffsetAlignmentBytes;
+       VkBool32                uniformTexelBufferOffsetSingleTexelAlignment;
+};
+
+struct VkPhysicalDeviceRobustness2FeaturesEXT
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkBool32                robustBufferAccess2;
+       VkBool32                robustImageAccess2;
+       VkBool32                nullDescriptor;
+};
+
+struct VkPhysicalDeviceRobustness2PropertiesEXT
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkDeviceSize    robustStorageBufferAccessSizeAlignment;
+       VkDeviceSize    robustUniformBufferAccessSizeAlignment;
+};
+
+struct VkSamplerCustomBorderColorCreateInfoEXT
+{
+       VkStructureType         sType;
+       const void*                     pNext;
+       VkClearColorValue       customBorderColor;
+       VkFormat                        format;
+};
+
+struct VkPhysicalDeviceCustomBorderColorPropertiesEXT
+{
+       VkStructureType sType;
+       void*                   pNext;
+       deUint32                maxCustomBorderColorSamplers;
+};
+
+struct VkPhysicalDeviceCustomBorderColorFeaturesEXT
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkBool32                customBorderColors;
+       VkBool32                customBorderColorWithoutFormat;
+};
+
+struct VkPhysicalDeviceImageRobustnessFeaturesEXT
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkBool32                robustImageAccess;
+};
+
+struct VkPhysicalDevice4444FormatsFeaturesEXT
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkBool32                formatA4R4G4B4;
+       VkBool32                formatA4B4G4R4;
+};
+
+typedef VkFaultData VkFaultDataKHR;
+
+typedef VkFaultCallbackInfo VkFaultCallbackInfoKHR;
+
+typedef VkPhysicalDeviceFaultHandlingProperties VkPhysicalDeviceFaultHandlingPropertiesKHR;
+
+typedef VkPhysicalDevicePipelineIdentifierFeatures VkPhysicalDevicePipelineIdentifierFeaturesKHR;
+
+typedef VkPipelineIdentifierInfo VkPipelineIdentifierInfoKHR;
+
+typedef VkPhysicalDeviceVariablePointersFeatures VkPhysicalDeviceVariablePointerFeatures;
+
+typedef VkPhysicalDeviceShaderDrawParametersFeatures VkPhysicalDeviceShaderDrawParameterFeatures;
+
diff --git a/external/vulkancts/framework/vulkan/generated/vulkansc/vkSupportedExtensions.inl b/external/vulkancts/framework/vulkan/generated/vulkansc/vkSupportedExtensions.inl
new file mode 100644 (file)
index 0000000..1d4de1b
--- /dev/null
@@ -0,0 +1,14 @@
+/* WARNING: This is auto-generated file. Do not modify, since changes will
+ * be lost! Modify the generating script instead.
+ */
+
+void getCoreDeviceExtensionsImpl (deUint32 coreVersion, ::std::vector<const char*>&)
+{
+       DE_UNREF(coreVersion);
+}
+
+void getCoreInstanceExtensionsImpl (deUint32 coreVersion, ::std::vector<const char*>&)
+{
+       DE_UNREF(coreVersion);
+}
+
diff --git a/external/vulkancts/framework/vulkan/generated/vulkansc/vkTypeUtil.inl b/external/vulkancts/framework/vulkan/generated/vulkansc/vkTypeUtil.inl
new file mode 100644 (file)
index 0000000..e43d035
--- /dev/null
@@ -0,0 +1,463 @@
+/* WARNING: This is auto-generated file. Do not modify, since changes will
+ * be lost! Modify the generating script instead.
+ */
+
+inline VkExtent2D makeExtent2D (deUint32 width, deUint32 height)
+{
+       VkExtent2D res;
+       res.width       = width;
+       res.height      = height;
+       return res;
+}
+
+inline VkExtent3D makeExtent3D (deUint32 width, deUint32 height, deUint32 depth)
+{
+       VkExtent3D res;
+       res.width       = width;
+       res.height      = height;
+       res.depth       = depth;
+       return res;
+}
+
+inline VkOffset2D makeOffset2D (deInt32 x, deInt32 y)
+{
+       VkOffset2D res;
+       res.x   = x;
+       res.y   = y;
+       return res;
+}
+
+inline VkOffset3D makeOffset3D (deInt32 x, deInt32 y, deInt32 z)
+{
+       VkOffset3D res;
+       res.x   = x;
+       res.y   = y;
+       res.z   = z;
+       return res;
+}
+
+inline VkDispatchIndirectCommand makeDispatchIndirectCommand (deUint32 x, deUint32 y, deUint32 z)
+{
+       VkDispatchIndirectCommand res;
+       res.x   = x;
+       res.y   = y;
+       res.z   = z;
+       return res;
+}
+
+inline VkDrawIndexedIndirectCommand makeDrawIndexedIndirectCommand (deUint32 indexCount, deUint32 instanceCount, deUint32 firstIndex, deInt32 vertexOffset, deUint32 firstInstance)
+{
+       VkDrawIndexedIndirectCommand res;
+       res.indexCount          = indexCount;
+       res.instanceCount       = instanceCount;
+       res.firstIndex          = firstIndex;
+       res.vertexOffset        = vertexOffset;
+       res.firstInstance       = firstInstance;
+       return res;
+}
+
+inline VkDrawIndirectCommand makeDrawIndirectCommand (deUint32 vertexCount, deUint32 instanceCount, deUint32 firstVertex, deUint32 firstInstance)
+{
+       VkDrawIndirectCommand res;
+       res.vertexCount         = vertexCount;
+       res.instanceCount       = instanceCount;
+       res.firstVertex         = firstVertex;
+       res.firstInstance       = firstInstance;
+       return res;
+}
+
+inline VkImageSubresourceRange makeImageSubresourceRange (VkImageAspectFlags aspectMask, deUint32 baseMipLevel, deUint32 levelCount, deUint32 baseArrayLayer, deUint32 layerCount)
+{
+       VkImageSubresourceRange res;
+       res.aspectMask          = aspectMask;
+       res.baseMipLevel        = baseMipLevel;
+       res.levelCount          = levelCount;
+       res.baseArrayLayer      = baseArrayLayer;
+       res.layerCount          = layerCount;
+       return res;
+}
+
+inline VkAllocationCallbacks makeAllocationCallbacks (void* pUserData, PFN_vkAllocationFunction pfnAllocation, PFN_vkReallocationFunction pfnReallocation, PFN_vkFreeFunction pfnFree, PFN_vkInternalAllocationNotification pfnInternalAllocation, PFN_vkInternalFreeNotification pfnInternalFree)
+{
+       VkAllocationCallbacks res;
+       res.pUserData                           = pUserData;
+       res.pfnAllocation                       = pfnAllocation;
+       res.pfnReallocation                     = pfnReallocation;
+       res.pfnFree                                     = pfnFree;
+       res.pfnInternalAllocation       = pfnInternalAllocation;
+       res.pfnInternalFree                     = pfnInternalFree;
+       return res;
+}
+
+inline VkMemoryRequirements makeMemoryRequirements (VkDeviceSize size, VkDeviceSize alignment, deUint32 memoryTypeBits)
+{
+       VkMemoryRequirements res;
+       res.size                        = size;
+       res.alignment           = alignment;
+       res.memoryTypeBits      = memoryTypeBits;
+       return res;
+}
+
+inline VkSparseMemoryBind makeSparseMemoryBind (VkDeviceSize resourceOffset, VkDeviceSize size, VkDeviceMemory memory, VkDeviceSize memoryOffset, VkSparseMemoryBindFlags flags)
+{
+       VkSparseMemoryBind res;
+       res.resourceOffset      = resourceOffset;
+       res.size                        = size;
+       res.memory                      = memory;
+       res.memoryOffset        = memoryOffset;
+       res.flags                       = flags;
+       return res;
+}
+
+inline VkSparseBufferMemoryBindInfo makeSparseBufferMemoryBindInfo (VkBuffer buffer, deUint32 bindCount, const VkSparseMemoryBind* pBinds)
+{
+       VkSparseBufferMemoryBindInfo res;
+       res.buffer              = buffer;
+       res.bindCount   = bindCount;
+       res.pBinds              = pBinds;
+       return res;
+}
+
+inline VkSparseImageOpaqueMemoryBindInfo makeSparseImageOpaqueMemoryBindInfo (VkImage image, deUint32 bindCount, const VkSparseMemoryBind* pBinds)
+{
+       VkSparseImageOpaqueMemoryBindInfo res;
+       res.image               = image;
+       res.bindCount   = bindCount;
+       res.pBinds              = pBinds;
+       return res;
+}
+
+inline VkImageSubresource makeImageSubresource (VkImageAspectFlags aspectMask, deUint32 mipLevel, deUint32 arrayLayer)
+{
+       VkImageSubresource res;
+       res.aspectMask  = aspectMask;
+       res.mipLevel    = mipLevel;
+       res.arrayLayer  = arrayLayer;
+       return res;
+}
+
+inline VkSparseImageMemoryBindInfo makeSparseImageMemoryBindInfo (VkImage image, deUint32 bindCount, const VkSparseImageMemoryBind* pBinds)
+{
+       VkSparseImageMemoryBindInfo res;
+       res.image               = image;
+       res.bindCount   = bindCount;
+       res.pBinds              = pBinds;
+       return res;
+}
+
+inline VkSubresourceLayout makeSubresourceLayout (VkDeviceSize offset, VkDeviceSize size, VkDeviceSize rowPitch, VkDeviceSize arrayPitch, VkDeviceSize depthPitch)
+{
+       VkSubresourceLayout res;
+       res.offset              = offset;
+       res.size                = size;
+       res.rowPitch    = rowPitch;
+       res.arrayPitch  = arrayPitch;
+       res.depthPitch  = depthPitch;
+       return res;
+}
+
+inline VkComponentMapping makeComponentMapping (VkComponentSwizzle r, VkComponentSwizzle g, VkComponentSwizzle b, VkComponentSwizzle a)
+{
+       VkComponentMapping res;
+       res.r   = r;
+       res.g   = g;
+       res.b   = b;
+       res.a   = a;
+       return res;
+}
+
+inline VkSpecializationMapEntry makeSpecializationMapEntry (deUint32 constantID, deUint32 offset, deUintptr size)
+{
+       VkSpecializationMapEntry res;
+       res.constantID  = constantID;
+       res.offset              = offset;
+       res.size                = size;
+       return res;
+}
+
+inline VkSpecializationInfo makeSpecializationInfo (deUint32 mapEntryCount, const VkSpecializationMapEntry* pMapEntries, deUintptr dataSize, const void* pData)
+{
+       VkSpecializationInfo res;
+       res.mapEntryCount       = mapEntryCount;
+       res.pMapEntries         = pMapEntries;
+       res.dataSize            = dataSize;
+       res.pData                       = pData;
+       return res;
+}
+
+inline VkVertexInputBindingDescription makeVertexInputBindingDescription (deUint32 binding, deUint32 stride, VkVertexInputRate inputRate)
+{
+       VkVertexInputBindingDescription res;
+       res.binding             = binding;
+       res.stride              = stride;
+       res.inputRate   = inputRate;
+       return res;
+}
+
+inline VkVertexInputAttributeDescription makeVertexInputAttributeDescription (deUint32 location, deUint32 binding, VkFormat format, deUint32 offset)
+{
+       VkVertexInputAttributeDescription res;
+       res.location    = location;
+       res.binding             = binding;
+       res.format              = format;
+       res.offset              = offset;
+       return res;
+}
+
+inline VkViewport makeViewport (float x, float y, float width, float height, float minDepth, float maxDepth)
+{
+       VkViewport res;
+       res.x                   = x;
+       res.y                   = y;
+       res.width               = width;
+       res.height              = height;
+       res.minDepth    = minDepth;
+       res.maxDepth    = maxDepth;
+       return res;
+}
+
+inline VkStencilOpState makeStencilOpState (VkStencilOp failOp, VkStencilOp passOp, VkStencilOp depthFailOp, VkCompareOp compareOp, deUint32 compareMask, deUint32 writeMask, deUint32 reference)
+{
+       VkStencilOpState res;
+       res.failOp              = failOp;
+       res.passOp              = passOp;
+       res.depthFailOp = depthFailOp;
+       res.compareOp   = compareOp;
+       res.compareMask = compareMask;
+       res.writeMask   = writeMask;
+       res.reference   = reference;
+       return res;
+}
+
+inline VkPipelineColorBlendAttachmentState makePipelineColorBlendAttachmentState (VkBool32 blendEnable, VkBlendFactor srcColorBlendFactor, VkBlendFactor dstColorBlendFactor, VkBlendOp colorBlendOp, VkBlendFactor srcAlphaBlendFactor, VkBlendFactor dstAlphaBlendFactor, VkBlendOp alphaBlendOp, VkColorComponentFlags colorWriteMask)
+{
+       VkPipelineColorBlendAttachmentState res;
+       res.blendEnable                 = blendEnable;
+       res.srcColorBlendFactor = srcColorBlendFactor;
+       res.dstColorBlendFactor = dstColorBlendFactor;
+       res.colorBlendOp                = colorBlendOp;
+       res.srcAlphaBlendFactor = srcAlphaBlendFactor;
+       res.dstAlphaBlendFactor = dstAlphaBlendFactor;
+       res.alphaBlendOp                = alphaBlendOp;
+       res.colorWriteMask              = colorWriteMask;
+       return res;
+}
+
+inline VkPushConstantRange makePushConstantRange (VkShaderStageFlags stageFlags, deUint32 offset, deUint32 size)
+{
+       VkPushConstantRange res;
+       res.stageFlags  = stageFlags;
+       res.offset              = offset;
+       res.size                = size;
+       return res;
+}
+
+inline VkDescriptorBufferInfo makeDescriptorBufferInfo (VkBuffer buffer, VkDeviceSize offset, VkDeviceSize range)
+{
+       VkDescriptorBufferInfo res;
+       res.buffer      = buffer;
+       res.offset      = offset;
+       res.range       = range;
+       return res;
+}
+
+inline VkDescriptorImageInfo makeDescriptorImageInfo (VkSampler sampler, VkImageView imageView, VkImageLayout imageLayout)
+{
+       VkDescriptorImageInfo res;
+       res.sampler             = sampler;
+       res.imageView   = imageView;
+       res.imageLayout = imageLayout;
+       return res;
+}
+
+inline VkDescriptorPoolSize makeDescriptorPoolSize (VkDescriptorType type, deUint32 descriptorCount)
+{
+       VkDescriptorPoolSize res;
+       res.type                        = type;
+       res.descriptorCount     = descriptorCount;
+       return res;
+}
+
+inline VkDescriptorSetLayoutBinding makeDescriptorSetLayoutBinding (deUint32 binding, VkDescriptorType descriptorType, deUint32 descriptorCount, VkShaderStageFlags stageFlags, const VkSampler* pImmutableSamplers)
+{
+       VkDescriptorSetLayoutBinding res;
+       res.binding                             = binding;
+       res.descriptorType              = descriptorType;
+       res.descriptorCount             = descriptorCount;
+       res.stageFlags                  = stageFlags;
+       res.pImmutableSamplers  = pImmutableSamplers;
+       return res;
+}
+
+inline VkAttachmentDescription makeAttachmentDescription (VkAttachmentDescriptionFlags flags, VkFormat format, VkSampleCountFlagBits samples, VkAttachmentLoadOp loadOp, VkAttachmentStoreOp storeOp, VkAttachmentLoadOp stencilLoadOp, VkAttachmentStoreOp stencilStoreOp, VkImageLayout initialLayout, VkImageLayout finalLayout)
+{
+       VkAttachmentDescription res;
+       res.flags                       = flags;
+       res.format                      = format;
+       res.samples                     = samples;
+       res.loadOp                      = loadOp;
+       res.storeOp                     = storeOp;
+       res.stencilLoadOp       = stencilLoadOp;
+       res.stencilStoreOp      = stencilStoreOp;
+       res.initialLayout       = initialLayout;
+       res.finalLayout         = finalLayout;
+       return res;
+}
+
+inline VkAttachmentReference makeAttachmentReference (deUint32 attachment, VkImageLayout layout)
+{
+       VkAttachmentReference res;
+       res.attachment  = attachment;
+       res.layout              = layout;
+       return res;
+}
+
+inline VkSubpassDescription makeSubpassDescription (VkSubpassDescriptionFlags flags, VkPipelineBindPoint pipelineBindPoint, deUint32 inputAttachmentCount, const VkAttachmentReference* pInputAttachments, deUint32 colorAttachmentCount, const VkAttachmentReference* pColorAttachments, const VkAttachmentReference* pResolveAttachments, const VkAttachmentReference* pDepthStencilAttachment, deUint32 preserveAttachmentCount, const deUint32* pPreserveAttachments)
+{
+       VkSubpassDescription res;
+       res.flags                                       = flags;
+       res.pipelineBindPoint           = pipelineBindPoint;
+       res.inputAttachmentCount        = inputAttachmentCount;
+       res.pInputAttachments           = pInputAttachments;
+       res.colorAttachmentCount        = colorAttachmentCount;
+       res.pColorAttachments           = pColorAttachments;
+       res.pResolveAttachments         = pResolveAttachments;
+       res.pDepthStencilAttachment     = pDepthStencilAttachment;
+       res.preserveAttachmentCount     = preserveAttachmentCount;
+       res.pPreserveAttachments        = pPreserveAttachments;
+       return res;
+}
+
+inline VkSubpassDependency makeSubpassDependency (deUint32 srcSubpass, deUint32 dstSubpass, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkAccessFlags srcAccessMask, VkAccessFlags dstAccessMask, VkDependencyFlags dependencyFlags)
+{
+       VkSubpassDependency res;
+       res.srcSubpass          = srcSubpass;
+       res.dstSubpass          = dstSubpass;
+       res.srcStageMask        = srcStageMask;
+       res.dstStageMask        = dstStageMask;
+       res.srcAccessMask       = srcAccessMask;
+       res.dstAccessMask       = dstAccessMask;
+       res.dependencyFlags     = dependencyFlags;
+       return res;
+}
+
+inline VkBufferCopy makeBufferCopy (VkDeviceSize srcOffset, VkDeviceSize dstOffset, VkDeviceSize size)
+{
+       VkBufferCopy res;
+       res.srcOffset   = srcOffset;
+       res.dstOffset   = dstOffset;
+       res.size                = size;
+       return res;
+}
+
+inline VkImageSubresourceLayers makeImageSubresourceLayers (VkImageAspectFlags aspectMask, deUint32 mipLevel, deUint32 baseArrayLayer, deUint32 layerCount)
+{
+       VkImageSubresourceLayers res;
+       res.aspectMask          = aspectMask;
+       res.mipLevel            = mipLevel;
+       res.baseArrayLayer      = baseArrayLayer;
+       res.layerCount          = layerCount;
+       return res;
+}
+
+inline VkClearDepthStencilValue makeClearDepthStencilValue (float depth, deUint32 stencil)
+{
+       VkClearDepthStencilValue res;
+       res.depth       = depth;
+       res.stencil     = stencil;
+       return res;
+}
+
+inline VkInputAttachmentAspectReference makeInputAttachmentAspectReference (deUint32 subpass, deUint32 inputAttachmentIndex, VkImageAspectFlags aspectMask)
+{
+       VkInputAttachmentAspectReference res;
+       res.subpass                                     = subpass;
+       res.inputAttachmentIndex        = inputAttachmentIndex;
+       res.aspectMask                          = aspectMask;
+       return res;
+}
+
+inline VkExternalMemoryProperties makeExternalMemoryProperties (VkExternalMemoryFeatureFlags externalMemoryFeatures, VkExternalMemoryHandleTypeFlags exportFromImportedHandleTypes, VkExternalMemoryHandleTypeFlags compatibleHandleTypes)
+{
+       VkExternalMemoryProperties res;
+       res.externalMemoryFeatures                      = externalMemoryFeatures;
+       res.exportFromImportedHandleTypes       = exportFromImportedHandleTypes;
+       res.compatibleHandleTypes                       = compatibleHandleTypes;
+       return res;
+}
+
+inline VkConformanceVersion makeConformanceVersion (deUint8 major, deUint8 minor, deUint8 subminor, deUint8 patch)
+{
+       VkConformanceVersion res;
+       res.major               = major;
+       res.minor               = minor;
+       res.subminor    = subminor;
+       res.patch               = patch;
+       return res;
+}
+
+inline VkSurfaceFormatKHR makeSurfaceFormatKHR (VkFormat format, VkColorSpaceKHR colorSpace)
+{
+       VkSurfaceFormatKHR res;
+       res.format              = format;
+       res.colorSpace  = colorSpace;
+       return res;
+}
+
+inline VkDisplayPlanePropertiesKHR makeDisplayPlanePropertiesKHR (VkDisplayKHR currentDisplay, deUint32 currentStackIndex)
+{
+       VkDisplayPlanePropertiesKHR res;
+       res.currentDisplay              = currentDisplay;
+       res.currentStackIndex   = currentStackIndex;
+       return res;
+}
+
+inline VkPresentRegionKHR makePresentRegionKHR (deUint32 rectangleCount, const VkRectLayerKHR* pRectangles)
+{
+       VkPresentRegionKHR res;
+       res.rectangleCount      = rectangleCount;
+       res.pRectangles         = pRectangles;
+       return res;
+}
+
+inline VkRefreshObjectKHR makeRefreshObjectKHR (VkObjectType objectType, deUint64 objectHandle, VkRefreshObjectFlagsKHR flags)
+{
+       VkRefreshObjectKHR res;
+       res.objectType          = objectType;
+       res.objectHandle        = objectHandle;
+       res.flags                       = flags;
+       return res;
+}
+
+inline VkXYColorEXT makeXYColorEXT (float x, float y)
+{
+       VkXYColorEXT res;
+       res.x   = x;
+       res.y   = y;
+       return res;
+}
+
+inline VkSampleLocationEXT makeSampleLocationEXT (float x, float y)
+{
+       VkSampleLocationEXT res;
+       res.x   = x;
+       res.y   = y;
+       return res;
+}
+
+inline VkDrmFormatModifierPropertiesEXT makeDrmFormatModifierPropertiesEXT (deUint64 drmFormatModifier, deUint32 drmFormatModifierPlaneCount, VkFormatFeatureFlags drmFormatModifierTilingFeatures)
+{
+       VkDrmFormatModifierPropertiesEXT res;
+       res.drmFormatModifier                           = drmFormatModifier;
+       res.drmFormatModifierPlaneCount         = drmFormatModifierPlaneCount;
+       res.drmFormatModifierTilingFeatures     = drmFormatModifierTilingFeatures;
+       return res;
+}
+
+inline VkVertexInputBindingDivisorDescriptionEXT makeVertexInputBindingDivisorDescriptionEXT (deUint32 binding, deUint32 divisor)
+{
+       VkVertexInputBindingDivisorDescriptionEXT res;
+       res.binding     = binding;
+       res.divisor     = divisor;
+       return res;
+}
diff --git a/external/vulkancts/framework/vulkan/generated/vulkansc/vkVirtualDeviceInterface.inl b/external/vulkancts/framework/vulkan/generated/vulkansc/vkVirtualDeviceInterface.inl
new file mode 100644 (file)
index 0000000..8fed46a
--- /dev/null
@@ -0,0 +1,190 @@
+/* WARNING: This is auto-generated file. Do not modify, since changes will
+ * be lost! Modify the generating script instead.
+ */
+virtual PFN_vkVoidFunction     getDeviceProcAddr                                               (VkDevice device, const char* pName) const = 0;
+virtual void                           destroyDevice                                                   (VkDevice device, const VkAllocationCallbacks* pAllocator) const = 0;
+virtual void                           getDeviceQueue                                                  (VkDevice device, deUint32 queueFamilyIndex, deUint32 queueIndex, VkQueue* pQueue) const = 0;
+virtual VkResult                       queueSubmit                                                             (VkQueue queue, deUint32 submitCount, const VkSubmitInfo* pSubmits, VkFence fence) const = 0;
+virtual VkResult                       queueWaitIdle                                                   (VkQueue queue) const = 0;
+virtual VkResult                       deviceWaitIdle                                                  (VkDevice device) const = 0;
+virtual VkResult                       allocateMemory                                                  (VkDevice device, const VkMemoryAllocateInfo* pAllocateInfo, const VkAllocationCallbacks* pAllocator, VkDeviceMemory* pMemory) const = 0;
+virtual VkResult                       mapMemory                                                               (VkDevice device, VkDeviceMemory memory, VkDeviceSize offset, VkDeviceSize size, VkMemoryMapFlags flags, void** ppData) const = 0;
+virtual void                           unmapMemory                                                             (VkDevice device, VkDeviceMemory memory) const = 0;
+virtual VkResult                       flushMappedMemoryRanges                                 (VkDevice device, deUint32 memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges) const = 0;
+virtual VkResult                       invalidateMappedMemoryRanges                    (VkDevice device, deUint32 memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges) const = 0;
+virtual void                           getDeviceMemoryCommitment                               (VkDevice device, VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes) const = 0;
+virtual VkResult                       bindBufferMemory                                                (VkDevice device, VkBuffer buffer, VkDeviceMemory memory, VkDeviceSize memoryOffset) const = 0;
+virtual VkResult                       bindImageMemory                                                 (VkDevice device, VkImage image, VkDeviceMemory memory, VkDeviceSize memoryOffset) const = 0;
+virtual void                           getBufferMemoryRequirements                             (VkDevice device, VkBuffer buffer, VkMemoryRequirements* pMemoryRequirements) const = 0;
+virtual void                           getImageMemoryRequirements                              (VkDevice device, VkImage image, VkMemoryRequirements* pMemoryRequirements) const = 0;
+virtual void                           getImageSparseMemoryRequirements                (VkDevice device, VkImage image, deUint32* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements* pSparseMemoryRequirements) const = 0;
+virtual VkResult                       queueBindSparse                                                 (VkQueue queue, deUint32 bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence) const = 0;
+virtual VkResult                       createFence                                                             (VkDevice device, const VkFenceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence) const = 0;
+virtual void                           destroyFence                                                    (VkDevice device, VkFence fence, const VkAllocationCallbacks* pAllocator) const = 0;
+virtual VkResult                       resetFences                                                             (VkDevice device, deUint32 fenceCount, const VkFence* pFences) const = 0;
+virtual VkResult                       getFenceStatus                                                  (VkDevice device, VkFence fence) const = 0;
+virtual VkResult                       waitForFences                                                   (VkDevice device, deUint32 fenceCount, const VkFence* pFences, VkBool32 waitAll, deUint64 timeout) const = 0;
+virtual VkResult                       createSemaphore                                                 (VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSemaphore* pSemaphore) const = 0;
+virtual void                           destroySemaphore                                                (VkDevice device, VkSemaphore semaphore, const VkAllocationCallbacks* pAllocator) const = 0;
+virtual VkResult                       createEvent                                                             (VkDevice device, const VkEventCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkEvent* pEvent) const = 0;
+virtual void                           destroyEvent                                                    (VkDevice device, VkEvent event, const VkAllocationCallbacks* pAllocator) const = 0;
+virtual VkResult                       getEventStatus                                                  (VkDevice device, VkEvent event) const = 0;
+virtual VkResult                       setEvent                                                                (VkDevice device, VkEvent event) const = 0;
+virtual VkResult                       resetEvent                                                              (VkDevice device, VkEvent event) const = 0;
+virtual VkResult                       createQueryPool                                                 (VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkQueryPool* pQueryPool) const = 0;
+virtual VkResult                       getQueryPoolResults                                             (VkDevice device, VkQueryPool queryPool, deUint32 firstQuery, deUint32 queryCount, deUintptr dataSize, void* pData, VkDeviceSize stride, VkQueryResultFlags flags) const = 0;
+virtual VkResult                       createBuffer                                                    (VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBuffer* pBuffer) const = 0;
+virtual void                           destroyBuffer                                                   (VkDevice device, VkBuffer buffer, const VkAllocationCallbacks* pAllocator) const = 0;
+virtual VkResult                       createBufferView                                                (VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBufferView* pView) const = 0;
+virtual void                           destroyBufferView                                               (VkDevice device, VkBufferView bufferView, const VkAllocationCallbacks* pAllocator) const = 0;
+virtual VkResult                       createImage                                                             (VkDevice device, const VkImageCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImage* pImage) const = 0;
+virtual void                           destroyImage                                                    (VkDevice device, VkImage image, const VkAllocationCallbacks* pAllocator) const = 0;
+virtual void                           getImageSubresourceLayout                               (VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout) const = 0;
+virtual VkResult                       createImageView                                                 (VkDevice device, const VkImageViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImageView* pView) const = 0;
+virtual void                           destroyImageView                                                (VkDevice device, VkImageView imageView, const VkAllocationCallbacks* pAllocator) const = 0;
+virtual VkResult                       createPipelineCache                                             (VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineCache* pPipelineCache) const = 0;
+virtual void                           destroyPipelineCache                                    (VkDevice device, VkPipelineCache pipelineCache, const VkAllocationCallbacks* pAllocator) const = 0;
+virtual VkResult                       createGraphicsPipelines                                 (VkDevice device, VkPipelineCache pipelineCache, deUint32 createInfoCount, const VkGraphicsPipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines) const = 0;
+virtual VkResult                       createComputePipelines                                  (VkDevice device, VkPipelineCache pipelineCache, deUint32 createInfoCount, const VkComputePipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines) const = 0;
+virtual void                           destroyPipeline                                                 (VkDevice device, VkPipeline pipeline, const VkAllocationCallbacks* pAllocator) const = 0;
+virtual VkResult                       createPipelineLayout                                    (VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineLayout* pPipelineLayout) const = 0;
+virtual void                           destroyPipelineLayout                                   (VkDevice device, VkPipelineLayout pipelineLayout, const VkAllocationCallbacks* pAllocator) const = 0;
+virtual VkResult                       createSampler                                                   (VkDevice device, const VkSamplerCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSampler* pSampler) const = 0;
+virtual void                           destroySampler                                                  (VkDevice device, VkSampler sampler, const VkAllocationCallbacks* pAllocator) const = 0;
+virtual VkResult                       createDescriptorSetLayout                               (VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorSetLayout* pSetLayout) const = 0;
+virtual void                           destroyDescriptorSetLayout                              (VkDevice device, VkDescriptorSetLayout descriptorSetLayout, const VkAllocationCallbacks* pAllocator) const = 0;
+virtual VkResult                       createDescriptorPool                                    (VkDevice device, const VkDescriptorPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorPool* pDescriptorPool) const = 0;
+virtual VkResult                       resetDescriptorPool                                             (VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorPoolResetFlags flags) const = 0;
+virtual VkResult                       allocateDescriptorSets                                  (VkDevice device, const VkDescriptorSetAllocateInfo* pAllocateInfo, VkDescriptorSet* pDescriptorSets) const = 0;
+virtual VkResult                       freeDescriptorSets                                              (VkDevice device, VkDescriptorPool descriptorPool, deUint32 descriptorSetCount, const VkDescriptorSet* pDescriptorSets) const = 0;
+virtual void                           updateDescriptorSets                                    (VkDevice device, deUint32 descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites, deUint32 descriptorCopyCount, const VkCopyDescriptorSet* pDescriptorCopies) const = 0;
+virtual VkResult                       createFramebuffer                                               (VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFramebuffer* pFramebuffer) const = 0;
+virtual void                           destroyFramebuffer                                              (VkDevice device, VkFramebuffer framebuffer, const VkAllocationCallbacks* pAllocator) const = 0;
+virtual VkResult                       createRenderPass                                                (VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass) const = 0;
+virtual void                           destroyRenderPass                                               (VkDevice device, VkRenderPass renderPass, const VkAllocationCallbacks* pAllocator) const = 0;
+virtual void                           getRenderAreaGranularity                                (VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity) const = 0;
+virtual VkResult                       createCommandPool                                               (VkDevice device, const VkCommandPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkCommandPool* pCommandPool) const = 0;
+virtual VkResult                       resetCommandPool                                                (VkDevice device, VkCommandPool commandPool, VkCommandPoolResetFlags flags) const = 0;
+virtual VkResult                       allocateCommandBuffers                                  (VkDevice device, const VkCommandBufferAllocateInfo* pAllocateInfo, VkCommandBuffer* pCommandBuffers) const = 0;
+virtual void                           freeCommandBuffers                                              (VkDevice device, VkCommandPool commandPool, deUint32 commandBufferCount, const VkCommandBuffer* pCommandBuffers) const = 0;
+virtual VkResult                       beginCommandBuffer                                              (VkCommandBuffer commandBuffer, const VkCommandBufferBeginInfo* pBeginInfo) const = 0;
+virtual VkResult                       endCommandBuffer                                                (VkCommandBuffer commandBuffer) const = 0;
+virtual VkResult                       resetCommandBuffer                                              (VkCommandBuffer commandBuffer, VkCommandBufferResetFlags flags) const = 0;
+virtual void                           cmdBindPipeline                                                 (VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline) const = 0;
+virtual void                           cmdSetViewport                                                  (VkCommandBuffer commandBuffer, deUint32 firstViewport, deUint32 viewportCount, const VkViewport* pViewports) const = 0;
+virtual void                           cmdSetScissor                                                   (VkCommandBuffer commandBuffer, deUint32 firstScissor, deUint32 scissorCount, const VkRect2D* pScissors) const = 0;
+virtual void                           cmdSetLineWidth                                                 (VkCommandBuffer commandBuffer, float lineWidth) const = 0;
+virtual void                           cmdSetDepthBias                                                 (VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor) const = 0;
+virtual void                           cmdSetBlendConstants                                    (VkCommandBuffer commandBuffer, const float blendConstants[4]) const = 0;
+virtual void                           cmdSetDepthBounds                                               (VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds) const = 0;
+virtual void                           cmdSetStencilCompareMask                                (VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, deUint32 compareMask) const = 0;
+virtual void                           cmdSetStencilWriteMask                                  (VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, deUint32 writeMask) const = 0;
+virtual void                           cmdSetStencilReference                                  (VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, deUint32 reference) const = 0;
+virtual void                           cmdBindDescriptorSets                                   (VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, deUint32 firstSet, deUint32 descriptorSetCount, const VkDescriptorSet* pDescriptorSets, deUint32 dynamicOffsetCount, const deUint32* pDynamicOffsets) const = 0;
+virtual void                           cmdBindIndexBuffer                                              (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType) const = 0;
+virtual void                           cmdBindVertexBuffers                                    (VkCommandBuffer commandBuffer, deUint32 firstBinding, deUint32 bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets) const = 0;
+virtual void                           cmdDraw                                                                 (VkCommandBuffer commandBuffer, deUint32 vertexCount, deUint32 instanceCount, deUint32 firstVertex, deUint32 firstInstance) const = 0;
+virtual void                           cmdDrawIndexed                                                  (VkCommandBuffer commandBuffer, deUint32 indexCount, deUint32 instanceCount, deUint32 firstIndex, deInt32 vertexOffset, deUint32 firstInstance) const = 0;
+virtual void                           cmdDrawIndirect                                                 (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, deUint32 drawCount, deUint32 stride) const = 0;
+virtual void                           cmdDrawIndexedIndirect                                  (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, deUint32 drawCount, deUint32 stride) const = 0;
+virtual void                           cmdDispatch                                                             (VkCommandBuffer commandBuffer, deUint32 groupCountX, deUint32 groupCountY, deUint32 groupCountZ) const = 0;
+virtual void                           cmdDispatchIndirect                                             (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset) const = 0;
+virtual void                           cmdCopyBuffer                                                   (VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkBuffer dstBuffer, deUint32 regionCount, const VkBufferCopy* pRegions) const = 0;
+virtual void                           cmdCopyImage                                                    (VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, deUint32 regionCount, const VkImageCopy* pRegions) const = 0;
+virtual void                           cmdBlitImage                                                    (VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, deUint32 regionCount, const VkImageBlit* pRegions, VkFilter filter) const = 0;
+virtual void                           cmdCopyBufferToImage                                    (VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkImage dstImage, VkImageLayout dstImageLayout, deUint32 regionCount, const VkBufferImageCopy* pRegions) const = 0;
+virtual void                           cmdCopyImageToBuffer                                    (VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer dstBuffer, deUint32 regionCount, const VkBufferImageCopy* pRegions) const = 0;
+virtual void                           cmdUpdateBuffer                                                 (VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize dataSize, const void* pData) const = 0;
+virtual void                           cmdFillBuffer                                                   (VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize size, deUint32 data) const = 0;
+virtual void                           cmdClearColorImage                                              (VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, deUint32 rangeCount, const VkImageSubresourceRange* pRanges) const = 0;
+virtual void                           cmdClearDepthStencilImage                               (VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, deUint32 rangeCount, const VkImageSubresourceRange* pRanges) const = 0;
+virtual void                           cmdClearAttachments                                             (VkCommandBuffer commandBuffer, deUint32 attachmentCount, const VkClearAttachment* pAttachments, deUint32 rectCount, const VkClearRect* pRects) const = 0;
+virtual void                           cmdResolveImage                                                 (VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, deUint32 regionCount, const VkImageResolve* pRegions) const = 0;
+virtual void                           cmdSetEvent                                                             (VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask) const = 0;
+virtual void                           cmdResetEvent                                                   (VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask) const = 0;
+virtual void                           cmdWaitEvents                                                   (VkCommandBuffer commandBuffer, deUint32 eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, deUint32 memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, deUint32 bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, deUint32 imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers) const = 0;
+virtual void                           cmdPipelineBarrier                                              (VkCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, deUint32 memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, deUint32 bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, deUint32 imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers) const = 0;
+virtual void                           cmdBeginQuery                                                   (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 query, VkQueryControlFlags flags) const = 0;
+virtual void                           cmdEndQuery                                                             (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 query) const = 0;
+virtual void                           cmdResetQueryPool                                               (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 firstQuery, deUint32 queryCount) const = 0;
+virtual void                           cmdWriteTimestamp                                               (VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, deUint32 query) const = 0;
+virtual void                           cmdCopyQueryPoolResults                                 (VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 firstQuery, deUint32 queryCount, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize stride, VkQueryResultFlags flags) const = 0;
+virtual void                           cmdPushConstants                                                (VkCommandBuffer commandBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, deUint32 offset, deUint32 size, const void* pValues) const = 0;
+virtual void                           cmdBeginRenderPass                                              (VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkSubpassContents contents) const = 0;
+virtual void                           cmdNextSubpass                                                  (VkCommandBuffer commandBuffer, VkSubpassContents contents) const = 0;
+virtual void                           cmdEndRenderPass                                                (VkCommandBuffer commandBuffer) const = 0;
+virtual void                           cmdExecuteCommands                                              (VkCommandBuffer commandBuffer, deUint32 commandBufferCount, const VkCommandBuffer* pCommandBuffers) const = 0;
+virtual void                           getCommandPoolMemoryConsumption                 (VkDevice device, VkCommandPool commandPool, VkCommandBuffer commandBuffer, VkCommandPoolMemoryConsumption* pConsumption) const = 0;
+virtual VkResult                       getFaultData                                                    (VkDevice device, VkFaultQueryBehavior faultQueryBehavior, VkBool32* pUnrecordedFaults, deUint32* pFaultCount, VkFaultData* pFaults) const = 0;
+virtual VkResult                       bindBufferMemory2                                               (VkDevice device, deUint32 bindInfoCount, const VkBindBufferMemoryInfo* pBindInfos) const = 0;
+virtual VkResult                       bindImageMemory2                                                (VkDevice device, deUint32 bindInfoCount, const VkBindImageMemoryInfo* pBindInfos) const = 0;
+virtual void                           getDeviceGroupPeerMemoryFeatures                (VkDevice device, deUint32 heapIndex, deUint32 localDeviceIndex, deUint32 remoteDeviceIndex, VkPeerMemoryFeatureFlags* pPeerMemoryFeatures) const = 0;
+virtual void                           cmdSetDeviceMask                                                (VkCommandBuffer commandBuffer, deUint32 deviceMask) const = 0;
+virtual void                           cmdDispatchBase                                                 (VkCommandBuffer commandBuffer, deUint32 baseGroupX, deUint32 baseGroupY, deUint32 baseGroupZ, deUint32 groupCountX, deUint32 groupCountY, deUint32 groupCountZ) const = 0;
+virtual void                           getImageMemoryRequirements2                             (VkDevice device, const VkImageMemoryRequirementsInfo2* pInfo, VkMemoryRequirements2* pMemoryRequirements) const = 0;
+virtual void                           getBufferMemoryRequirements2                    (VkDevice device, const VkBufferMemoryRequirementsInfo2* pInfo, VkMemoryRequirements2* pMemoryRequirements) const = 0;
+virtual void                           getImageSparseMemoryRequirements2               (VkDevice device, const VkImageSparseMemoryRequirementsInfo2* pInfo, deUint32* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2* pSparseMemoryRequirements) const = 0;
+virtual void                           getDeviceQueue2                                                 (VkDevice device, const VkDeviceQueueInfo2* pQueueInfo, VkQueue* pQueue) const = 0;
+virtual VkResult                       createSamplerYcbcrConversion                    (VkDevice device, const VkSamplerYcbcrConversionCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSamplerYcbcrConversion* pYcbcrConversion) const = 0;
+virtual void                           destroySamplerYcbcrConversion                   (VkDevice device, VkSamplerYcbcrConversion ycbcrConversion, const VkAllocationCallbacks* pAllocator) const = 0;
+virtual void                           getDescriptorSetLayoutSupport                   (VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, VkDescriptorSetLayoutSupport* pSupport) const = 0;
+virtual void                           cmdDrawIndirectCount                                    (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, deUint32 maxDrawCount, deUint32 stride) const = 0;
+virtual void                           cmdDrawIndexedIndirectCount                             (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, deUint32 maxDrawCount, deUint32 stride) const = 0;
+virtual VkResult                       createRenderPass2                                               (VkDevice device, const VkRenderPassCreateInfo2* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass) const = 0;
+virtual void                           cmdBeginRenderPass2                                             (VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, const VkSubpassBeginInfo* pSubpassBeginInfo) const = 0;
+virtual void                           cmdNextSubpass2                                                 (VkCommandBuffer commandBuffer, const VkSubpassBeginInfo* pSubpassBeginInfo, const VkSubpassEndInfo* pSubpassEndInfo) const = 0;
+virtual void                           cmdEndRenderPass2                                               (VkCommandBuffer commandBuffer, const VkSubpassEndInfo* pSubpassEndInfo) const = 0;
+virtual void                           resetQueryPool                                                  (VkDevice device, VkQueryPool queryPool, deUint32 firstQuery, deUint32 queryCount) const = 0;
+virtual VkResult                       getSemaphoreCounterValue                                (VkDevice device, VkSemaphore semaphore, deUint64* pValue) const = 0;
+virtual VkResult                       waitSemaphores                                                  (VkDevice device, const VkSemaphoreWaitInfo* pWaitInfo, deUint64 timeout) const = 0;
+virtual VkResult                       signalSemaphore                                                 (VkDevice device, const VkSemaphoreSignalInfo* pSignalInfo) const = 0;
+virtual VkDeviceAddress                getBufferDeviceAddress                                  (VkDevice device, const VkBufferDeviceAddressInfo* pInfo) const = 0;
+virtual uint64_t                       getBufferOpaqueCaptureAddress                   (VkDevice device, const VkBufferDeviceAddressInfo* pInfo) const = 0;
+virtual uint64_t                       getDeviceMemoryOpaqueCaptureAddress             (VkDevice device, const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo) const = 0;
+virtual VkResult                       createSwapchainKHR                                              (VkDevice device, const VkSwapchainCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSwapchainKHR* pSwapchain) const = 0;
+virtual VkResult                       getSwapchainImagesKHR                                   (VkDevice device, VkSwapchainKHR swapchain, deUint32* pSwapchainImageCount, VkImage* pSwapchainImages) const = 0;
+virtual VkResult                       acquireNextImageKHR                                             (VkDevice device, VkSwapchainKHR swapchain, deUint64 timeout, VkSemaphore semaphore, VkFence fence, deUint32* pImageIndex) const = 0;
+virtual VkResult                       queuePresentKHR                                                 (VkQueue queue, const VkPresentInfoKHR* pPresentInfo) const = 0;
+virtual VkResult                       getDeviceGroupPresentCapabilitiesKHR    (VkDevice device, VkDeviceGroupPresentCapabilitiesKHR* pDeviceGroupPresentCapabilities) const = 0;
+virtual VkResult                       getDeviceGroupSurfacePresentModesKHR    (VkDevice device, VkSurfaceKHR surface, VkDeviceGroupPresentModeFlagsKHR* pModes) const = 0;
+virtual VkResult                       acquireNextImage2KHR                                    (VkDevice device, const VkAcquireNextImageInfoKHR* pAcquireInfo, deUint32* pImageIndex) const = 0;
+virtual VkResult                       createSharedSwapchainsKHR                               (VkDevice device, deUint32 swapchainCount, const VkSwapchainCreateInfoKHR* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkSwapchainKHR* pSwapchains) const = 0;
+virtual VkResult                       getMemoryFdKHR                                                  (VkDevice device, const VkMemoryGetFdInfoKHR* pGetFdInfo, int* pFd) const = 0;
+virtual VkResult                       getMemoryFdPropertiesKHR                                (VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, int fd, VkMemoryFdPropertiesKHR* pMemoryFdProperties) const = 0;
+virtual VkResult                       importSemaphoreFdKHR                                    (VkDevice device, const VkImportSemaphoreFdInfoKHR* pImportSemaphoreFdInfo) const = 0;
+virtual VkResult                       getSemaphoreFdKHR                                               (VkDevice device, const VkSemaphoreGetFdInfoKHR* pGetFdInfo, int* pFd) const = 0;
+virtual VkResult                       getSwapchainStatusKHR                                   (VkDevice device, VkSwapchainKHR swapchain) const = 0;
+virtual VkResult                       importFenceFdKHR                                                (VkDevice device, const VkImportFenceFdInfoKHR* pImportFenceFdInfo) const = 0;
+virtual VkResult                       getFenceFdKHR                                                   (VkDevice device, const VkFenceGetFdInfoKHR* pGetFdInfo, int* pFd) const = 0;
+virtual void                           cmdSetFragmentShadingRateKHR                    (VkCommandBuffer commandBuffer, const VkExtent2D* pFragmentSize, const VkFragmentShadingRateCombinerOpKHR combinerOps[2]) const = 0;
+virtual VkResult                       getFaultDataKHR                                                 (VkDevice device, VkFaultQueryBehavior faultQueryBehavior, VkBool32* pUnrecordedFaults, deUint32* pFaultCount, VkFaultData* pFaults) const = 0;
+virtual void                           cmdRefreshObjectsKHR                                    (VkCommandBuffer commandBuffer, const VkRefreshObjectListKHR* pRefreshObjects) const = 0;
+virtual void                           cmdCopyBuffer2KHR                                               (VkCommandBuffer commandBuffer, const VkCopyBufferInfo2KHR* pCopyBufferInfo) const = 0;
+virtual void                           cmdCopyImage2KHR                                                (VkCommandBuffer commandBuffer, const VkCopyImageInfo2KHR* pCopyImageInfo) const = 0;
+virtual void                           cmdCopyBufferToImage2KHR                                (VkCommandBuffer commandBuffer, const VkCopyBufferToImageInfo2KHR* pCopyBufferToImageInfo) const = 0;
+virtual void                           cmdCopyImageToBuffer2KHR                                (VkCommandBuffer commandBuffer, const VkCopyImageToBufferInfo2KHR* pCopyImageToBufferInfo) const = 0;
+virtual void                           cmdBlitImage2KHR                                                (VkCommandBuffer commandBuffer, const VkBlitImageInfo2KHR* pBlitImageInfo) const = 0;
+virtual void                           cmdResolveImage2KHR                                             (VkCommandBuffer commandBuffer, const VkResolveImageInfo2KHR* pResolveImageInfo) const = 0;
+virtual VkResult                       displayPowerControlEXT                                  (VkDevice device, VkDisplayKHR display, const VkDisplayPowerInfoEXT* pDisplayPowerInfo) const = 0;
+virtual VkResult                       registerDeviceEventEXT                                  (VkDevice device, const VkDeviceEventInfoEXT* pDeviceEventInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence) const = 0;
+virtual VkResult                       registerDisplayEventEXT                                 (VkDevice device, VkDisplayKHR display, const VkDisplayEventInfoEXT* pDisplayEventInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence) const = 0;
+virtual VkResult                       getSwapchainCounterEXT                                  (VkDevice device, VkSwapchainKHR swapchain, VkSurfaceCounterFlagBitsEXT counter, deUint64* pCounterValue) const = 0;
+virtual void                           cmdSetDiscardRectangleEXT                               (VkCommandBuffer commandBuffer, deUint32 firstDiscardRectangle, deUint32 discardRectangleCount, const VkRect2D* pDiscardRectangles) const = 0;
+virtual void                           setHdrMetadataEXT                                               (VkDevice device, deUint32 swapchainCount, const VkSwapchainKHR* pSwapchains, const VkHdrMetadataEXT* pMetadata) const = 0;
+virtual void                           cmdSetSampleLocationsEXT                                (VkCommandBuffer commandBuffer, const VkSampleLocationsInfoEXT* pSampleLocationsInfo) const = 0;
+virtual VkResult                       getImageDrmFormatModifierPropertiesEXT  (VkDevice device, VkImage image, VkImageDrmFormatModifierPropertiesEXT* pProperties) const = 0;
+virtual VkResult                       getMemoryHostPointerPropertiesEXT               (VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, const void* pHostPointer, VkMemoryHostPointerPropertiesEXT* pMemoryHostPointerProperties) const = 0;
+virtual VkResult                       getCalibratedTimestampsEXT                              (VkDevice device, deUint32 timestampCount, const VkCalibratedTimestampInfoEXT* pTimestampInfos, deUint64* pTimestamps, deUint64* pMaxDeviation) const = 0;
+virtual void                           cmdSetLineStippleEXT                                    (VkCommandBuffer commandBuffer, deUint32 lineStippleFactor, deUint16 lineStipplePattern) const = 0;
+virtual void                           cmdSetCullModeEXT                                               (VkCommandBuffer commandBuffer, VkCullModeFlags cullMode) const = 0;
+virtual void                           cmdSetFrontFaceEXT                                              (VkCommandBuffer commandBuffer, VkFrontFace frontFace) const = 0;
+virtual void                           cmdSetPrimitiveTopologyEXT                              (VkCommandBuffer commandBuffer, VkPrimitiveTopology primitiveTopology) const = 0;
+virtual void                           cmdSetViewportWithCountEXT                              (VkCommandBuffer commandBuffer, deUint32 viewportCount, const VkViewport* pViewports) const = 0;
+virtual void                           cmdSetScissorWithCountEXT                               (VkCommandBuffer commandBuffer, deUint32 scissorCount, const VkRect2D* pScissors) const = 0;
+virtual void                           cmdBindVertexBuffers2EXT                                (VkCommandBuffer commandBuffer, deUint32 firstBinding, deUint32 bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets, const VkDeviceSize* pSizes, const VkDeviceSize* pStrides) const = 0;
+virtual void                           cmdSetDepthTestEnableEXT                                (VkCommandBuffer commandBuffer, VkBool32 depthTestEnable) const = 0;
+virtual void                           cmdSetDepthWriteEnableEXT                               (VkCommandBuffer commandBuffer, VkBool32 depthWriteEnable) const = 0;
+virtual void                           cmdSetDepthCompareOpEXT                                 (VkCommandBuffer commandBuffer, VkCompareOp depthCompareOp) const = 0;
+virtual void                           cmdSetDepthBoundsTestEnableEXT                  (VkCommandBuffer commandBuffer, VkBool32 depthBoundsTestEnable) const = 0;
+virtual void                           cmdSetStencilTestEnableEXT                              (VkCommandBuffer commandBuffer, VkBool32 stencilTestEnable) const = 0;
+virtual void                           cmdSetStencilOpEXT                                              (VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, VkStencilOp failOp, VkStencilOp passOp, VkStencilOp depthFailOp, VkCompareOp compareOp) const = 0;
diff --git a/external/vulkancts/framework/vulkan/generated/vulkansc/vkVirtualInstanceInterface.inl b/external/vulkancts/framework/vulkan/generated/vulkansc/vkVirtualInstanceInterface.inl
new file mode 100644 (file)
index 0000000..39bd59e
--- /dev/null
@@ -0,0 +1,52 @@
+/* WARNING: This is auto-generated file. Do not modify, since changes will
+ * be lost! Modify the generating script instead.
+ */
+virtual void           destroyInstance                                                                 (VkInstance instance, const VkAllocationCallbacks* pAllocator) const = 0;
+virtual VkResult       enumeratePhysicalDevices                                                (VkInstance instance, deUint32* pPhysicalDeviceCount, VkPhysicalDevice* pPhysicalDevices) const = 0;
+virtual void           getPhysicalDeviceFeatures                                               (VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures* pFeatures) const = 0;
+virtual void           getPhysicalDeviceFormatProperties                               (VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties* pFormatProperties) const = 0;
+virtual VkResult       getPhysicalDeviceImageFormatProperties                  (VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkImageFormatProperties* pImageFormatProperties) const = 0;
+virtual void           getPhysicalDeviceProperties                                             (VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties* pProperties) const = 0;
+virtual void           getPhysicalDeviceQueueFamilyProperties                  (VkPhysicalDevice physicalDevice, deUint32* pQueueFamilyPropertyCount, VkQueueFamilyProperties* pQueueFamilyProperties) const = 0;
+virtual void           getPhysicalDeviceMemoryProperties                               (VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties* pMemoryProperties) const = 0;
+virtual VkResult       createDevice                                                                    (VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDevice* pDevice) const = 0;
+virtual VkResult       enumerateDeviceExtensionProperties                              (VkPhysicalDevice physicalDevice, const char* pLayerName, deUint32* pPropertyCount, VkExtensionProperties* pProperties) const = 0;
+virtual VkResult       enumerateDeviceLayerProperties                                  (VkPhysicalDevice physicalDevice, deUint32* pPropertyCount, VkLayerProperties* pProperties) const = 0;
+virtual void           getPhysicalDeviceSparseImageFormatProperties    (VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkSampleCountFlagBits samples, VkImageUsageFlags usage, VkImageTiling tiling, deUint32* pPropertyCount, VkSparseImageFormatProperties* pProperties) const = 0;
+virtual VkResult       enumeratePhysicalDeviceGroups                                   (VkInstance instance, deUint32* pPhysicalDeviceGroupCount, VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties) const = 0;
+virtual void           getPhysicalDeviceFeatures2                                              (VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures2* pFeatures) const = 0;
+virtual void           getPhysicalDeviceProperties2                                    (VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties2* pProperties) const = 0;
+virtual void           getPhysicalDeviceFormatProperties2                              (VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties2* pFormatProperties) const = 0;
+virtual VkResult       getPhysicalDeviceImageFormatProperties2                 (VkPhysicalDevice physicalDevice, const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo, VkImageFormatProperties2* pImageFormatProperties) const = 0;
+virtual void           getPhysicalDeviceQueueFamilyProperties2                 (VkPhysicalDevice physicalDevice, deUint32* pQueueFamilyPropertyCount, VkQueueFamilyProperties2* pQueueFamilyProperties) const = 0;
+virtual void           getPhysicalDeviceMemoryProperties2                              (VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties2* pMemoryProperties) const = 0;
+virtual void           getPhysicalDeviceSparseImageFormatProperties2   (VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo, deUint32* pPropertyCount, VkSparseImageFormatProperties2* pProperties) const = 0;
+virtual void           getPhysicalDeviceExternalBufferProperties               (VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo, VkExternalBufferProperties* pExternalBufferProperties) const = 0;
+virtual void           getPhysicalDeviceExternalFenceProperties                (VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo, VkExternalFenceProperties* pExternalFenceProperties) const = 0;
+virtual void           getPhysicalDeviceExternalSemaphoreProperties    (VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo, VkExternalSemaphoreProperties* pExternalSemaphoreProperties) const = 0;
+virtual void           destroySurfaceKHR                                                               (VkInstance instance, VkSurfaceKHR surface, const VkAllocationCallbacks* pAllocator) const = 0;
+virtual VkResult       getPhysicalDeviceSurfaceSupportKHR                              (VkPhysicalDevice physicalDevice, deUint32 queueFamilyIndex, VkSurfaceKHR surface, VkBool32* pSupported) const = 0;
+virtual VkResult       getPhysicalDeviceSurfaceCapabilitiesKHR                 (VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, VkSurfaceCapabilitiesKHR* pSurfaceCapabilities) const = 0;
+virtual VkResult       getPhysicalDeviceSurfaceFormatsKHR                              (VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, deUint32* pSurfaceFormatCount, VkSurfaceFormatKHR* pSurfaceFormats) const = 0;
+virtual VkResult       getPhysicalDeviceSurfacePresentModesKHR                 (VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, deUint32* pPresentModeCount, VkPresentModeKHR* pPresentModes) const = 0;
+virtual VkResult       getPhysicalDevicePresentRectanglesKHR                   (VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, deUint32* pRectCount, VkRect2D* pRects) const = 0;
+virtual VkResult       getPhysicalDeviceDisplayPropertiesKHR                   (VkPhysicalDevice physicalDevice, deUint32* pPropertyCount, VkDisplayPropertiesKHR* pProperties) const = 0;
+virtual VkResult       getPhysicalDeviceDisplayPlanePropertiesKHR              (VkPhysicalDevice physicalDevice, deUint32* pPropertyCount, VkDisplayPlanePropertiesKHR* pProperties) const = 0;
+virtual VkResult       getDisplayPlaneSupportedDisplaysKHR                             (VkPhysicalDevice physicalDevice, deUint32 planeIndex, deUint32* pDisplayCount, VkDisplayKHR* pDisplays) const = 0;
+virtual VkResult       getDisplayModePropertiesKHR                                             (VkPhysicalDevice physicalDevice, VkDisplayKHR display, deUint32* pPropertyCount, VkDisplayModePropertiesKHR* pProperties) const = 0;
+virtual VkResult       createDisplayModeKHR                                                    (VkPhysicalDevice physicalDevice, VkDisplayKHR display, const VkDisplayModeCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDisplayModeKHR* pMode) const = 0;
+virtual VkResult       getDisplayPlaneCapabilitiesKHR                                  (VkPhysicalDevice physicalDevice, VkDisplayModeKHR mode, deUint32 planeIndex, VkDisplayPlaneCapabilitiesKHR* pCapabilities) const = 0;
+virtual VkResult       createDisplayPlaneSurfaceKHR                                    (VkInstance instance, const VkDisplaySurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface) const = 0;
+virtual VkResult       getPhysicalDeviceSurfaceCapabilities2KHR                (VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, VkSurfaceCapabilities2KHR* pSurfaceCapabilities) const = 0;
+virtual VkResult       getPhysicalDeviceSurfaceFormats2KHR                             (VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, deUint32* pSurfaceFormatCount, VkSurfaceFormat2KHR* pSurfaceFormats) const = 0;
+virtual VkResult       getPhysicalDeviceDisplayProperties2KHR                  (VkPhysicalDevice physicalDevice, deUint32* pPropertyCount, VkDisplayProperties2KHR* pProperties) const = 0;
+virtual VkResult       getPhysicalDeviceDisplayPlaneProperties2KHR             (VkPhysicalDevice physicalDevice, deUint32* pPropertyCount, VkDisplayPlaneProperties2KHR* pProperties) const = 0;
+virtual VkResult       getDisplayModeProperties2KHR                                    (VkPhysicalDevice physicalDevice, VkDisplayKHR display, deUint32* pPropertyCount, VkDisplayModeProperties2KHR* pProperties) const = 0;
+virtual VkResult       getDisplayPlaneCapabilities2KHR                                 (VkPhysicalDevice physicalDevice, const VkDisplayPlaneInfo2KHR* pDisplayPlaneInfo, VkDisplayPlaneCapabilities2KHR* pCapabilities) const = 0;
+virtual VkResult       getPhysicalDeviceFragmentShadingRatesKHR                (VkPhysicalDevice physicalDevice, deUint32* pFragmentShadingRateCount, VkPhysicalDeviceFragmentShadingRateKHR* pFragmentShadingRates) const = 0;
+virtual VkResult       getPhysicalDeviceRefreshableObjectTypesKHR              (VkPhysicalDevice physicalDevice, deUint32* pRefreshableObjectCount, VkObjectType* pRefreshableObjectTypes) const = 0;
+virtual VkResult       releaseDisplayEXT                                                               (VkPhysicalDevice physicalDevice, VkDisplayKHR display) const = 0;
+virtual VkResult       getPhysicalDeviceSurfaceCapabilities2EXT                (VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, VkSurfaceCapabilities2EXT* pSurfaceCapabilities) const = 0;
+virtual void           getPhysicalDeviceMultisamplePropertiesEXT               (VkPhysicalDevice physicalDevice, VkSampleCountFlagBits samples, VkMultisamplePropertiesEXT* pMultisampleProperties) const = 0;
+virtual VkResult       getPhysicalDeviceCalibrateableTimeDomainsEXT    (VkPhysicalDevice physicalDevice, deUint32* pTimeDomainCount, VkTimeDomainEXT* pTimeDomains) const = 0;
+virtual VkResult       createHeadlessSurfaceEXT                                                (VkInstance instance, const VkHeadlessSurfaceCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface) const = 0;
diff --git a/external/vulkancts/framework/vulkan/generated/vulkansc/vkVirtualPlatformInterface.inl b/external/vulkancts/framework/vulkan/generated/vulkansc/vkVirtualPlatformInterface.inl
new file mode 100644 (file)
index 0000000..3e71695
--- /dev/null
@@ -0,0 +1,8 @@
+/* WARNING: This is auto-generated file. Do not modify, since changes will
+ * be lost! Modify the generating script instead.
+ */
+virtual VkResult                       createInstance                                                  (const VkInstanceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkInstance* pInstance) const = 0;
+virtual PFN_vkVoidFunction     getInstanceProcAddr                                             (VkInstance instance, const char* pName) const = 0;
+virtual VkResult                       enumerateInstanceExtensionProperties    (const char* pLayerName, deUint32* pPropertyCount, VkExtensionProperties* pProperties) const = 0;
+virtual VkResult                       enumerateInstanceLayerProperties                (deUint32* pPropertyCount, VkLayerProperties* pProperties) const = 0;
+virtual VkResult                       enumerateInstanceVersion                                (deUint32* pApiVersion) const = 0;
diff --git a/external/vulkancts/framework/vulkan/generated/vulkansc/vkVulkan_c.inl b/external/vulkancts/framework/vulkan/generated/vulkansc/vkVulkan_c.inl
new file mode 100644 (file)
index 0000000..19409a8
--- /dev/null
@@ -0,0 +1,7165 @@
+/* WARNING: This is auto-generated file. Do not modify, since changes will
+ * be lost! Modify the generating script instead.
+ */
+#ifndef VULKAN_SC_CORE_H_
+#define VULKAN_SC_CORE_H_ 1
+
+/*
+** Copyright 2015-2021 The Khronos Group Inc.
+**
+** SPDX-License-Identifier: Apache-2.0
+*/
+
+/*
+** This header is generated from the Khronos Vulkan XML API Registry.
+**
+*/
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+
+#define VK_VERSION_1_0 1
+
+
+#define VK_DEFINE_HANDLE(object) typedef struct object##_T* object;
+
+
+#if !defined(VK_DEFINE_NON_DISPATCHABLE_HANDLE)
+#if defined(__LP64__) || defined(_WIN64) || (defined(__x86_64__) && !defined(__ILP32__) ) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__)
+        #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef struct object##_T *object;
+#else
+        #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef deUint64 object;
+#endif
+#endif
+
+#define VK_MAKE_VERSION(major, minor, patch) \
+    ((((deUint32)(major)) << 22) | (((deUint32)(minor)) << 12) | ((deUint32)(patch)))
+
+// DEPRECATED: This define has been removed. Specific version defines (e.g. VK_API_VERSION_1_0), or the VK_MAKE_VERSION macro, should be used instead.
+//#define VK_API_VERSION VK_MAKE_VERSION(1, 0, 0) // Patch version should always be set to 0
+
+// Vulkan 1.0 version number
+#define VK_API_VERSION_1_0 VK_MAKE_VERSION(1, 0, 0)// Patch version should always be set to 0
+
+// Version of this file
+#define VK_HEADER_VERSION 0
+
+// Complete version of this file
+#define VK_HEADER_VERSION_COMPLETE VK_MAKE_VERSION(1, 2, VK_HEADER_VERSION)
+
+#define VK_VERSION_MAJOR(version) ((deUint32)(version) >> 22)
+#define VK_VERSION_MINOR(version) (((deUint32)(version) >> 12) & 0x3ff)
+#define VK_VERSION_PATCH(version) ((deUint32)(version) & 0xfff)
+
+#define VK_NULL_HANDLE 0
+
+typedef deUint32 VkBool32;
+typedef deUint64 VkDeviceAddress;
+typedef deUint64 VkDeviceSize;
+typedef deUint32 VkFlags;
+typedef deUint32 VkSampleMask;
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkBuffer)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkImage)
+VK_DEFINE_HANDLE(VkInstance)
+VK_DEFINE_HANDLE(VkPhysicalDevice)
+VK_DEFINE_HANDLE(VkDevice)
+VK_DEFINE_HANDLE(VkQueue)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSemaphore)
+VK_DEFINE_HANDLE(VkCommandBuffer)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkFence)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDeviceMemory)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkEvent)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkQueryPool)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkBufferView)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkImageView)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkShaderModule)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipelineCache)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipelineLayout)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipeline)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkRenderPass)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorSetLayout)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSampler)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorSet)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorPool)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkFramebuffer)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkCommandPool)
+#define VK_ATTACHMENT_UNUSED              (~0U)
+#define VK_FALSE                          0
+#define VK_LOD_CLAMP_NONE                 1000.0f
+#define VK_QUEUE_FAMILY_IGNORED           (~0U)
+#define VK_REMAINING_ARRAY_LAYERS         (~0U)
+#define VK_REMAINING_MIP_LEVELS           (~0U)
+#define VK_SUBPASS_EXTERNAL               (~0U)
+#define VK_TRUE                           1
+#define VK_WHOLE_SIZE                     (~0ULL)
+#define VK_MAX_MEMORY_TYPES               32
+#define VK_MAX_MEMORY_HEAPS               16
+#define VK_MAX_PHYSICAL_DEVICE_NAME_SIZE  256
+#define VK_UUID_SIZE                      16
+#define VK_MAX_EXTENSION_NAME_SIZE        256
+#define VK_MAX_DESCRIPTION_SIZE           256
+
+typedef enum VkResult {
+    VK_SUCCESS = 0,
+    VK_NOT_READY = 1,
+    VK_TIMEOUT = 2,
+    VK_EVENT_SET = 3,
+    VK_EVENT_RESET = 4,
+    VK_INCOMPLETE = 5,
+    VK_ERROR_OUT_OF_HOST_MEMORY = -1,
+    VK_ERROR_OUT_OF_DEVICE_MEMORY = -2,
+    VK_ERROR_INITIALIZATION_FAILED = -3,
+    VK_ERROR_DEVICE_LOST = -4,
+    VK_ERROR_MEMORY_MAP_FAILED = -5,
+    VK_ERROR_LAYER_NOT_PRESENT = -6,
+    VK_ERROR_EXTENSION_NOT_PRESENT = -7,
+    VK_ERROR_FEATURE_NOT_PRESENT = -8,
+    VK_ERROR_INCOMPATIBLE_DRIVER = -9,
+    VK_ERROR_TOO_MANY_OBJECTS = -10,
+    VK_ERROR_FORMAT_NOT_SUPPORTED = -11,
+    VK_ERROR_FRAGMENTED_POOL = -12,
+    VK_ERROR_UNKNOWN = -13,
+    VK_ERROR_OUT_OF_POOL_MEMORY = -1000069000,
+    VK_ERROR_INVALID_EXTERNAL_HANDLE = -1000072003,
+    VK_ERROR_FRAGMENTATION = -1000161000,
+    VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS = -1000257000,
+    VK_ERROR_INVALID_PIPELINE_CACHE_DATA = -1000349000,
+    VK_ERROR_NO_PIPELINE_MATCH = -1000349001,
+    VK_ERROR_SURFACE_LOST_KHR = -1000000000,
+    VK_ERROR_NATIVE_WINDOW_IN_USE_KHR = -1000000001,
+    VK_SUBOPTIMAL_KHR = 1000001003,
+    VK_ERROR_OUT_OF_DATE_KHR = -1000001004,
+    VK_ERROR_INCOMPATIBLE_DISPLAY_KHR = -1000003001,
+    VK_ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT = -1000158000,
+    VK_ERROR_NOT_PERMITTED_EXT = -1000174001,
+    VK_ERROR_INVALID_PIPELINE_CACHE_DATA_KHR = VK_ERROR_INVALID_PIPELINE_CACHE_DATA,
+    VK_ERROR_NO_PIPELINE_MATCH_KHR = VK_ERROR_NO_PIPELINE_MATCH,
+    VK_RESULT_MAX_ENUM = 0x7FFFFFFF
+} VkResult;
+
+typedef enum VkStructureType {
+    VK_STRUCTURE_TYPE_APPLICATION_INFO = 0,
+    VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO = 1,
+    VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO = 2,
+    VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO = 3,
+    VK_STRUCTURE_TYPE_SUBMIT_INFO = 4,
+    VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO = 5,
+    VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE = 6,
+    VK_STRUCTURE_TYPE_BIND_SPARSE_INFO = 7,
+    VK_STRUCTURE_TYPE_FENCE_CREATE_INFO = 8,
+    VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO = 9,
+    VK_STRUCTURE_TYPE_EVENT_CREATE_INFO = 10,
+    VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO = 11,
+    VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO = 12,
+    VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO = 13,
+    VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO = 14,
+    VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO = 15,
+    VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO = 16,
+    VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO = 17,
+    VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO = 18,
+    VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO = 19,
+    VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO = 20,
+    VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO = 21,
+    VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO = 22,
+    VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO = 23,
+    VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO = 24,
+    VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO = 25,
+    VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO = 26,
+    VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO = 27,
+    VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO = 28,
+    VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO = 29,
+    VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO = 30,
+    VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO = 31,
+    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO = 32,
+    VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO = 33,
+    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO = 34,
+    VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET = 35,
+    VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET = 36,
+    VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO = 37,
+    VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO = 38,
+    VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO = 39,
+    VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO = 40,
+    VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO = 41,
+    VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO = 42,
+    VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO = 43,
+    VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER = 44,
+    VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER = 45,
+    VK_STRUCTURE_TYPE_MEMORY_BARRIER = 46,
+    VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO = 47,
+    VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO = 48,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES = 1000094000,
+    VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO = 1000157000,
+    VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO = 1000157001,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES = 1000083000,
+    VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS = 1000127000,
+    VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO = 1000127001,
+    VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO = 1000060000,
+    VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO = 1000060003,
+    VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO = 1000060004,
+    VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO = 1000060005,
+    VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO = 1000060006,
+    VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO = 1000060013,
+    VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO = 1000060014,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES = 1000070000,
+    VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO = 1000070001,
+    VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2 = 1000146000,
+    VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2 = 1000146001,
+    VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2 = 1000146002,
+    VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2 = 1000146003,
+    VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2 = 1000146004,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2 = 1000059000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2 = 1000059001,
+    VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2 = 1000059002,
+    VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2 = 1000059003,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2 = 1000059004,
+    VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2 = 1000059005,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2 = 1000059006,
+    VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2 = 1000059007,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2 = 1000059008,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES = 1000117000,
+    VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO = 1000117001,
+    VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO = 1000117002,
+    VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO = 1000117003,
+    VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO = 1000053000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES = 1000053001,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES = 1000053002,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES = 1000120000,
+    VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO = 1000145000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES = 1000145001,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES = 1000145002,
+    VK_STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2 = 1000145003,
+    VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO = 1000156000,
+    VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO = 1000156001,
+    VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO = 1000156002,
+    VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO = 1000156003,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES = 1000156004,
+    VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES = 1000156005,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO = 1000071000,
+    VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES = 1000071001,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO = 1000071002,
+    VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES = 1000071003,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES = 1000071004,
+    VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO = 1000072000,
+    VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO = 1000072001,
+    VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO = 1000072002,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO = 1000112000,
+    VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES = 1000112001,
+    VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO = 1000113000,
+    VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO = 1000077000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO = 1000076000,
+    VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES = 1000076001,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES = 1000168000,
+    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT = 1000168001,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES = 1000063000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES = 49,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES = 50,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES = 51,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES = 52,
+    VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO = 1000147000,
+    VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2 = 1000109000,
+    VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2 = 1000109001,
+    VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2 = 1000109002,
+    VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2 = 1000109003,
+    VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2 = 1000109004,
+    VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO = 1000109005,
+    VK_STRUCTURE_TYPE_SUBPASS_END_INFO = 1000109006,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES = 1000177000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES = 1000196000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES = 1000180000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES = 1000082000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES = 1000197000,
+    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO = 1000161000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES = 1000161001,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES = 1000161002,
+    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO = 1000161003,
+    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT = 1000161004,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES = 1000199000,
+    VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE = 1000199001,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES = 1000221000,
+    VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO = 1000246000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES = 1000130000,
+    VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO = 1000130001,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES = 1000211000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES = 1000108000,
+    VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO = 1000108001,
+    VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO = 1000108002,
+    VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO = 1000108003,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES = 1000253000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES = 1000175000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES = 1000241000,
+    VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT = 1000241001,
+    VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT = 1000241002,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES = 1000261000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES = 1000207000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES = 1000207001,
+    VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO = 1000207002,
+    VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO = 1000207003,
+    VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO = 1000207004,
+    VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO = 1000207005,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES = 1000257000,
+    VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO = 1000244001,
+    VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO = 1000257002,
+    VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO = 1000257003,
+    VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO = 1000257004,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_SC_1_0_PROPERTIES = 1000357000,
+    VK_STRUCTURE_TYPE_DEVICE_MEMORY_RESERVATION_CREATE_INFO = 1000357001,
+    VK_STRUCTURE_TYPE_COMMAND_POOL_MEMORY_RESERVATION_CREATE_INFO = 1000357002,
+    VK_STRUCTURE_TYPE_COMMAND_POOL_MEMORY_CONSUMPTION = 1000357003,
+    VK_STRUCTURE_TYPE_PIPELINE_POOL_SIZE = 1000357004,
+    VK_STRUCTURE_TYPE_PIPELINE_POOL_ENTRY_SIZE_CREATE_INFO = 1000357005,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_SC_1_0_FEATURES = 1000357006,
+    VK_STRUCTURE_TYPE_FAULT_DATA = 1000298000,
+    VK_STRUCTURE_TYPE_FAULT_CALLBACK_INFO = 1000298001,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FAULT_HANDLING_PROPERTIES = 1000298002,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_IDENTIFIER_FEATURES = 1000334000,
+    VK_STRUCTURE_TYPE_PIPELINE_IDENTIFIER_INFO = 1000334001,
+    VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR = 1000001000,
+    VK_STRUCTURE_TYPE_PRESENT_INFO_KHR = 1000001001,
+    VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR = 1000060007,
+    VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR = 1000060008,
+    VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR = 1000060009,
+    VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR = 1000060010,
+    VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR = 1000060011,
+    VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR = 1000060012,
+    VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR = 1000002000,
+    VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR = 1000002001,
+    VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR = 1000003000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT = 1000066000,
+    VK_STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT = 1000067000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT = 1000067001,
+    VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR = 1000074000,
+    VK_STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR = 1000074001,
+    VK_STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR = 1000074002,
+    VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR = 1000079000,
+    VK_STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR = 1000079001,
+    VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR = 1000084000,
+    VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT = 1000090000,
+    VK_STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT = 1000091000,
+    VK_STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT = 1000091001,
+    VK_STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT = 1000091002,
+    VK_STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT = 1000091003,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT = 1000099000,
+    VK_STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT = 1000099001,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT = 1000101000,
+    VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT = 1000101001,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT = 1000102000,
+    VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT = 1000102001,
+    VK_STRUCTURE_TYPE_HDR_METADATA_EXT = 1000105000,
+    VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR = 1000111000,
+    VK_STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR = 1000115000,
+    VK_STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR = 1000115001,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR = 1000119000,
+    VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR = 1000119001,
+    VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR = 1000119002,
+    VK_STRUCTURE_TYPE_DISPLAY_PROPERTIES_2_KHR = 1000121000,
+    VK_STRUCTURE_TYPE_DISPLAY_PLANE_PROPERTIES_2_KHR = 1000121001,
+    VK_STRUCTURE_TYPE_DISPLAY_MODE_PROPERTIES_2_KHR = 1000121002,
+    VK_STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR = 1000121003,
+    VK_STRUCTURE_TYPE_DISPLAY_PLANE_CAPABILITIES_2_KHR = 1000121004,
+    VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT = 1000143000,
+    VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT = 1000143001,
+    VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT = 1000143002,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT = 1000143003,
+    VK_STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT = 1000143004,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT = 1000148000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT = 1000148001,
+    VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT = 1000148002,
+    VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT = 1000158000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT = 1000158002,
+    VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT = 1000158003,
+    VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT = 1000158004,
+    VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT = 1000158005,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT = 1000170000,
+    VK_STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT = 1000170001,
+    VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT = 1000174000,
+    VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT = 1000178000,
+    VK_STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT = 1000178001,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT = 1000178002,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR = 1000181000,
+    VK_STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT = 1000184000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT = 1000190000,
+    VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT = 1000190001,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT = 1000190002,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT = 1000212000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES_KHR = 1000215000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT = 1000225000,
+    VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT = 1000225001,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT = 1000225002,
+    VK_STRUCTURE_TYPE_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR = 1000226000,
+    VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_STATE_CREATE_INFO_KHR = 1000226001,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_PROPERTIES_KHR = 1000226002,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_FEATURES_KHR = 1000226003,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_KHR = 1000226004,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT = 1000234000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT = 1000237000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT = 1000251000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT = 1000252000,
+    VK_STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT = 1000256000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT = 1000259000,
+    VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT = 1000259001,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT = 1000259002,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT = 1000260000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT = 1000265000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT = 1000267000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT = 1000276000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT = 1000281000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT = 1000281001,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT = 1000286000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT = 1000286001,
+    VK_STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT = 1000287000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT = 1000287001,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT = 1000287002,
+    VK_STRUCTURE_TYPE_REFRESH_OBJECT_LIST_KHR = 1000299000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT = 1000335000,
+    VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2_KHR = 1000337000,
+    VK_STRUCTURE_TYPE_COPY_IMAGE_INFO_2_KHR = 1000337001,
+    VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2_KHR = 1000337002,
+    VK_STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2_KHR = 1000337003,
+    VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2_KHR = 1000337004,
+    VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2_KHR = 1000337005,
+    VK_STRUCTURE_TYPE_BUFFER_COPY_2_KHR = 1000337006,
+    VK_STRUCTURE_TYPE_IMAGE_COPY_2_KHR = 1000337007,
+    VK_STRUCTURE_TYPE_IMAGE_BLIT_2_KHR = 1000337008,
+    VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2_KHR = 1000337009,
+    VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2_KHR = 1000337010,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT = 1000340000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES,
+    VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES2_EXT = VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT,
+    VK_STRUCTURE_TYPE_FAULT_DATA_KHR = VK_STRUCTURE_TYPE_FAULT_DATA,
+    VK_STRUCTURE_TYPE_FAULT_CALLBACK_INFO_KHR = VK_STRUCTURE_TYPE_FAULT_CALLBACK_INFO,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FAULT_HANDLING_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FAULT_HANDLING_PROPERTIES,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_IDENTIFIER_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_IDENTIFIER_FEATURES,
+    VK_STRUCTURE_TYPE_PIPELINE_IDENTIFIER_INFO_KHR = VK_STRUCTURE_TYPE_PIPELINE_IDENTIFIER_INFO,
+    VK_STRUCTURE_TYPE_MAX_ENUM = 0x7FFFFFFF
+} VkStructureType;
+
+typedef enum VkImageLayout {
+    VK_IMAGE_LAYOUT_UNDEFINED = 0,
+    VK_IMAGE_LAYOUT_GENERAL = 1,
+    VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL = 2,
+    VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL = 3,
+    VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL = 4,
+    VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL = 5,
+    VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL = 6,
+    VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL = 7,
+    VK_IMAGE_LAYOUT_PREINITIALIZED = 8,
+    VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL = 1000117000,
+    VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL = 1000117001,
+    VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL = 1000241000,
+    VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL = 1000241001,
+    VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL = 1000241002,
+    VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL = 1000241003,
+    VK_IMAGE_LAYOUT_PRESENT_SRC_KHR = 1000001002,
+    VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR = 1000111000,
+    VK_IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV = 1000164003,
+    VK_IMAGE_LAYOUT_FRAGMENT_SHADING_RATE_ATTACHMENT_OPTIMAL_KHR = VK_IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV,
+    VK_IMAGE_LAYOUT_MAX_ENUM = 0x7FFFFFFF
+} VkImageLayout;
+
+typedef enum VkObjectType {
+    VK_OBJECT_TYPE_UNKNOWN = 0,
+    VK_OBJECT_TYPE_INSTANCE = 1,
+    VK_OBJECT_TYPE_PHYSICAL_DEVICE = 2,
+    VK_OBJECT_TYPE_DEVICE = 3,
+    VK_OBJECT_TYPE_QUEUE = 4,
+    VK_OBJECT_TYPE_SEMAPHORE = 5,
+    VK_OBJECT_TYPE_COMMAND_BUFFER = 6,
+    VK_OBJECT_TYPE_FENCE = 7,
+    VK_OBJECT_TYPE_DEVICE_MEMORY = 8,
+    VK_OBJECT_TYPE_BUFFER = 9,
+    VK_OBJECT_TYPE_IMAGE = 10,
+    VK_OBJECT_TYPE_EVENT = 11,
+    VK_OBJECT_TYPE_QUERY_POOL = 12,
+    VK_OBJECT_TYPE_BUFFER_VIEW = 13,
+    VK_OBJECT_TYPE_IMAGE_VIEW = 14,
+    VK_OBJECT_TYPE_SHADER_MODULE = 15,
+    VK_OBJECT_TYPE_PIPELINE_CACHE = 16,
+    VK_OBJECT_TYPE_PIPELINE_LAYOUT = 17,
+    VK_OBJECT_TYPE_RENDER_PASS = 18,
+    VK_OBJECT_TYPE_PIPELINE = 19,
+    VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT = 20,
+    VK_OBJECT_TYPE_SAMPLER = 21,
+    VK_OBJECT_TYPE_DESCRIPTOR_POOL = 22,
+    VK_OBJECT_TYPE_DESCRIPTOR_SET = 23,
+    VK_OBJECT_TYPE_FRAMEBUFFER = 24,
+    VK_OBJECT_TYPE_COMMAND_POOL = 25,
+    VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION = 1000156000,
+    VK_OBJECT_TYPE_SURFACE_KHR = 1000000000,
+    VK_OBJECT_TYPE_SWAPCHAIN_KHR = 1000001000,
+    VK_OBJECT_TYPE_DISPLAY_KHR = 1000002000,
+    VK_OBJECT_TYPE_DISPLAY_MODE_KHR = 1000002001,
+    VK_OBJECT_TYPE_MAX_ENUM = 0x7FFFFFFF
+} VkObjectType;
+
+typedef enum VkVendorId {
+    VK_VENDOR_ID_VIV = 0x10001,
+    VK_VENDOR_ID_VSI = 0x10002,
+    VK_VENDOR_ID_KAZAN = 0x10003,
+    VK_VENDOR_ID_CODEPLAY = 0x10004,
+    VK_VENDOR_ID_MESA = 0x10005,
+    VK_VENDOR_ID_POCL = 0x10006,
+    VK_VENDOR_ID_MAX_ENUM = 0x7FFFFFFF
+} VkVendorId;
+
+typedef enum VkPipelineCacheHeaderVersion {
+    VK_PIPELINE_CACHE_HEADER_VERSION_ONE = 1,
+    VK_PIPELINE_CACHE_HEADER_VERSION_MAX_ENUM = 0x7FFFFFFF
+} VkPipelineCacheHeaderVersion;
+
+typedef enum VkSystemAllocationScope {
+    VK_SYSTEM_ALLOCATION_SCOPE_COMMAND = 0,
+    VK_SYSTEM_ALLOCATION_SCOPE_OBJECT = 1,
+    VK_SYSTEM_ALLOCATION_SCOPE_CACHE = 2,
+    VK_SYSTEM_ALLOCATION_SCOPE_DEVICE = 3,
+    VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE = 4,
+    VK_SYSTEM_ALLOCATION_SCOPE_MAX_ENUM = 0x7FFFFFFF
+} VkSystemAllocationScope;
+
+typedef enum VkInternalAllocationType {
+    VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE = 0,
+    VK_INTERNAL_ALLOCATION_TYPE_MAX_ENUM = 0x7FFFFFFF
+} VkInternalAllocationType;
+
+typedef enum VkFormat {
+    VK_FORMAT_UNDEFINED = 0,
+    VK_FORMAT_R4G4_UNORM_PACK8 = 1,
+    VK_FORMAT_R4G4B4A4_UNORM_PACK16 = 2,
+    VK_FORMAT_B4G4R4A4_UNORM_PACK16 = 3,
+    VK_FORMAT_R5G6B5_UNORM_PACK16 = 4,
+    VK_FORMAT_B5G6R5_UNORM_PACK16 = 5,
+    VK_FORMAT_R5G5B5A1_UNORM_PACK16 = 6,
+    VK_FORMAT_B5G5R5A1_UNORM_PACK16 = 7,
+    VK_FORMAT_A1R5G5B5_UNORM_PACK16 = 8,
+    VK_FORMAT_R8_UNORM = 9,
+    VK_FORMAT_R8_SNORM = 10,
+    VK_FORMAT_R8_USCALED = 11,
+    VK_FORMAT_R8_SSCALED = 12,
+    VK_FORMAT_R8_UINT = 13,
+    VK_FORMAT_R8_SINT = 14,
+    VK_FORMAT_R8_SRGB = 15,
+    VK_FORMAT_R8G8_UNORM = 16,
+    VK_FORMAT_R8G8_SNORM = 17,
+    VK_FORMAT_R8G8_USCALED = 18,
+    VK_FORMAT_R8G8_SSCALED = 19,
+    VK_FORMAT_R8G8_UINT = 20,
+    VK_FORMAT_R8G8_SINT = 21,
+    VK_FORMAT_R8G8_SRGB = 22,
+    VK_FORMAT_R8G8B8_UNORM = 23,
+    VK_FORMAT_R8G8B8_SNORM = 24,
+    VK_FORMAT_R8G8B8_USCALED = 25,
+    VK_FORMAT_R8G8B8_SSCALED = 26,
+    VK_FORMAT_R8G8B8_UINT = 27,
+    VK_FORMAT_R8G8B8_SINT = 28,
+    VK_FORMAT_R8G8B8_SRGB = 29,
+    VK_FORMAT_B8G8R8_UNORM = 30,
+    VK_FORMAT_B8G8R8_SNORM = 31,
+    VK_FORMAT_B8G8R8_USCALED = 32,
+    VK_FORMAT_B8G8R8_SSCALED = 33,
+    VK_FORMAT_B8G8R8_UINT = 34,
+    VK_FORMAT_B8G8R8_SINT = 35,
+    VK_FORMAT_B8G8R8_SRGB = 36,
+    VK_FORMAT_R8G8B8A8_UNORM = 37,
+    VK_FORMAT_R8G8B8A8_SNORM = 38,
+    VK_FORMAT_R8G8B8A8_USCALED = 39,
+    VK_FORMAT_R8G8B8A8_SSCALED = 40,
+    VK_FORMAT_R8G8B8A8_UINT = 41,
+    VK_FORMAT_R8G8B8A8_SINT = 42,
+    VK_FORMAT_R8G8B8A8_SRGB = 43,
+    VK_FORMAT_B8G8R8A8_UNORM = 44,
+    VK_FORMAT_B8G8R8A8_SNORM = 45,
+    VK_FORMAT_B8G8R8A8_USCALED = 46,
+    VK_FORMAT_B8G8R8A8_SSCALED = 47,
+    VK_FORMAT_B8G8R8A8_UINT = 48,
+    VK_FORMAT_B8G8R8A8_SINT = 49,
+    VK_FORMAT_B8G8R8A8_SRGB = 50,
+    VK_FORMAT_A8B8G8R8_UNORM_PACK32 = 51,
+    VK_FORMAT_A8B8G8R8_SNORM_PACK32 = 52,
+    VK_FORMAT_A8B8G8R8_USCALED_PACK32 = 53,
+    VK_FORMAT_A8B8G8R8_SSCALED_PACK32 = 54,
+    VK_FORMAT_A8B8G8R8_UINT_PACK32 = 55,
+    VK_FORMAT_A8B8G8R8_SINT_PACK32 = 56,
+    VK_FORMAT_A8B8G8R8_SRGB_PACK32 = 57,
+    VK_FORMAT_A2R10G10B10_UNORM_PACK32 = 58,
+    VK_FORMAT_A2R10G10B10_SNORM_PACK32 = 59,
+    VK_FORMAT_A2R10G10B10_USCALED_PACK32 = 60,
+    VK_FORMAT_A2R10G10B10_SSCALED_PACK32 = 61,
+    VK_FORMAT_A2R10G10B10_UINT_PACK32 = 62,
+    VK_FORMAT_A2R10G10B10_SINT_PACK32 = 63,
+    VK_FORMAT_A2B10G10R10_UNORM_PACK32 = 64,
+    VK_FORMAT_A2B10G10R10_SNORM_PACK32 = 65,
+    VK_FORMAT_A2B10G10R10_USCALED_PACK32 = 66,
+    VK_FORMAT_A2B10G10R10_SSCALED_PACK32 = 67,
+    VK_FORMAT_A2B10G10R10_UINT_PACK32 = 68,
+    VK_FORMAT_A2B10G10R10_SINT_PACK32 = 69,
+    VK_FORMAT_R16_UNORM = 70,
+    VK_FORMAT_R16_SNORM = 71,
+    VK_FORMAT_R16_USCALED = 72,
+    VK_FORMAT_R16_SSCALED = 73,
+    VK_FORMAT_R16_UINT = 74,
+    VK_FORMAT_R16_SINT = 75,
+    VK_FORMAT_R16_SFLOAT = 76,
+    VK_FORMAT_R16G16_UNORM = 77,
+    VK_FORMAT_R16G16_SNORM = 78,
+    VK_FORMAT_R16G16_USCALED = 79,
+    VK_FORMAT_R16G16_SSCALED = 80,
+    VK_FORMAT_R16G16_UINT = 81,
+    VK_FORMAT_R16G16_SINT = 82,
+    VK_FORMAT_R16G16_SFLOAT = 83,
+    VK_FORMAT_R16G16B16_UNORM = 84,
+    VK_FORMAT_R16G16B16_SNORM = 85,
+    VK_FORMAT_R16G16B16_USCALED = 86,
+    VK_FORMAT_R16G16B16_SSCALED = 87,
+    VK_FORMAT_R16G16B16_UINT = 88,
+    VK_FORMAT_R16G16B16_SINT = 89,
+    VK_FORMAT_R16G16B16_SFLOAT = 90,
+    VK_FORMAT_R16G16B16A16_UNORM = 91,
+    VK_FORMAT_R16G16B16A16_SNORM = 92,
+    VK_FORMAT_R16G16B16A16_USCALED = 93,
+    VK_FORMAT_R16G16B16A16_SSCALED = 94,
+    VK_FORMAT_R16G16B16A16_UINT = 95,
+    VK_FORMAT_R16G16B16A16_SINT = 96,
+    VK_FORMAT_R16G16B16A16_SFLOAT = 97,
+    VK_FORMAT_R32_UINT = 98,
+    VK_FORMAT_R32_SINT = 99,
+    VK_FORMAT_R32_SFLOAT = 100,
+    VK_FORMAT_R32G32_UINT = 101,
+    VK_FORMAT_R32G32_SINT = 102,
+    VK_FORMAT_R32G32_SFLOAT = 103,
+    VK_FORMAT_R32G32B32_UINT = 104,
+    VK_FORMAT_R32G32B32_SINT = 105,
+    VK_FORMAT_R32G32B32_SFLOAT = 106,
+    VK_FORMAT_R32G32B32A32_UINT = 107,
+    VK_FORMAT_R32G32B32A32_SINT = 108,
+    VK_FORMAT_R32G32B32A32_SFLOAT = 109,
+    VK_FORMAT_R64_UINT = 110,
+    VK_FORMAT_R64_SINT = 111,
+    VK_FORMAT_R64_SFLOAT = 112,
+    VK_FORMAT_R64G64_UINT = 113,
+    VK_FORMAT_R64G64_SINT = 114,
+    VK_FORMAT_R64G64_SFLOAT = 115,
+    VK_FORMAT_R64G64B64_UINT = 116,
+    VK_FORMAT_R64G64B64_SINT = 117,
+    VK_FORMAT_R64G64B64_SFLOAT = 118,
+    VK_FORMAT_R64G64B64A64_UINT = 119,
+    VK_FORMAT_R64G64B64A64_SINT = 120,
+    VK_FORMAT_R64G64B64A64_SFLOAT = 121,
+    VK_FORMAT_B10G11R11_UFLOAT_PACK32 = 122,
+    VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 = 123,
+    VK_FORMAT_D16_UNORM = 124,
+    VK_FORMAT_X8_D24_UNORM_PACK32 = 125,
+    VK_FORMAT_D32_SFLOAT = 126,
+    VK_FORMAT_S8_UINT = 127,
+    VK_FORMAT_D16_UNORM_S8_UINT = 128,
+    VK_FORMAT_D24_UNORM_S8_UINT = 129,
+    VK_FORMAT_D32_SFLOAT_S8_UINT = 130,
+    VK_FORMAT_BC1_RGB_UNORM_BLOCK = 131,
+    VK_FORMAT_BC1_RGB_SRGB_BLOCK = 132,
+    VK_FORMAT_BC1_RGBA_UNORM_BLOCK = 133,
+    VK_FORMAT_BC1_RGBA_SRGB_BLOCK = 134,
+    VK_FORMAT_BC2_UNORM_BLOCK = 135,
+    VK_FORMAT_BC2_SRGB_BLOCK = 136,
+    VK_FORMAT_BC3_UNORM_BLOCK = 137,
+    VK_FORMAT_BC3_SRGB_BLOCK = 138,
+    VK_FORMAT_BC4_UNORM_BLOCK = 139,
+    VK_FORMAT_BC4_SNORM_BLOCK = 140,
+    VK_FORMAT_BC5_UNORM_BLOCK = 141,
+    VK_FORMAT_BC5_SNORM_BLOCK = 142,
+    VK_FORMAT_BC6H_UFLOAT_BLOCK = 143,
+    VK_FORMAT_BC6H_SFLOAT_BLOCK = 144,
+    VK_FORMAT_BC7_UNORM_BLOCK = 145,
+    VK_FORMAT_BC7_SRGB_BLOCK = 146,
+    VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK = 147,
+    VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK = 148,
+    VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK = 149,
+    VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK = 150,
+    VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK = 151,
+    VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK = 152,
+    VK_FORMAT_EAC_R11_UNORM_BLOCK = 153,
+    VK_FORMAT_EAC_R11_SNORM_BLOCK = 154,
+    VK_FORMAT_EAC_R11G11_UNORM_BLOCK = 155,
+    VK_FORMAT_EAC_R11G11_SNORM_BLOCK = 156,
+    VK_FORMAT_ASTC_4x4_UNORM_BLOCK = 157,
+    VK_FORMAT_ASTC_4x4_SRGB_BLOCK = 158,
+    VK_FORMAT_ASTC_5x4_UNORM_BLOCK = 159,
+    VK_FORMAT_ASTC_5x4_SRGB_BLOCK = 160,
+    VK_FORMAT_ASTC_5x5_UNORM_BLOCK = 161,
+    VK_FORMAT_ASTC_5x5_SRGB_BLOCK = 162,
+    VK_FORMAT_ASTC_6x5_UNORM_BLOCK = 163,
+    VK_FORMAT_ASTC_6x5_SRGB_BLOCK = 164,
+    VK_FORMAT_ASTC_6x6_UNORM_BLOCK = 165,
+    VK_FORMAT_ASTC_6x6_SRGB_BLOCK = 166,
+    VK_FORMAT_ASTC_8x5_UNORM_BLOCK = 167,
+    VK_FORMAT_ASTC_8x5_SRGB_BLOCK = 168,
+    VK_FORMAT_ASTC_8x6_UNORM_BLOCK = 169,
+    VK_FORMAT_ASTC_8x6_SRGB_BLOCK = 170,
+    VK_FORMAT_ASTC_8x8_UNORM_BLOCK = 171,
+    VK_FORMAT_ASTC_8x8_SRGB_BLOCK = 172,
+    VK_FORMAT_ASTC_10x5_UNORM_BLOCK = 173,
+    VK_FORMAT_ASTC_10x5_SRGB_BLOCK = 174,
+    VK_FORMAT_ASTC_10x6_UNORM_BLOCK = 175,
+    VK_FORMAT_ASTC_10x6_SRGB_BLOCK = 176,
+    VK_FORMAT_ASTC_10x8_UNORM_BLOCK = 177,
+    VK_FORMAT_ASTC_10x8_SRGB_BLOCK = 178,
+    VK_FORMAT_ASTC_10x10_UNORM_BLOCK = 179,
+    VK_FORMAT_ASTC_10x10_SRGB_BLOCK = 180,
+    VK_FORMAT_ASTC_12x10_UNORM_BLOCK = 181,
+    VK_FORMAT_ASTC_12x10_SRGB_BLOCK = 182,
+    VK_FORMAT_ASTC_12x12_UNORM_BLOCK = 183,
+    VK_FORMAT_ASTC_12x12_SRGB_BLOCK = 184,
+    VK_FORMAT_G8B8G8R8_422_UNORM = 1000156000,
+    VK_FORMAT_B8G8R8G8_422_UNORM = 1000156001,
+    VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM = 1000156002,
+    VK_FORMAT_G8_B8R8_2PLANE_420_UNORM = 1000156003,
+    VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM = 1000156004,
+    VK_FORMAT_G8_B8R8_2PLANE_422_UNORM = 1000156005,
+    VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM = 1000156006,
+    VK_FORMAT_R10X6_UNORM_PACK16 = 1000156007,
+    VK_FORMAT_R10X6G10X6_UNORM_2PACK16 = 1000156008,
+    VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16 = 1000156009,
+    VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16 = 1000156010,
+    VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16 = 1000156011,
+    VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16 = 1000156012,
+    VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16 = 1000156013,
+    VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16 = 1000156014,
+    VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16 = 1000156015,
+    VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16 = 1000156016,
+    VK_FORMAT_R12X4_UNORM_PACK16 = 1000156017,
+    VK_FORMAT_R12X4G12X4_UNORM_2PACK16 = 1000156018,
+    VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16 = 1000156019,
+    VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16 = 1000156020,
+    VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16 = 1000156021,
+    VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16 = 1000156022,
+    VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16 = 1000156023,
+    VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16 = 1000156024,
+    VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16 = 1000156025,
+    VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16 = 1000156026,
+    VK_FORMAT_G16B16G16R16_422_UNORM = 1000156027,
+    VK_FORMAT_B16G16R16G16_422_UNORM = 1000156028,
+    VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM = 1000156029,
+    VK_FORMAT_G16_B16R16_2PLANE_420_UNORM = 1000156030,
+    VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM = 1000156031,
+    VK_FORMAT_G16_B16R16_2PLANE_422_UNORM = 1000156032,
+    VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM = 1000156033,
+    VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT = 1000066000,
+    VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT = 1000066001,
+    VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT = 1000066002,
+    VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT = 1000066003,
+    VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT = 1000066004,
+    VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT = 1000066005,
+    VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT = 1000066006,
+    VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT = 1000066007,
+    VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT = 1000066008,
+    VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT = 1000066009,
+    VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT = 1000066010,
+    VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT = 1000066011,
+    VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT = 1000066012,
+    VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT = 1000066013,
+    VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT = 1000340000,
+    VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT = 1000340001,
+    VK_FORMAT_MAX_ENUM = 0x7FFFFFFF
+} VkFormat;
+
+typedef enum VkImageTiling {
+    VK_IMAGE_TILING_OPTIMAL = 0,
+    VK_IMAGE_TILING_LINEAR = 1,
+    VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT = 1000158000,
+    VK_IMAGE_TILING_MAX_ENUM = 0x7FFFFFFF
+} VkImageTiling;
+
+typedef enum VkImageType {
+    VK_IMAGE_TYPE_1D = 0,
+    VK_IMAGE_TYPE_2D = 1,
+    VK_IMAGE_TYPE_3D = 2,
+    VK_IMAGE_TYPE_MAX_ENUM = 0x7FFFFFFF
+} VkImageType;
+
+typedef enum VkPhysicalDeviceType {
+    VK_PHYSICAL_DEVICE_TYPE_OTHER = 0,
+    VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU = 1,
+    VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU = 2,
+    VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU = 3,
+    VK_PHYSICAL_DEVICE_TYPE_CPU = 4,
+    VK_PHYSICAL_DEVICE_TYPE_MAX_ENUM = 0x7FFFFFFF
+} VkPhysicalDeviceType;
+
+typedef enum VkQueryType {
+    VK_QUERY_TYPE_OCCLUSION = 0,
+    VK_QUERY_TYPE_PIPELINE_STATISTICS = 1,
+    VK_QUERY_TYPE_TIMESTAMP = 2,
+    VK_QUERY_TYPE_MAX_ENUM = 0x7FFFFFFF
+} VkQueryType;
+
+typedef enum VkSharingMode {
+    VK_SHARING_MODE_EXCLUSIVE = 0,
+    VK_SHARING_MODE_CONCURRENT = 1,
+    VK_SHARING_MODE_MAX_ENUM = 0x7FFFFFFF
+} VkSharingMode;
+
+typedef enum VkComponentSwizzle {
+    VK_COMPONENT_SWIZZLE_IDENTITY = 0,
+    VK_COMPONENT_SWIZZLE_ZERO = 1,
+    VK_COMPONENT_SWIZZLE_ONE = 2,
+    VK_COMPONENT_SWIZZLE_R = 3,
+    VK_COMPONENT_SWIZZLE_G = 4,
+    VK_COMPONENT_SWIZZLE_B = 5,
+    VK_COMPONENT_SWIZZLE_A = 6,
+    VK_COMPONENT_SWIZZLE_MAX_ENUM = 0x7FFFFFFF
+} VkComponentSwizzle;
+
+typedef enum VkImageViewType {
+    VK_IMAGE_VIEW_TYPE_1D = 0,
+    VK_IMAGE_VIEW_TYPE_2D = 1,
+    VK_IMAGE_VIEW_TYPE_3D = 2,
+    VK_IMAGE_VIEW_TYPE_CUBE = 3,
+    VK_IMAGE_VIEW_TYPE_1D_ARRAY = 4,
+    VK_IMAGE_VIEW_TYPE_2D_ARRAY = 5,
+    VK_IMAGE_VIEW_TYPE_CUBE_ARRAY = 6,
+    VK_IMAGE_VIEW_TYPE_MAX_ENUM = 0x7FFFFFFF
+} VkImageViewType;
+
+typedef enum VkBlendFactor {
+    VK_BLEND_FACTOR_ZERO = 0,
+    VK_BLEND_FACTOR_ONE = 1,
+    VK_BLEND_FACTOR_SRC_COLOR = 2,
+    VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR = 3,
+    VK_BLEND_FACTOR_DST_COLOR = 4,
+    VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR = 5,
+    VK_BLEND_FACTOR_SRC_ALPHA = 6,
+    VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA = 7,
+    VK_BLEND_FACTOR_DST_ALPHA = 8,
+    VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA = 9,
+    VK_BLEND_FACTOR_CONSTANT_COLOR = 10,
+    VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR = 11,
+    VK_BLEND_FACTOR_CONSTANT_ALPHA = 12,
+    VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA = 13,
+    VK_BLEND_FACTOR_SRC_ALPHA_SATURATE = 14,
+    VK_BLEND_FACTOR_SRC1_COLOR = 15,
+    VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR = 16,
+    VK_BLEND_FACTOR_SRC1_ALPHA = 17,
+    VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA = 18,
+    VK_BLEND_FACTOR_MAX_ENUM = 0x7FFFFFFF
+} VkBlendFactor;
+
+typedef enum VkBlendOp {
+    VK_BLEND_OP_ADD = 0,
+    VK_BLEND_OP_SUBTRACT = 1,
+    VK_BLEND_OP_REVERSE_SUBTRACT = 2,
+    VK_BLEND_OP_MIN = 3,
+    VK_BLEND_OP_MAX = 4,
+    VK_BLEND_OP_ZERO_EXT = 1000148000,
+    VK_BLEND_OP_SRC_EXT = 1000148001,
+    VK_BLEND_OP_DST_EXT = 1000148002,
+    VK_BLEND_OP_SRC_OVER_EXT = 1000148003,
+    VK_BLEND_OP_DST_OVER_EXT = 1000148004,
+    VK_BLEND_OP_SRC_IN_EXT = 1000148005,
+    VK_BLEND_OP_DST_IN_EXT = 1000148006,
+    VK_BLEND_OP_SRC_OUT_EXT = 1000148007,
+    VK_BLEND_OP_DST_OUT_EXT = 1000148008,
+    VK_BLEND_OP_SRC_ATOP_EXT = 1000148009,
+    VK_BLEND_OP_DST_ATOP_EXT = 1000148010,
+    VK_BLEND_OP_XOR_EXT = 1000148011,
+    VK_BLEND_OP_MULTIPLY_EXT = 1000148012,
+    VK_BLEND_OP_SCREEN_EXT = 1000148013,
+    VK_BLEND_OP_OVERLAY_EXT = 1000148014,
+    VK_BLEND_OP_DARKEN_EXT = 1000148015,
+    VK_BLEND_OP_LIGHTEN_EXT = 1000148016,
+    VK_BLEND_OP_COLORDODGE_EXT = 1000148017,
+    VK_BLEND_OP_COLORBURN_EXT = 1000148018,
+    VK_BLEND_OP_HARDLIGHT_EXT = 1000148019,
+    VK_BLEND_OP_SOFTLIGHT_EXT = 1000148020,
+    VK_BLEND_OP_DIFFERENCE_EXT = 1000148021,
+    VK_BLEND_OP_EXCLUSION_EXT = 1000148022,
+    VK_BLEND_OP_INVERT_EXT = 1000148023,
+    VK_BLEND_OP_INVERT_RGB_EXT = 1000148024,
+    VK_BLEND_OP_LINEARDODGE_EXT = 1000148025,
+    VK_BLEND_OP_LINEARBURN_EXT = 1000148026,
+    VK_BLEND_OP_VIVIDLIGHT_EXT = 1000148027,
+    VK_BLEND_OP_LINEARLIGHT_EXT = 1000148028,
+    VK_BLEND_OP_PINLIGHT_EXT = 1000148029,
+    VK_BLEND_OP_HARDMIX_EXT = 1000148030,
+    VK_BLEND_OP_HSL_HUE_EXT = 1000148031,
+    VK_BLEND_OP_HSL_SATURATION_EXT = 1000148032,
+    VK_BLEND_OP_HSL_COLOR_EXT = 1000148033,
+    VK_BLEND_OP_HSL_LUMINOSITY_EXT = 1000148034,
+    VK_BLEND_OP_PLUS_EXT = 1000148035,
+    VK_BLEND_OP_PLUS_CLAMPED_EXT = 1000148036,
+    VK_BLEND_OP_PLUS_CLAMPED_ALPHA_EXT = 1000148037,
+    VK_BLEND_OP_PLUS_DARKER_EXT = 1000148038,
+    VK_BLEND_OP_MINUS_EXT = 1000148039,
+    VK_BLEND_OP_MINUS_CLAMPED_EXT = 1000148040,
+    VK_BLEND_OP_CONTRAST_EXT = 1000148041,
+    VK_BLEND_OP_INVERT_OVG_EXT = 1000148042,
+    VK_BLEND_OP_RED_EXT = 1000148043,
+    VK_BLEND_OP_GREEN_EXT = 1000148044,
+    VK_BLEND_OP_BLUE_EXT = 1000148045,
+    VK_BLEND_OP_MAX_ENUM = 0x7FFFFFFF
+} VkBlendOp;
+
+typedef enum VkCompareOp {
+    VK_COMPARE_OP_NEVER = 0,
+    VK_COMPARE_OP_LESS = 1,
+    VK_COMPARE_OP_EQUAL = 2,
+    VK_COMPARE_OP_LESS_OR_EQUAL = 3,
+    VK_COMPARE_OP_GREATER = 4,
+    VK_COMPARE_OP_NOT_EQUAL = 5,
+    VK_COMPARE_OP_GREATER_OR_EQUAL = 6,
+    VK_COMPARE_OP_ALWAYS = 7,
+    VK_COMPARE_OP_MAX_ENUM = 0x7FFFFFFF
+} VkCompareOp;
+
+typedef enum VkDynamicState {
+    VK_DYNAMIC_STATE_VIEWPORT = 0,
+    VK_DYNAMIC_STATE_SCISSOR = 1,
+    VK_DYNAMIC_STATE_LINE_WIDTH = 2,
+    VK_DYNAMIC_STATE_DEPTH_BIAS = 3,
+    VK_DYNAMIC_STATE_BLEND_CONSTANTS = 4,
+    VK_DYNAMIC_STATE_DEPTH_BOUNDS = 5,
+    VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK = 6,
+    VK_DYNAMIC_STATE_STENCIL_WRITE_MASK = 7,
+    VK_DYNAMIC_STATE_STENCIL_REFERENCE = 8,
+    VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT = 1000099000,
+    VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT = 1000143000,
+    VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR = 1000226000,
+    VK_DYNAMIC_STATE_LINE_STIPPLE_EXT = 1000259000,
+    VK_DYNAMIC_STATE_CULL_MODE_EXT = 1000267000,
+    VK_DYNAMIC_STATE_FRONT_FACE_EXT = 1000267001,
+    VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT = 1000267002,
+    VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT = 1000267003,
+    VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT = 1000267004,
+    VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT = 1000267005,
+    VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE_EXT = 1000267006,
+    VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE_EXT = 1000267007,
+    VK_DYNAMIC_STATE_DEPTH_COMPARE_OP_EXT = 1000267008,
+    VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE_EXT = 1000267009,
+    VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE_EXT = 1000267010,
+    VK_DYNAMIC_STATE_STENCIL_OP_EXT = 1000267011,
+    VK_DYNAMIC_STATE_MAX_ENUM = 0x7FFFFFFF
+} VkDynamicState;
+
+typedef enum VkFrontFace {
+    VK_FRONT_FACE_COUNTER_CLOCKWISE = 0,
+    VK_FRONT_FACE_CLOCKWISE = 1,
+    VK_FRONT_FACE_MAX_ENUM = 0x7FFFFFFF
+} VkFrontFace;
+
+typedef enum VkVertexInputRate {
+    VK_VERTEX_INPUT_RATE_VERTEX = 0,
+    VK_VERTEX_INPUT_RATE_INSTANCE = 1,
+    VK_VERTEX_INPUT_RATE_MAX_ENUM = 0x7FFFFFFF
+} VkVertexInputRate;
+
+typedef enum VkPrimitiveTopology {
+    VK_PRIMITIVE_TOPOLOGY_POINT_LIST = 0,
+    VK_PRIMITIVE_TOPOLOGY_LINE_LIST = 1,
+    VK_PRIMITIVE_TOPOLOGY_LINE_STRIP = 2,
+    VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST = 3,
+    VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP = 4,
+    VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN = 5,
+    VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY = 6,
+    VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY = 7,
+    VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY = 8,
+    VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY = 9,
+    VK_PRIMITIVE_TOPOLOGY_PATCH_LIST = 10,
+    VK_PRIMITIVE_TOPOLOGY_MAX_ENUM = 0x7FFFFFFF
+} VkPrimitiveTopology;
+
+typedef enum VkPolygonMode {
+    VK_POLYGON_MODE_FILL = 0,
+    VK_POLYGON_MODE_LINE = 1,
+    VK_POLYGON_MODE_POINT = 2,
+    VK_POLYGON_MODE_MAX_ENUM = 0x7FFFFFFF
+} VkPolygonMode;
+
+typedef enum VkStencilOp {
+    VK_STENCIL_OP_KEEP = 0,
+    VK_STENCIL_OP_ZERO = 1,
+    VK_STENCIL_OP_REPLACE = 2,
+    VK_STENCIL_OP_INCREMENT_AND_CLAMP = 3,
+    VK_STENCIL_OP_DECREMENT_AND_CLAMP = 4,
+    VK_STENCIL_OP_INVERT = 5,
+    VK_STENCIL_OP_INCREMENT_AND_WRAP = 6,
+    VK_STENCIL_OP_DECREMENT_AND_WRAP = 7,
+    VK_STENCIL_OP_MAX_ENUM = 0x7FFFFFFF
+} VkStencilOp;
+
+typedef enum VkLogicOp {
+    VK_LOGIC_OP_CLEAR = 0,
+    VK_LOGIC_OP_AND = 1,
+    VK_LOGIC_OP_AND_REVERSE = 2,
+    VK_LOGIC_OP_COPY = 3,
+    VK_LOGIC_OP_AND_INVERTED = 4,
+    VK_LOGIC_OP_NO_OP = 5,
+    VK_LOGIC_OP_XOR = 6,
+    VK_LOGIC_OP_OR = 7,
+    VK_LOGIC_OP_NOR = 8,
+    VK_LOGIC_OP_EQUIVALENT = 9,
+    VK_LOGIC_OP_INVERT = 10,
+    VK_LOGIC_OP_OR_REVERSE = 11,
+    VK_LOGIC_OP_COPY_INVERTED = 12,
+    VK_LOGIC_OP_OR_INVERTED = 13,
+    VK_LOGIC_OP_NAND = 14,
+    VK_LOGIC_OP_SET = 15,
+    VK_LOGIC_OP_MAX_ENUM = 0x7FFFFFFF
+} VkLogicOp;
+
+typedef enum VkBorderColor {
+    VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK = 0,
+    VK_BORDER_COLOR_INT_TRANSPARENT_BLACK = 1,
+    VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK = 2,
+    VK_BORDER_COLOR_INT_OPAQUE_BLACK = 3,
+    VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE = 4,
+    VK_BORDER_COLOR_INT_OPAQUE_WHITE = 5,
+    VK_BORDER_COLOR_FLOAT_CUSTOM_EXT = 1000287003,
+    VK_BORDER_COLOR_INT_CUSTOM_EXT = 1000287004,
+    VK_BORDER_COLOR_MAX_ENUM = 0x7FFFFFFF
+} VkBorderColor;
+
+typedef enum VkFilter {
+    VK_FILTER_NEAREST = 0,
+    VK_FILTER_LINEAR = 1,
+    VK_FILTER_CUBIC_IMG = 1000015000,
+    VK_FILTER_CUBIC_EXT = VK_FILTER_CUBIC_IMG,
+    VK_FILTER_MAX_ENUM = 0x7FFFFFFF
+} VkFilter;
+
+typedef enum VkSamplerAddressMode {
+    VK_SAMPLER_ADDRESS_MODE_REPEAT = 0,
+    VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT = 1,
+    VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE = 2,
+    VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER = 3,
+    VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE = 4,
+    VK_SAMPLER_ADDRESS_MODE_MAX_ENUM = 0x7FFFFFFF
+} VkSamplerAddressMode;
+
+typedef enum VkSamplerMipmapMode {
+    VK_SAMPLER_MIPMAP_MODE_NEAREST = 0,
+    VK_SAMPLER_MIPMAP_MODE_LINEAR = 1,
+    VK_SAMPLER_MIPMAP_MODE_MAX_ENUM = 0x7FFFFFFF
+} VkSamplerMipmapMode;
+
+typedef enum VkDescriptorType {
+    VK_DESCRIPTOR_TYPE_SAMPLER = 0,
+    VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER = 1,
+    VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE = 2,
+    VK_DESCRIPTOR_TYPE_STORAGE_IMAGE = 3,
+    VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER = 4,
+    VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER = 5,
+    VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER = 6,
+    VK_DESCRIPTOR_TYPE_STORAGE_BUFFER = 7,
+    VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC = 8,
+    VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC = 9,
+    VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT = 10,
+    VK_DESCRIPTOR_TYPE_MAX_ENUM = 0x7FFFFFFF
+} VkDescriptorType;
+
+typedef enum VkAttachmentLoadOp {
+    VK_ATTACHMENT_LOAD_OP_LOAD = 0,
+    VK_ATTACHMENT_LOAD_OP_CLEAR = 1,
+    VK_ATTACHMENT_LOAD_OP_DONT_CARE = 2,
+    VK_ATTACHMENT_LOAD_OP_MAX_ENUM = 0x7FFFFFFF
+} VkAttachmentLoadOp;
+
+typedef enum VkAttachmentStoreOp {
+    VK_ATTACHMENT_STORE_OP_STORE = 0,
+    VK_ATTACHMENT_STORE_OP_DONT_CARE = 1,
+    VK_ATTACHMENT_STORE_OP_MAX_ENUM = 0x7FFFFFFF
+} VkAttachmentStoreOp;
+
+typedef enum VkPipelineBindPoint {
+    VK_PIPELINE_BIND_POINT_GRAPHICS = 0,
+    VK_PIPELINE_BIND_POINT_COMPUTE = 1,
+    VK_PIPELINE_BIND_POINT_MAX_ENUM = 0x7FFFFFFF
+} VkPipelineBindPoint;
+
+typedef enum VkCommandBufferLevel {
+    VK_COMMAND_BUFFER_LEVEL_PRIMARY = 0,
+    VK_COMMAND_BUFFER_LEVEL_SECONDARY = 1,
+    VK_COMMAND_BUFFER_LEVEL_MAX_ENUM = 0x7FFFFFFF
+} VkCommandBufferLevel;
+
+typedef enum VkIndexType {
+    VK_INDEX_TYPE_UINT16 = 0,
+    VK_INDEX_TYPE_UINT32 = 1,
+    VK_INDEX_TYPE_UINT8_EXT = 1000265000,
+    VK_INDEX_TYPE_MAX_ENUM = 0x7FFFFFFF
+} VkIndexType;
+
+typedef enum VkSubpassContents {
+    VK_SUBPASS_CONTENTS_INLINE = 0,
+    VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS = 1,
+    VK_SUBPASS_CONTENTS_MAX_ENUM = 0x7FFFFFFF
+} VkSubpassContents;
+
+typedef enum VkAccessFlagBits {
+    VK_ACCESS_INDIRECT_COMMAND_READ_BIT = 0x00000001,
+    VK_ACCESS_INDEX_READ_BIT = 0x00000002,
+    VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT = 0x00000004,
+    VK_ACCESS_UNIFORM_READ_BIT = 0x00000008,
+    VK_ACCESS_INPUT_ATTACHMENT_READ_BIT = 0x00000010,
+    VK_ACCESS_SHADER_READ_BIT = 0x00000020,
+    VK_ACCESS_SHADER_WRITE_BIT = 0x00000040,
+    VK_ACCESS_COLOR_ATTACHMENT_READ_BIT = 0x00000080,
+    VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT = 0x00000100,
+    VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT = 0x00000200,
+    VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT = 0x00000400,
+    VK_ACCESS_TRANSFER_READ_BIT = 0x00000800,
+    VK_ACCESS_TRANSFER_WRITE_BIT = 0x00001000,
+    VK_ACCESS_HOST_READ_BIT = 0x00002000,
+    VK_ACCESS_HOST_WRITE_BIT = 0x00004000,
+    VK_ACCESS_MEMORY_READ_BIT = 0x00008000,
+    VK_ACCESS_MEMORY_WRITE_BIT = 0x00010000,
+    VK_ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT = 0x00080000,
+    VK_ACCESS_SHADING_RATE_IMAGE_READ_BIT_NV = 0x00800000,
+    VK_ACCESS_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR = VK_ACCESS_SHADING_RATE_IMAGE_READ_BIT_NV,
+    VK_ACCESS_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkAccessFlagBits;
+typedef VkFlags VkAccessFlags;
+
+typedef enum VkImageAspectFlagBits {
+    VK_IMAGE_ASPECT_COLOR_BIT = 0x00000001,
+    VK_IMAGE_ASPECT_DEPTH_BIT = 0x00000002,
+    VK_IMAGE_ASPECT_STENCIL_BIT = 0x00000004,
+    VK_IMAGE_ASPECT_METADATA_BIT = 0x00000008,
+    VK_IMAGE_ASPECT_PLANE_0_BIT = 0x00000010,
+    VK_IMAGE_ASPECT_PLANE_1_BIT = 0x00000020,
+    VK_IMAGE_ASPECT_PLANE_2_BIT = 0x00000040,
+    VK_IMAGE_ASPECT_MEMORY_PLANE_0_BIT_EXT = 0x00000080,
+    VK_IMAGE_ASPECT_MEMORY_PLANE_1_BIT_EXT = 0x00000100,
+    VK_IMAGE_ASPECT_MEMORY_PLANE_2_BIT_EXT = 0x00000200,
+    VK_IMAGE_ASPECT_MEMORY_PLANE_3_BIT_EXT = 0x00000400,
+    VK_IMAGE_ASPECT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkImageAspectFlagBits;
+typedef VkFlags VkImageAspectFlags;
+
+typedef enum VkFormatFeatureFlagBits {
+    VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT = 0x00000001,
+    VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT = 0x00000002,
+    VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT = 0x00000004,
+    VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT = 0x00000008,
+    VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT = 0x00000010,
+    VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT = 0x00000020,
+    VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT = 0x00000040,
+    VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT = 0x00000080,
+    VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT = 0x00000100,
+    VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000200,
+    VK_FORMAT_FEATURE_BLIT_SRC_BIT = 0x00000400,
+    VK_FORMAT_FEATURE_BLIT_DST_BIT = 0x00000800,
+    VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT = 0x00001000,
+    VK_FORMAT_FEATURE_TRANSFER_SRC_BIT = 0x00004000,
+    VK_FORMAT_FEATURE_TRANSFER_DST_BIT = 0x00008000,
+    VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT = 0x00020000,
+    VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT = 0x00040000,
+    VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT = 0x00080000,
+    VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT = 0x00100000,
+    VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT = 0x00200000,
+    VK_FORMAT_FEATURE_DISJOINT_BIT = 0x00400000,
+    VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT = 0x00800000,
+    VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT = 0x00010000,
+    VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG = 0x00002000,
+    VK_FORMAT_FEATURE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = 0x40000000,
+    VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT = VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG,
+    VK_FORMAT_FEATURE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkFormatFeatureFlagBits;
+typedef VkFlags VkFormatFeatureFlags;
+
+typedef enum VkImageCreateFlagBits {
+    VK_IMAGE_CREATE_SPARSE_BINDING_BIT = 0x00000001,
+    VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT = 0x00000002,
+    VK_IMAGE_CREATE_SPARSE_ALIASED_BIT = 0x00000004,
+    VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT = 0x00000008,
+    VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT = 0x00000010,
+    VK_IMAGE_CREATE_ALIAS_BIT = 0x00000400,
+    VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT = 0x00000040,
+    VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT = 0x00000020,
+    VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT = 0x00000080,
+    VK_IMAGE_CREATE_EXTENDED_USAGE_BIT = 0x00000100,
+    VK_IMAGE_CREATE_PROTECTED_BIT = 0x00000800,
+    VK_IMAGE_CREATE_DISJOINT_BIT = 0x00000200,
+    VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT = 0x00001000,
+    VK_IMAGE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkImageCreateFlagBits;
+typedef VkFlags VkImageCreateFlags;
+
+typedef enum VkSampleCountFlagBits {
+    VK_SAMPLE_COUNT_1_BIT = 0x00000001,
+    VK_SAMPLE_COUNT_2_BIT = 0x00000002,
+    VK_SAMPLE_COUNT_4_BIT = 0x00000004,
+    VK_SAMPLE_COUNT_8_BIT = 0x00000008,
+    VK_SAMPLE_COUNT_16_BIT = 0x00000010,
+    VK_SAMPLE_COUNT_32_BIT = 0x00000020,
+    VK_SAMPLE_COUNT_64_BIT = 0x00000040,
+    VK_SAMPLE_COUNT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkSampleCountFlagBits;
+typedef VkFlags VkSampleCountFlags;
+
+typedef enum VkImageUsageFlagBits {
+    VK_IMAGE_USAGE_TRANSFER_SRC_BIT = 0x00000001,
+    VK_IMAGE_USAGE_TRANSFER_DST_BIT = 0x00000002,
+    VK_IMAGE_USAGE_SAMPLED_BIT = 0x00000004,
+    VK_IMAGE_USAGE_STORAGE_BIT = 0x00000008,
+    VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT = 0x00000010,
+    VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000020,
+    VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT = 0x00000040,
+    VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT = 0x00000080,
+    VK_IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV = 0x00000100,
+    VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = VK_IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV,
+    VK_IMAGE_USAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkImageUsageFlagBits;
+typedef VkFlags VkImageUsageFlags;
+typedef VkFlags VkInstanceCreateFlags;
+
+typedef enum VkMemoryHeapFlagBits {
+    VK_MEMORY_HEAP_DEVICE_LOCAL_BIT = 0x00000001,
+    VK_MEMORY_HEAP_MULTI_INSTANCE_BIT = 0x00000002,
+    VK_MEMORY_HEAP_SEU_SAFE_BIT_KHR = 0x00000004,
+    VK_MEMORY_HEAP_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkMemoryHeapFlagBits;
+typedef VkFlags VkMemoryHeapFlags;
+
+typedef enum VkMemoryPropertyFlagBits {
+    VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT = 0x00000001,
+    VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT = 0x00000002,
+    VK_MEMORY_PROPERTY_HOST_COHERENT_BIT = 0x00000004,
+    VK_MEMORY_PROPERTY_HOST_CACHED_BIT = 0x00000008,
+    VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT = 0x00000010,
+    VK_MEMORY_PROPERTY_PROTECTED_BIT = 0x00000020,
+    VK_MEMORY_PROPERTY_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkMemoryPropertyFlagBits;
+typedef VkFlags VkMemoryPropertyFlags;
+
+typedef enum VkQueueFlagBits {
+    VK_QUEUE_GRAPHICS_BIT = 0x00000001,
+    VK_QUEUE_COMPUTE_BIT = 0x00000002,
+    VK_QUEUE_TRANSFER_BIT = 0x00000004,
+    VK_QUEUE_SPARSE_BINDING_BIT = 0x00000008,
+    VK_QUEUE_PROTECTED_BIT = 0x00000010,
+    VK_QUEUE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkQueueFlagBits;
+typedef VkFlags VkQueueFlags;
+typedef VkFlags VkDeviceCreateFlags;
+
+typedef enum VkDeviceQueueCreateFlagBits {
+    VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT = 0x00000001,
+    VK_DEVICE_QUEUE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkDeviceQueueCreateFlagBits;
+typedef VkFlags VkDeviceQueueCreateFlags;
+
+typedef enum VkPipelineStageFlagBits {
+    VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT = 0x00000001,
+    VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT = 0x00000002,
+    VK_PIPELINE_STAGE_VERTEX_INPUT_BIT = 0x00000004,
+    VK_PIPELINE_STAGE_VERTEX_SHADER_BIT = 0x00000008,
+    VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT = 0x00000010,
+    VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT = 0x00000020,
+    VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT = 0x00000040,
+    VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT = 0x00000080,
+    VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT = 0x00000100,
+    VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT = 0x00000200,
+    VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT = 0x00000400,
+    VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT = 0x00000800,
+    VK_PIPELINE_STAGE_TRANSFER_BIT = 0x00001000,
+    VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT = 0x00002000,
+    VK_PIPELINE_STAGE_HOST_BIT = 0x00004000,
+    VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT = 0x00008000,
+    VK_PIPELINE_STAGE_ALL_COMMANDS_BIT = 0x00010000,
+    VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV = 0x00400000,
+    VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV,
+    VK_PIPELINE_STAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkPipelineStageFlagBits;
+typedef VkFlags VkPipelineStageFlags;
+typedef VkFlags VkMemoryMapFlags;
+
+typedef enum VkSparseMemoryBindFlagBits {
+    VK_SPARSE_MEMORY_BIND_METADATA_BIT = 0x00000001,
+    VK_SPARSE_MEMORY_BIND_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkSparseMemoryBindFlagBits;
+typedef VkFlags VkSparseMemoryBindFlags;
+
+typedef enum VkSparseImageFormatFlagBits {
+    VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT = 0x00000001,
+    VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT = 0x00000002,
+    VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT = 0x00000004,
+    VK_SPARSE_IMAGE_FORMAT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkSparseImageFormatFlagBits;
+typedef VkFlags VkSparseImageFormatFlags;
+
+typedef enum VkFenceCreateFlagBits {
+    VK_FENCE_CREATE_SIGNALED_BIT = 0x00000001,
+    VK_FENCE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkFenceCreateFlagBits;
+typedef VkFlags VkFenceCreateFlags;
+typedef VkFlags VkSemaphoreCreateFlags;
+typedef VkFlags VkEventCreateFlags;
+
+typedef enum VkQueryPipelineStatisticFlagBits {
+    VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT = 0x00000001,
+    VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT = 0x00000002,
+    VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT = 0x00000004,
+    VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT = 0x00000008,
+    VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT = 0x00000010,
+    VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT = 0x00000020,
+    VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT = 0x00000040,
+    VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT = 0x00000080,
+    VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT = 0x00000100,
+    VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT = 0x00000200,
+    VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT = 0x00000400,
+    VK_QUERY_PIPELINE_STATISTIC_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkQueryPipelineStatisticFlagBits;
+typedef VkFlags VkQueryPipelineStatisticFlags;
+typedef VkFlags VkQueryPoolCreateFlags;
+
+typedef enum VkQueryResultFlagBits {
+    VK_QUERY_RESULT_64_BIT = 0x00000001,
+    VK_QUERY_RESULT_WAIT_BIT = 0x00000002,
+    VK_QUERY_RESULT_WITH_AVAILABILITY_BIT = 0x00000004,
+    VK_QUERY_RESULT_PARTIAL_BIT = 0x00000008,
+    VK_QUERY_RESULT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkQueryResultFlagBits;
+typedef VkFlags VkQueryResultFlags;
+
+typedef enum VkBufferCreateFlagBits {
+    VK_BUFFER_CREATE_SPARSE_BINDING_BIT = 0x00000001,
+    VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT = 0x00000002,
+    VK_BUFFER_CREATE_SPARSE_ALIASED_BIT = 0x00000004,
+    VK_BUFFER_CREATE_PROTECTED_BIT = 0x00000008,
+    VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT = 0x00000010,
+    VK_BUFFER_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkBufferCreateFlagBits;
+typedef VkFlags VkBufferCreateFlags;
+
+typedef enum VkBufferUsageFlagBits {
+    VK_BUFFER_USAGE_TRANSFER_SRC_BIT = 0x00000001,
+    VK_BUFFER_USAGE_TRANSFER_DST_BIT = 0x00000002,
+    VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT = 0x00000004,
+    VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT = 0x00000008,
+    VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT = 0x00000010,
+    VK_BUFFER_USAGE_STORAGE_BUFFER_BIT = 0x00000020,
+    VK_BUFFER_USAGE_INDEX_BUFFER_BIT = 0x00000040,
+    VK_BUFFER_USAGE_VERTEX_BUFFER_BIT = 0x00000080,
+    VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT = 0x00000100,
+    VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT = 0x00020000,
+    VK_BUFFER_USAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkBufferUsageFlagBits;
+typedef VkFlags VkBufferUsageFlags;
+typedef VkFlags VkBufferViewCreateFlags;
+
+typedef enum VkImageViewCreateFlagBits {
+    VK_IMAGE_VIEW_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkImageViewCreateFlagBits;
+typedef VkFlags VkImageViewCreateFlags;
+
+typedef enum VkPipelineCacheCreateFlagBits {
+    VK_PIPELINE_CACHE_CREATE_USE_APPLICATION_STORAGE_BIT = 0x00000004,
+    VK_PIPELINE_CACHE_CREATE_RESERVED_1_BIT_EXT = 0x00000002,
+    VK_PIPELINE_CACHE_CREATE_READ_ONLY_BIT = VK_PIPELINE_CACHE_CREATE_RESERVED_1_BIT_EXT,
+    VK_PIPELINE_CACHE_CREATE_READ_ONLY_BIT_KHR = VK_PIPELINE_CACHE_CREATE_READ_ONLY_BIT,
+    VK_PIPELINE_CACHE_CREATE_USE_APPLICATION_STORAGE_BIT_KHR = VK_PIPELINE_CACHE_CREATE_USE_APPLICATION_STORAGE_BIT,
+    VK_PIPELINE_CACHE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkPipelineCacheCreateFlagBits;
+typedef VkFlags VkPipelineCacheCreateFlags;
+
+typedef enum VkColorComponentFlagBits {
+    VK_COLOR_COMPONENT_R_BIT = 0x00000001,
+    VK_COLOR_COMPONENT_G_BIT = 0x00000002,
+    VK_COLOR_COMPONENT_B_BIT = 0x00000004,
+    VK_COLOR_COMPONENT_A_BIT = 0x00000008,
+    VK_COLOR_COMPONENT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkColorComponentFlagBits;
+typedef VkFlags VkColorComponentFlags;
+
+typedef enum VkPipelineCreateFlagBits {
+    VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT = 0x00000001,
+    VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT = 0x00000002,
+    VK_PIPELINE_CREATE_DERIVATIVE_BIT = 0x00000004,
+    VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT = 0x00000008,
+    VK_PIPELINE_CREATE_DISPATCH_BASE_BIT = 0x00000010,
+    VK_PIPELINE_CREATE_DISPATCH_BASE = VK_PIPELINE_CREATE_DISPATCH_BASE_BIT,
+    VK_PIPELINE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkPipelineCreateFlagBits;
+typedef VkFlags VkPipelineCreateFlags;
+
+typedef enum VkPipelineShaderStageCreateFlagBits {
+    VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT = 0x00000001,
+    VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT = 0x00000002,
+    VK_PIPELINE_SHADER_STAGE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkPipelineShaderStageCreateFlagBits;
+typedef VkFlags VkPipelineShaderStageCreateFlags;
+
+typedef enum VkShaderStageFlagBits {
+    VK_SHADER_STAGE_VERTEX_BIT = 0x00000001,
+    VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT = 0x00000002,
+    VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT = 0x00000004,
+    VK_SHADER_STAGE_GEOMETRY_BIT = 0x00000008,
+    VK_SHADER_STAGE_FRAGMENT_BIT = 0x00000010,
+    VK_SHADER_STAGE_COMPUTE_BIT = 0x00000020,
+    VK_SHADER_STAGE_ALL_GRAPHICS = 0x0000001F,
+    VK_SHADER_STAGE_ALL = 0x7FFFFFFF,
+    VK_SHADER_STAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkShaderStageFlagBits;
+
+typedef enum VkCullModeFlagBits {
+    VK_CULL_MODE_NONE = 0,
+    VK_CULL_MODE_FRONT_BIT = 0x00000001,
+    VK_CULL_MODE_BACK_BIT = 0x00000002,
+    VK_CULL_MODE_FRONT_AND_BACK = 0x00000003,
+    VK_CULL_MODE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkCullModeFlagBits;
+typedef VkFlags VkCullModeFlags;
+typedef VkFlags VkPipelineVertexInputStateCreateFlags;
+typedef VkFlags VkPipelineInputAssemblyStateCreateFlags;
+typedef VkFlags VkPipelineTessellationStateCreateFlags;
+typedef VkFlags VkPipelineViewportStateCreateFlags;
+typedef VkFlags VkPipelineRasterizationStateCreateFlags;
+typedef VkFlags VkPipelineMultisampleStateCreateFlags;
+typedef VkFlags VkPipelineDepthStencilStateCreateFlags;
+typedef VkFlags VkPipelineColorBlendStateCreateFlags;
+typedef VkFlags VkPipelineDynamicStateCreateFlags;
+typedef VkFlags VkPipelineLayoutCreateFlags;
+typedef VkFlags VkShaderStageFlags;
+
+typedef enum VkSamplerCreateFlagBits {
+    VK_SAMPLER_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkSamplerCreateFlagBits;
+typedef VkFlags VkSamplerCreateFlags;
+
+typedef enum VkDescriptorPoolCreateFlagBits {
+    VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT = 0x00000001,
+    VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT = 0x00000002,
+    VK_DESCRIPTOR_POOL_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkDescriptorPoolCreateFlagBits;
+typedef VkFlags VkDescriptorPoolCreateFlags;
+typedef VkFlags VkDescriptorPoolResetFlags;
+
+typedef enum VkDescriptorSetLayoutCreateFlagBits {
+    VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT = 0x00000002,
+    VK_DESCRIPTOR_SET_LAYOUT_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkDescriptorSetLayoutCreateFlagBits;
+typedef VkFlags VkDescriptorSetLayoutCreateFlags;
+
+typedef enum VkAttachmentDescriptionFlagBits {
+    VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT = 0x00000001,
+    VK_ATTACHMENT_DESCRIPTION_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkAttachmentDescriptionFlagBits;
+typedef VkFlags VkAttachmentDescriptionFlags;
+
+typedef enum VkDependencyFlagBits {
+    VK_DEPENDENCY_BY_REGION_BIT = 0x00000001,
+    VK_DEPENDENCY_DEVICE_GROUP_BIT = 0x00000004,
+    VK_DEPENDENCY_VIEW_LOCAL_BIT = 0x00000002,
+    VK_DEPENDENCY_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkDependencyFlagBits;
+typedef VkFlags VkDependencyFlags;
+
+typedef enum VkFramebufferCreateFlagBits {
+    VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT = 0x00000001,
+    VK_FRAMEBUFFER_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkFramebufferCreateFlagBits;
+typedef VkFlags VkFramebufferCreateFlags;
+
+typedef enum VkRenderPassCreateFlagBits {
+    VK_RENDER_PASS_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkRenderPassCreateFlagBits;
+typedef VkFlags VkRenderPassCreateFlags;
+
+typedef enum VkSubpassDescriptionFlagBits {
+    VK_SUBPASS_DESCRIPTION_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkSubpassDescriptionFlagBits;
+typedef VkFlags VkSubpassDescriptionFlags;
+
+typedef enum VkCommandPoolCreateFlagBits {
+    VK_COMMAND_POOL_CREATE_TRANSIENT_BIT = 0x00000001,
+    VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT = 0x00000002,
+    VK_COMMAND_POOL_CREATE_PROTECTED_BIT = 0x00000004,
+    VK_COMMAND_POOL_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkCommandPoolCreateFlagBits;
+typedef VkFlags VkCommandPoolCreateFlags;
+
+typedef enum VkCommandPoolResetFlagBits {
+    VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT = 0x00000001,
+    VK_COMMAND_POOL_RESET_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkCommandPoolResetFlagBits;
+typedef VkFlags VkCommandPoolResetFlags;
+
+typedef enum VkCommandBufferUsageFlagBits {
+    VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT = 0x00000001,
+    VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT = 0x00000002,
+    VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT = 0x00000004,
+    VK_COMMAND_BUFFER_USAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkCommandBufferUsageFlagBits;
+typedef VkFlags VkCommandBufferUsageFlags;
+
+typedef enum VkQueryControlFlagBits {
+    VK_QUERY_CONTROL_PRECISE_BIT = 0x00000001,
+    VK_QUERY_CONTROL_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkQueryControlFlagBits;
+typedef VkFlags VkQueryControlFlags;
+
+typedef enum VkCommandBufferResetFlagBits {
+    VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT = 0x00000001,
+    VK_COMMAND_BUFFER_RESET_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkCommandBufferResetFlagBits;
+typedef VkFlags VkCommandBufferResetFlags;
+
+typedef enum VkStencilFaceFlagBits {
+    VK_STENCIL_FACE_FRONT_BIT = 0x00000001,
+    VK_STENCIL_FACE_BACK_BIT = 0x00000002,
+    VK_STENCIL_FACE_FRONT_AND_BACK = 0x00000003,
+    VK_STENCIL_FRONT_AND_BACK = VK_STENCIL_FACE_FRONT_AND_BACK,
+    VK_STENCIL_FACE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkStencilFaceFlagBits;
+typedef VkFlags VkStencilFaceFlags;
+typedef struct VkExtent2D {
+    deUint32    width;
+    deUint32    height;
+} VkExtent2D;
+
+typedef struct VkExtent3D {
+    deUint32    width;
+    deUint32    height;
+    deUint32    depth;
+} VkExtent3D;
+
+typedef struct VkOffset2D {
+    deInt32    x;
+    deInt32    y;
+} VkOffset2D;
+
+typedef struct VkOffset3D {
+    deInt32    x;
+    deInt32    y;
+    deInt32    z;
+} VkOffset3D;
+
+typedef struct VkRect2D {
+    VkOffset2D    offset;
+    VkExtent2D    extent;
+} VkRect2D;
+
+typedef struct VkBaseInStructure {
+    VkStructureType                    sType;
+    const struct VkBaseInStructure*    pNext;
+} VkBaseInStructure;
+
+typedef struct VkBaseOutStructure {
+    VkStructureType               sType;
+    struct VkBaseOutStructure*    pNext;
+} VkBaseOutStructure;
+
+typedef struct VkBufferMemoryBarrier {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkAccessFlags      srcAccessMask;
+    VkAccessFlags      dstAccessMask;
+    deUint32           srcQueueFamilyIndex;
+    deUint32           dstQueueFamilyIndex;
+    VkBuffer           buffer;
+    VkDeviceSize       offset;
+    VkDeviceSize       size;
+} VkBufferMemoryBarrier;
+
+typedef struct VkDispatchIndirectCommand {
+    deUint32    x;
+    deUint32    y;
+    deUint32    z;
+} VkDispatchIndirectCommand;
+
+typedef struct VkDrawIndexedIndirectCommand {
+    deUint32    indexCount;
+    deUint32    instanceCount;
+    deUint32    firstIndex;
+    deInt32     vertexOffset;
+    deUint32    firstInstance;
+} VkDrawIndexedIndirectCommand;
+
+typedef struct VkDrawIndirectCommand {
+    deUint32    vertexCount;
+    deUint32    instanceCount;
+    deUint32    firstVertex;
+    deUint32    firstInstance;
+} VkDrawIndirectCommand;
+
+typedef struct VkImageSubresourceRange {
+    VkImageAspectFlags    aspectMask;
+    deUint32              baseMipLevel;
+    deUint32              levelCount;
+    deUint32              baseArrayLayer;
+    deUint32              layerCount;
+} VkImageSubresourceRange;
+
+typedef struct VkImageMemoryBarrier {
+    VkStructureType            sType;
+    const void*                pNext;
+    VkAccessFlags              srcAccessMask;
+    VkAccessFlags              dstAccessMask;
+    VkImageLayout              oldLayout;
+    VkImageLayout              newLayout;
+    deUint32                   srcQueueFamilyIndex;
+    deUint32                   dstQueueFamilyIndex;
+    VkImage                    image;
+    VkImageSubresourceRange    subresourceRange;
+} VkImageMemoryBarrier;
+
+typedef struct VkMemoryBarrier {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkAccessFlags      srcAccessMask;
+    VkAccessFlags      dstAccessMask;
+} VkMemoryBarrier;
+
+typedef void* (VKAPI_PTR *PFN_vkAllocationFunction)(
+    void*                                       pUserData,
+    deUintptr                                      size,
+    deUintptr                                      alignment,
+    VkSystemAllocationScope                     allocationScope);
+
+typedef void (VKAPI_PTR *PFN_vkFreeFunction)(
+    void*                                       pUserData,
+    void*                                       pMemory);
+
+typedef void (VKAPI_PTR *PFN_vkInternalAllocationNotification)(
+    void*                                       pUserData,
+    deUintptr                                      size,
+    VkInternalAllocationType                    allocationType,
+    VkSystemAllocationScope                     allocationScope);
+
+typedef void (VKAPI_PTR *PFN_vkInternalFreeNotification)(
+    void*                                       pUserData,
+    deUintptr                                      size,
+    VkInternalAllocationType                    allocationType,
+    VkSystemAllocationScope                     allocationScope);
+
+typedef void* (VKAPI_PTR *PFN_vkReallocationFunction)(
+    void*                                       pUserData,
+    void*                                       pOriginal,
+    deUintptr                                      size,
+    deUintptr                                      alignment,
+    VkSystemAllocationScope                     allocationScope);
+
+typedef void (VKAPI_PTR *PFN_vkVoidFunction)(void);
+typedef struct VkAllocationCallbacks {
+    void*                                   pUserData;
+    PFN_vkAllocationFunction                pfnAllocation;
+    PFN_vkReallocationFunction              pfnReallocation;
+    PFN_vkFreeFunction                      pfnFree;
+    PFN_vkInternalAllocationNotification    pfnInternalAllocation;
+    PFN_vkInternalFreeNotification          pfnInternalFree;
+} VkAllocationCallbacks;
+
+typedef struct VkApplicationInfo {
+    VkStructureType    sType;
+    const void*        pNext;
+    const char*        pApplicationName;
+    deUint32           applicationVersion;
+    const char*        pEngineName;
+    deUint32           engineVersion;
+    deUint32           apiVersion;
+} VkApplicationInfo;
+
+typedef struct VkFormatProperties {
+    VkFormatFeatureFlags    linearTilingFeatures;
+    VkFormatFeatureFlags    optimalTilingFeatures;
+    VkFormatFeatureFlags    bufferFeatures;
+} VkFormatProperties;
+
+typedef struct VkImageFormatProperties {
+    VkExtent3D            maxExtent;
+    deUint32              maxMipLevels;
+    deUint32              maxArrayLayers;
+    VkSampleCountFlags    sampleCounts;
+    VkDeviceSize          maxResourceSize;
+} VkImageFormatProperties;
+
+typedef struct VkInstanceCreateInfo {
+    VkStructureType             sType;
+    const void*                 pNext;
+    VkInstanceCreateFlags       flags;
+    const VkApplicationInfo*    pApplicationInfo;
+    deUint32                    enabledLayerCount;
+    const char* const*          ppEnabledLayerNames;
+    deUint32                    enabledExtensionCount;
+    const char* const*          ppEnabledExtensionNames;
+} VkInstanceCreateInfo;
+
+typedef struct VkMemoryHeap {
+    VkDeviceSize         size;
+    VkMemoryHeapFlags    flags;
+} VkMemoryHeap;
+
+typedef struct VkMemoryType {
+    VkMemoryPropertyFlags    propertyFlags;
+    deUint32                 heapIndex;
+} VkMemoryType;
+
+typedef struct VkPhysicalDeviceFeatures {
+    VkBool32    robustBufferAccess;
+    VkBool32    fullDrawIndexUint32;
+    VkBool32    imageCubeArray;
+    VkBool32    independentBlend;
+    VkBool32    geometryShader;
+    VkBool32    tessellationShader;
+    VkBool32    sampleRateShading;
+    VkBool32    dualSrcBlend;
+    VkBool32    logicOp;
+    VkBool32    multiDrawIndirect;
+    VkBool32    drawIndirectFirstInstance;
+    VkBool32    depthClamp;
+    VkBool32    depthBiasClamp;
+    VkBool32    fillModeNonSolid;
+    VkBool32    depthBounds;
+    VkBool32    wideLines;
+    VkBool32    largePoints;
+    VkBool32    alphaToOne;
+    VkBool32    multiViewport;
+    VkBool32    samplerAnisotropy;
+    VkBool32    textureCompressionETC2;
+    VkBool32    textureCompressionASTC_LDR;
+    VkBool32    textureCompressionBC;
+    VkBool32    occlusionQueryPrecise;
+    VkBool32    pipelineStatisticsQuery;
+    VkBool32    vertexPipelineStoresAndAtomics;
+    VkBool32    fragmentStoresAndAtomics;
+    VkBool32    shaderTessellationAndGeometryPointSize;
+    VkBool32    shaderImageGatherExtended;
+    VkBool32    shaderStorageImageExtendedFormats;
+    VkBool32    shaderStorageImageMultisample;
+    VkBool32    shaderStorageImageReadWithoutFormat;
+    VkBool32    shaderStorageImageWriteWithoutFormat;
+    VkBool32    shaderUniformBufferArrayDynamicIndexing;
+    VkBool32    shaderSampledImageArrayDynamicIndexing;
+    VkBool32    shaderStorageBufferArrayDynamicIndexing;
+    VkBool32    shaderStorageImageArrayDynamicIndexing;
+    VkBool32    shaderClipDistance;
+    VkBool32    shaderCullDistance;
+    VkBool32    shaderFloat64;
+    VkBool32    shaderInt64;
+    VkBool32    shaderInt16;
+    VkBool32    shaderResourceResidency;
+    VkBool32    shaderResourceMinLod;
+    VkBool32    sparseBinding;
+    VkBool32    sparseResidencyBuffer;
+    VkBool32    sparseResidencyImage2D;
+    VkBool32    sparseResidencyImage3D;
+    VkBool32    sparseResidency2Samples;
+    VkBool32    sparseResidency4Samples;
+    VkBool32    sparseResidency8Samples;
+    VkBool32    sparseResidency16Samples;
+    VkBool32    sparseResidencyAliased;
+    VkBool32    variableMultisampleRate;
+    VkBool32    inheritedQueries;
+} VkPhysicalDeviceFeatures;
+
+typedef struct VkPhysicalDeviceLimits {
+    deUint32              maxImageDimension1D;
+    deUint32              maxImageDimension2D;
+    deUint32              maxImageDimension3D;
+    deUint32              maxImageDimensionCube;
+    deUint32              maxImageArrayLayers;
+    deUint32              maxTexelBufferElements;
+    deUint32              maxUniformBufferRange;
+    deUint32              maxStorageBufferRange;
+    deUint32              maxPushConstantsSize;
+    deUint32              maxMemoryAllocationCount;
+    deUint32              maxSamplerAllocationCount;
+    VkDeviceSize          bufferImageGranularity;
+    VkDeviceSize          sparseAddressSpaceSize;
+    deUint32              maxBoundDescriptorSets;
+    deUint32              maxPerStageDescriptorSamplers;
+    deUint32              maxPerStageDescriptorUniformBuffers;
+    deUint32              maxPerStageDescriptorStorageBuffers;
+    deUint32              maxPerStageDescriptorSampledImages;
+    deUint32              maxPerStageDescriptorStorageImages;
+    deUint32              maxPerStageDescriptorInputAttachments;
+    deUint32              maxPerStageResources;
+    deUint32              maxDescriptorSetSamplers;
+    deUint32              maxDescriptorSetUniformBuffers;
+    deUint32              maxDescriptorSetUniformBuffersDynamic;
+    deUint32              maxDescriptorSetStorageBuffers;
+    deUint32              maxDescriptorSetStorageBuffersDynamic;
+    deUint32              maxDescriptorSetSampledImages;
+    deUint32              maxDescriptorSetStorageImages;
+    deUint32              maxDescriptorSetInputAttachments;
+    deUint32              maxVertexInputAttributes;
+    deUint32              maxVertexInputBindings;
+    deUint32              maxVertexInputAttributeOffset;
+    deUint32              maxVertexInputBindingStride;
+    deUint32              maxVertexOutputComponents;
+    deUint32              maxTessellationGenerationLevel;
+    deUint32              maxTessellationPatchSize;
+    deUint32              maxTessellationControlPerVertexInputComponents;
+    deUint32              maxTessellationControlPerVertexOutputComponents;
+    deUint32              maxTessellationControlPerPatchOutputComponents;
+    deUint32              maxTessellationControlTotalOutputComponents;
+    deUint32              maxTessellationEvaluationInputComponents;
+    deUint32              maxTessellationEvaluationOutputComponents;
+    deUint32              maxGeometryShaderInvocations;
+    deUint32              maxGeometryInputComponents;
+    deUint32              maxGeometryOutputComponents;
+    deUint32              maxGeometryOutputVertices;
+    deUint32              maxGeometryTotalOutputComponents;
+    deUint32              maxFragmentInputComponents;
+    deUint32              maxFragmentOutputAttachments;
+    deUint32              maxFragmentDualSrcAttachments;
+    deUint32              maxFragmentCombinedOutputResources;
+    deUint32              maxComputeSharedMemorySize;
+    deUint32              maxComputeWorkGroupCount[3];
+    deUint32              maxComputeWorkGroupInvocations;
+    deUint32              maxComputeWorkGroupSize[3];
+    deUint32              subPixelPrecisionBits;
+    deUint32              subTexelPrecisionBits;
+    deUint32              mipmapPrecisionBits;
+    deUint32              maxDrawIndexedIndexValue;
+    deUint32              maxDrawIndirectCount;
+    float                 maxSamplerLodBias;
+    float                 maxSamplerAnisotropy;
+    deUint32              maxViewports;
+    deUint32              maxViewportDimensions[2];
+    float                 viewportBoundsRange[2];
+    deUint32              viewportSubPixelBits;
+    deUintptr                minMemoryMapAlignment;
+    VkDeviceSize          minTexelBufferOffsetAlignment;
+    VkDeviceSize          minUniformBufferOffsetAlignment;
+    VkDeviceSize          minStorageBufferOffsetAlignment;
+    deInt32               minTexelOffset;
+    deUint32              maxTexelOffset;
+    deInt32               minTexelGatherOffset;
+    deUint32              maxTexelGatherOffset;
+    float                 minInterpolationOffset;
+    float                 maxInterpolationOffset;
+    deUint32              subPixelInterpolationOffsetBits;
+    deUint32              maxFramebufferWidth;
+    deUint32              maxFramebufferHeight;
+    deUint32              maxFramebufferLayers;
+    VkSampleCountFlags    framebufferColorSampleCounts;
+    VkSampleCountFlags    framebufferDepthSampleCounts;
+    VkSampleCountFlags    framebufferStencilSampleCounts;
+    VkSampleCountFlags    framebufferNoAttachmentsSampleCounts;
+    deUint32              maxColorAttachments;
+    VkSampleCountFlags    sampledImageColorSampleCounts;
+    VkSampleCountFlags    sampledImageIntegerSampleCounts;
+    VkSampleCountFlags    sampledImageDepthSampleCounts;
+    VkSampleCountFlags    sampledImageStencilSampleCounts;
+    VkSampleCountFlags    storageImageSampleCounts;
+    deUint32              maxSampleMaskWords;
+    VkBool32              timestampComputeAndGraphics;
+    float                 timestampPeriod;
+    deUint32              maxClipDistances;
+    deUint32              maxCullDistances;
+    deUint32              maxCombinedClipAndCullDistances;
+    deUint32              discreteQueuePriorities;
+    float                 pointSizeRange[2];
+    float                 lineWidthRange[2];
+    float                 pointSizeGranularity;
+    float                 lineWidthGranularity;
+    VkBool32              strictLines;
+    VkBool32              standardSampleLocations;
+    VkDeviceSize          optimalBufferCopyOffsetAlignment;
+    VkDeviceSize          optimalBufferCopyRowPitchAlignment;
+    VkDeviceSize          nonCoherentAtomSize;
+} VkPhysicalDeviceLimits;
+
+typedef struct VkPhysicalDeviceMemoryProperties {
+    deUint32        memoryTypeCount;
+    VkMemoryType    memoryTypes[VK_MAX_MEMORY_TYPES];
+    deUint32        memoryHeapCount;
+    VkMemoryHeap    memoryHeaps[VK_MAX_MEMORY_HEAPS];
+} VkPhysicalDeviceMemoryProperties;
+
+typedef struct VkPhysicalDeviceSparseProperties {
+    VkBool32    residencyStandard2DBlockShape;
+    VkBool32    residencyStandard2DMultisampleBlockShape;
+    VkBool32    residencyStandard3DBlockShape;
+    VkBool32    residencyAlignedMipSize;
+    VkBool32    residencyNonResidentStrict;
+} VkPhysicalDeviceSparseProperties;
+
+typedef struct VkPhysicalDeviceProperties {
+    deUint32                            apiVersion;
+    deUint32                            driverVersion;
+    deUint32                            vendorID;
+    deUint32                            deviceID;
+    VkPhysicalDeviceType                deviceType;
+    char                                deviceName[VK_MAX_PHYSICAL_DEVICE_NAME_SIZE];
+    deUint8                             pipelineCacheUUID[VK_UUID_SIZE];
+    VkPhysicalDeviceLimits              limits;
+    VkPhysicalDeviceSparseProperties    sparseProperties;
+} VkPhysicalDeviceProperties;
+
+typedef struct VkQueueFamilyProperties {
+    VkQueueFlags    queueFlags;
+    deUint32        queueCount;
+    deUint32        timestampValidBits;
+    VkExtent3D      minImageTransferGranularity;
+} VkQueueFamilyProperties;
+
+typedef struct VkDeviceQueueCreateInfo {
+    VkStructureType             sType;
+    const void*                 pNext;
+    VkDeviceQueueCreateFlags    flags;
+    deUint32                    queueFamilyIndex;
+    deUint32                    queueCount;
+    const float*                pQueuePriorities;
+} VkDeviceQueueCreateInfo;
+
+typedef struct VkDeviceCreateInfo {
+    VkStructureType                    sType;
+    const void*                        pNext;
+    VkDeviceCreateFlags                flags;
+    deUint32                           queueCreateInfoCount;
+    const VkDeviceQueueCreateInfo*     pQueueCreateInfos;
+    deUint32                           enabledLayerCount;
+    const char* const*                 ppEnabledLayerNames;
+    deUint32                           enabledExtensionCount;
+    const char* const*                 ppEnabledExtensionNames;
+    const VkPhysicalDeviceFeatures*    pEnabledFeatures;
+} VkDeviceCreateInfo;
+
+typedef struct VkExtensionProperties {
+    char        extensionName[VK_MAX_EXTENSION_NAME_SIZE];
+    deUint32    specVersion;
+} VkExtensionProperties;
+
+typedef struct VkLayerProperties {
+    char        layerName[VK_MAX_EXTENSION_NAME_SIZE];
+    deUint32    specVersion;
+    deUint32    implementationVersion;
+    char        description[VK_MAX_DESCRIPTION_SIZE];
+} VkLayerProperties;
+
+typedef struct VkSubmitInfo {
+    VkStructureType                sType;
+    const void*                    pNext;
+    deUint32                       waitSemaphoreCount;
+    const VkSemaphore*             pWaitSemaphores;
+    const VkPipelineStageFlags*    pWaitDstStageMask;
+    deUint32                       commandBufferCount;
+    const VkCommandBuffer*         pCommandBuffers;
+    deUint32                       signalSemaphoreCount;
+    const VkSemaphore*             pSignalSemaphores;
+} VkSubmitInfo;
+
+typedef struct VkMappedMemoryRange {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkDeviceMemory     memory;
+    VkDeviceSize       offset;
+    VkDeviceSize       size;
+} VkMappedMemoryRange;
+
+typedef struct VkMemoryAllocateInfo {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkDeviceSize       allocationSize;
+    deUint32           memoryTypeIndex;
+} VkMemoryAllocateInfo;
+
+typedef struct VkMemoryRequirements {
+    VkDeviceSize    size;
+    VkDeviceSize    alignment;
+    deUint32        memoryTypeBits;
+} VkMemoryRequirements;
+
+typedef struct VkSparseMemoryBind {
+    VkDeviceSize               resourceOffset;
+    VkDeviceSize               size;
+    VkDeviceMemory             memory;
+    VkDeviceSize               memoryOffset;
+    VkSparseMemoryBindFlags    flags;
+} VkSparseMemoryBind;
+
+typedef struct VkSparseBufferMemoryBindInfo {
+    VkBuffer                     buffer;
+    deUint32                     bindCount;
+    const VkSparseMemoryBind*    pBinds;
+} VkSparseBufferMemoryBindInfo;
+
+typedef struct VkSparseImageOpaqueMemoryBindInfo {
+    VkImage                      image;
+    deUint32                     bindCount;
+    const VkSparseMemoryBind*    pBinds;
+} VkSparseImageOpaqueMemoryBindInfo;
+
+typedef struct VkImageSubresource {
+    VkImageAspectFlags    aspectMask;
+    deUint32              mipLevel;
+    deUint32              arrayLayer;
+} VkImageSubresource;
+
+typedef struct VkSparseImageMemoryBind {
+    VkImageSubresource         subresource;
+    VkOffset3D                 offset;
+    VkExtent3D                 extent;
+    VkDeviceMemory             memory;
+    VkDeviceSize               memoryOffset;
+    VkSparseMemoryBindFlags    flags;
+} VkSparseImageMemoryBind;
+
+typedef struct VkSparseImageMemoryBindInfo {
+    VkImage                           image;
+    deUint32                          bindCount;
+    const VkSparseImageMemoryBind*    pBinds;
+} VkSparseImageMemoryBindInfo;
+
+typedef struct VkBindSparseInfo {
+    VkStructureType                             sType;
+    const void*                                 pNext;
+    deUint32                                    waitSemaphoreCount;
+    const VkSemaphore*                          pWaitSemaphores;
+    deUint32                                    bufferBindCount;
+    const VkSparseBufferMemoryBindInfo*         pBufferBinds;
+    deUint32                                    imageOpaqueBindCount;
+    const VkSparseImageOpaqueMemoryBindInfo*    pImageOpaqueBinds;
+    deUint32                                    imageBindCount;
+    const VkSparseImageMemoryBindInfo*          pImageBinds;
+    deUint32                                    signalSemaphoreCount;
+    const VkSemaphore*                          pSignalSemaphores;
+} VkBindSparseInfo;
+
+typedef struct VkSparseImageFormatProperties {
+    VkImageAspectFlags          aspectMask;
+    VkExtent3D                  imageGranularity;
+    VkSparseImageFormatFlags    flags;
+} VkSparseImageFormatProperties;
+
+typedef struct VkSparseImageMemoryRequirements {
+    VkSparseImageFormatProperties    formatProperties;
+    deUint32                         imageMipTailFirstLod;
+    VkDeviceSize                     imageMipTailSize;
+    VkDeviceSize                     imageMipTailOffset;
+    VkDeviceSize                     imageMipTailStride;
+} VkSparseImageMemoryRequirements;
+
+typedef struct VkFenceCreateInfo {
+    VkStructureType       sType;
+    const void*           pNext;
+    VkFenceCreateFlags    flags;
+} VkFenceCreateInfo;
+
+typedef struct VkSemaphoreCreateInfo {
+    VkStructureType           sType;
+    const void*               pNext;
+    VkSemaphoreCreateFlags    flags;
+} VkSemaphoreCreateInfo;
+
+typedef struct VkEventCreateInfo {
+    VkStructureType       sType;
+    const void*           pNext;
+    VkEventCreateFlags    flags;
+} VkEventCreateInfo;
+
+typedef struct VkQueryPoolCreateInfo {
+    VkStructureType                  sType;
+    const void*                      pNext;
+    VkQueryPoolCreateFlags           flags;
+    VkQueryType                      queryType;
+    deUint32                         queryCount;
+    VkQueryPipelineStatisticFlags    pipelineStatistics;
+} VkQueryPoolCreateInfo;
+
+typedef struct VkBufferCreateInfo {
+    VkStructureType        sType;
+    const void*            pNext;
+    VkBufferCreateFlags    flags;
+    VkDeviceSize           size;
+    VkBufferUsageFlags     usage;
+    VkSharingMode          sharingMode;
+    deUint32               queueFamilyIndexCount;
+    const deUint32*        pQueueFamilyIndices;
+} VkBufferCreateInfo;
+
+typedef struct VkBufferViewCreateInfo {
+    VkStructureType            sType;
+    const void*                pNext;
+    VkBufferViewCreateFlags    flags;
+    VkBuffer                   buffer;
+    VkFormat                   format;
+    VkDeviceSize               offset;
+    VkDeviceSize               range;
+} VkBufferViewCreateInfo;
+
+typedef struct VkImageCreateInfo {
+    VkStructureType          sType;
+    const void*              pNext;
+    VkImageCreateFlags       flags;
+    VkImageType              imageType;
+    VkFormat                 format;
+    VkExtent3D               extent;
+    deUint32                 mipLevels;
+    deUint32                 arrayLayers;
+    VkSampleCountFlagBits    samples;
+    VkImageTiling            tiling;
+    VkImageUsageFlags        usage;
+    VkSharingMode            sharingMode;
+    deUint32                 queueFamilyIndexCount;
+    const deUint32*          pQueueFamilyIndices;
+    VkImageLayout            initialLayout;
+} VkImageCreateInfo;
+
+typedef struct VkSubresourceLayout {
+    VkDeviceSize    offset;
+    VkDeviceSize    size;
+    VkDeviceSize    rowPitch;
+    VkDeviceSize    arrayPitch;
+    VkDeviceSize    depthPitch;
+} VkSubresourceLayout;
+
+typedef struct VkComponentMapping {
+    VkComponentSwizzle    r;
+    VkComponentSwizzle    g;
+    VkComponentSwizzle    b;
+    VkComponentSwizzle    a;
+} VkComponentMapping;
+
+typedef struct VkImageViewCreateInfo {
+    VkStructureType            sType;
+    const void*                pNext;
+    VkImageViewCreateFlags     flags;
+    VkImage                    image;
+    VkImageViewType            viewType;
+    VkFormat                   format;
+    VkComponentMapping         components;
+    VkImageSubresourceRange    subresourceRange;
+} VkImageViewCreateInfo;
+
+typedef struct VkPipelineCacheCreateInfo {
+    VkStructureType               sType;
+    const void*                   pNext;
+    VkPipelineCacheCreateFlags    flags;
+    deUintptr                        initialDataSize;
+    const void*                   pInitialData;
+} VkPipelineCacheCreateInfo;
+
+typedef struct VkSpecializationMapEntry {
+    deUint32    constantID;
+    deUint32    offset;
+    deUintptr      size;
+} VkSpecializationMapEntry;
+
+typedef struct VkSpecializationInfo {
+    deUint32                           mapEntryCount;
+    const VkSpecializationMapEntry*    pMapEntries;
+    deUintptr                             dataSize;
+    const void*                        pData;
+} VkSpecializationInfo;
+
+typedef struct VkPipelineShaderStageCreateInfo {
+    VkStructureType                     sType;
+    const void*                         pNext;
+    VkPipelineShaderStageCreateFlags    flags;
+    VkShaderStageFlagBits               stage;
+    VkShaderModule                      module;
+    const char*                         pName;
+    const VkSpecializationInfo*         pSpecializationInfo;
+} VkPipelineShaderStageCreateInfo;
+
+typedef struct VkComputePipelineCreateInfo {
+    VkStructureType                    sType;
+    const void*                        pNext;
+    VkPipelineCreateFlags              flags;
+    VkPipelineShaderStageCreateInfo    stage;
+    VkPipelineLayout                   layout;
+    VkPipeline                         basePipelineHandle;
+    deInt32                            basePipelineIndex;
+} VkComputePipelineCreateInfo;
+
+typedef struct VkVertexInputBindingDescription {
+    deUint32             binding;
+    deUint32             stride;
+    VkVertexInputRate    inputRate;
+} VkVertexInputBindingDescription;
+
+typedef struct VkVertexInputAttributeDescription {
+    deUint32    location;
+    deUint32    binding;
+    VkFormat    format;
+    deUint32    offset;
+} VkVertexInputAttributeDescription;
+
+typedef struct VkPipelineVertexInputStateCreateInfo {
+    VkStructureType                             sType;
+    const void*                                 pNext;
+    VkPipelineVertexInputStateCreateFlags       flags;
+    deUint32                                    vertexBindingDescriptionCount;
+    const VkVertexInputBindingDescription*      pVertexBindingDescriptions;
+    deUint32                                    vertexAttributeDescriptionCount;
+    const VkVertexInputAttributeDescription*    pVertexAttributeDescriptions;
+} VkPipelineVertexInputStateCreateInfo;
+
+typedef struct VkPipelineInputAssemblyStateCreateInfo {
+    VkStructureType                            sType;
+    const void*                                pNext;
+    VkPipelineInputAssemblyStateCreateFlags    flags;
+    VkPrimitiveTopology                        topology;
+    VkBool32                                   primitiveRestartEnable;
+} VkPipelineInputAssemblyStateCreateInfo;
+
+typedef struct VkPipelineTessellationStateCreateInfo {
+    VkStructureType                           sType;
+    const void*                               pNext;
+    VkPipelineTessellationStateCreateFlags    flags;
+    deUint32                                  patchControlPoints;
+} VkPipelineTessellationStateCreateInfo;
+
+typedef struct VkViewport {
+    float    x;
+    float    y;
+    float    width;
+    float    height;
+    float    minDepth;
+    float    maxDepth;
+} VkViewport;
+
+typedef struct VkPipelineViewportStateCreateInfo {
+    VkStructureType                       sType;
+    const void*                           pNext;
+    VkPipelineViewportStateCreateFlags    flags;
+    deUint32                              viewportCount;
+    const VkViewport*                     pViewports;
+    deUint32                              scissorCount;
+    const VkRect2D*                       pScissors;
+} VkPipelineViewportStateCreateInfo;
+
+typedef struct VkPipelineRasterizationStateCreateInfo {
+    VkStructureType                            sType;
+    const void*                                pNext;
+    VkPipelineRasterizationStateCreateFlags    flags;
+    VkBool32                                   depthClampEnable;
+    VkBool32                                   rasterizerDiscardEnable;
+    VkPolygonMode                              polygonMode;
+    VkCullModeFlags                            cullMode;
+    VkFrontFace                                frontFace;
+    VkBool32                                   depthBiasEnable;
+    float                                      depthBiasConstantFactor;
+    float                                      depthBiasClamp;
+    float                                      depthBiasSlopeFactor;
+    float                                      lineWidth;
+} VkPipelineRasterizationStateCreateInfo;
+
+typedef struct VkPipelineMultisampleStateCreateInfo {
+    VkStructureType                          sType;
+    const void*                              pNext;
+    VkPipelineMultisampleStateCreateFlags    flags;
+    VkSampleCountFlagBits                    rasterizationSamples;
+    VkBool32                                 sampleShadingEnable;
+    float                                    minSampleShading;
+    const VkSampleMask*                      pSampleMask;
+    VkBool32                                 alphaToCoverageEnable;
+    VkBool32                                 alphaToOneEnable;
+} VkPipelineMultisampleStateCreateInfo;
+
+typedef struct VkStencilOpState {
+    VkStencilOp    failOp;
+    VkStencilOp    passOp;
+    VkStencilOp    depthFailOp;
+    VkCompareOp    compareOp;
+    deUint32       compareMask;
+    deUint32       writeMask;
+    deUint32       reference;
+} VkStencilOpState;
+
+typedef struct VkPipelineDepthStencilStateCreateInfo {
+    VkStructureType                           sType;
+    const void*                               pNext;
+    VkPipelineDepthStencilStateCreateFlags    flags;
+    VkBool32                                  depthTestEnable;
+    VkBool32                                  depthWriteEnable;
+    VkCompareOp                               depthCompareOp;
+    VkBool32                                  depthBoundsTestEnable;
+    VkBool32                                  stencilTestEnable;
+    VkStencilOpState                          front;
+    VkStencilOpState                          back;
+    float                                     minDepthBounds;
+    float                                     maxDepthBounds;
+} VkPipelineDepthStencilStateCreateInfo;
+
+typedef struct VkPipelineColorBlendAttachmentState {
+    VkBool32                 blendEnable;
+    VkBlendFactor            srcColorBlendFactor;
+    VkBlendFactor            dstColorBlendFactor;
+    VkBlendOp                colorBlendOp;
+    VkBlendFactor            srcAlphaBlendFactor;
+    VkBlendFactor            dstAlphaBlendFactor;
+    VkBlendOp                alphaBlendOp;
+    VkColorComponentFlags    colorWriteMask;
+} VkPipelineColorBlendAttachmentState;
+
+typedef struct VkPipelineColorBlendStateCreateInfo {
+    VkStructureType                               sType;
+    const void*                                   pNext;
+    VkPipelineColorBlendStateCreateFlags          flags;
+    VkBool32                                      logicOpEnable;
+    VkLogicOp                                     logicOp;
+    deUint32                                      attachmentCount;
+    const VkPipelineColorBlendAttachmentState*    pAttachments;
+    float                                         blendConstants[4];
+} VkPipelineColorBlendStateCreateInfo;
+
+typedef struct VkPipelineDynamicStateCreateInfo {
+    VkStructureType                      sType;
+    const void*                          pNext;
+    VkPipelineDynamicStateCreateFlags    flags;
+    deUint32                             dynamicStateCount;
+    const VkDynamicState*                pDynamicStates;
+} VkPipelineDynamicStateCreateInfo;
+
+typedef struct VkGraphicsPipelineCreateInfo {
+    VkStructureType                                  sType;
+    const void*                                      pNext;
+    VkPipelineCreateFlags                            flags;
+    deUint32                                         stageCount;
+    const VkPipelineShaderStageCreateInfo*           pStages;
+    const VkPipelineVertexInputStateCreateInfo*      pVertexInputState;
+    const VkPipelineInputAssemblyStateCreateInfo*    pInputAssemblyState;
+    const VkPipelineTessellationStateCreateInfo*     pTessellationState;
+    const VkPipelineViewportStateCreateInfo*         pViewportState;
+    const VkPipelineRasterizationStateCreateInfo*    pRasterizationState;
+    const VkPipelineMultisampleStateCreateInfo*      pMultisampleState;
+    const VkPipelineDepthStencilStateCreateInfo*     pDepthStencilState;
+    const VkPipelineColorBlendStateCreateInfo*       pColorBlendState;
+    const VkPipelineDynamicStateCreateInfo*          pDynamicState;
+    VkPipelineLayout                                 layout;
+    VkRenderPass                                     renderPass;
+    deUint32                                         subpass;
+    VkPipeline                                       basePipelineHandle;
+    deInt32                                          basePipelineIndex;
+} VkGraphicsPipelineCreateInfo;
+
+typedef struct VkPushConstantRange {
+    VkShaderStageFlags    stageFlags;
+    deUint32              offset;
+    deUint32              size;
+} VkPushConstantRange;
+
+typedef struct VkPipelineLayoutCreateInfo {
+    VkStructureType                 sType;
+    const void*                     pNext;
+    VkPipelineLayoutCreateFlags     flags;
+    deUint32                        setLayoutCount;
+    const VkDescriptorSetLayout*    pSetLayouts;
+    deUint32                        pushConstantRangeCount;
+    const VkPushConstantRange*      pPushConstantRanges;
+} VkPipelineLayoutCreateInfo;
+
+typedef struct VkSamplerCreateInfo {
+    VkStructureType         sType;
+    const void*             pNext;
+    VkSamplerCreateFlags    flags;
+    VkFilter                magFilter;
+    VkFilter                minFilter;
+    VkSamplerMipmapMode     mipmapMode;
+    VkSamplerAddressMode    addressModeU;
+    VkSamplerAddressMode    addressModeV;
+    VkSamplerAddressMode    addressModeW;
+    float                   mipLodBias;
+    VkBool32                anisotropyEnable;
+    float                   maxAnisotropy;
+    VkBool32                compareEnable;
+    VkCompareOp             compareOp;
+    float                   minLod;
+    float                   maxLod;
+    VkBorderColor           borderColor;
+    VkBool32                unnormalizedCoordinates;
+} VkSamplerCreateInfo;
+
+typedef struct VkCopyDescriptorSet {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkDescriptorSet    srcSet;
+    deUint32           srcBinding;
+    deUint32           srcArrayElement;
+    VkDescriptorSet    dstSet;
+    deUint32           dstBinding;
+    deUint32           dstArrayElement;
+    deUint32           descriptorCount;
+} VkCopyDescriptorSet;
+
+typedef struct VkDescriptorBufferInfo {
+    VkBuffer        buffer;
+    VkDeviceSize    offset;
+    VkDeviceSize    range;
+} VkDescriptorBufferInfo;
+
+typedef struct VkDescriptorImageInfo {
+    VkSampler        sampler;
+    VkImageView      imageView;
+    VkImageLayout    imageLayout;
+} VkDescriptorImageInfo;
+
+typedef struct VkDescriptorPoolSize {
+    VkDescriptorType    type;
+    deUint32            descriptorCount;
+} VkDescriptorPoolSize;
+
+typedef struct VkDescriptorPoolCreateInfo {
+    VkStructureType                sType;
+    const void*                    pNext;
+    VkDescriptorPoolCreateFlags    flags;
+    deUint32                       maxSets;
+    deUint32                       poolSizeCount;
+    const VkDescriptorPoolSize*    pPoolSizes;
+} VkDescriptorPoolCreateInfo;
+
+typedef struct VkDescriptorSetAllocateInfo {
+    VkStructureType                 sType;
+    const void*                     pNext;
+    VkDescriptorPool                descriptorPool;
+    deUint32                        descriptorSetCount;
+    const VkDescriptorSetLayout*    pSetLayouts;
+} VkDescriptorSetAllocateInfo;
+
+typedef struct VkDescriptorSetLayoutBinding {
+    deUint32              binding;
+    VkDescriptorType      descriptorType;
+    deUint32              descriptorCount;
+    VkShaderStageFlags    stageFlags;
+    const VkSampler*      pImmutableSamplers;
+} VkDescriptorSetLayoutBinding;
+
+typedef struct VkDescriptorSetLayoutCreateInfo {
+    VkStructureType                        sType;
+    const void*                            pNext;
+    VkDescriptorSetLayoutCreateFlags       flags;
+    deUint32                               bindingCount;
+    const VkDescriptorSetLayoutBinding*    pBindings;
+} VkDescriptorSetLayoutCreateInfo;
+
+typedef struct VkWriteDescriptorSet {
+    VkStructureType                  sType;
+    const void*                      pNext;
+    VkDescriptorSet                  dstSet;
+    deUint32                         dstBinding;
+    deUint32                         dstArrayElement;
+    deUint32                         descriptorCount;
+    VkDescriptorType                 descriptorType;
+    const VkDescriptorImageInfo*     pImageInfo;
+    const VkDescriptorBufferInfo*    pBufferInfo;
+    const VkBufferView*              pTexelBufferView;
+} VkWriteDescriptorSet;
+
+typedef struct VkAttachmentDescription {
+    VkAttachmentDescriptionFlags    flags;
+    VkFormat                        format;
+    VkSampleCountFlagBits           samples;
+    VkAttachmentLoadOp              loadOp;
+    VkAttachmentStoreOp             storeOp;
+    VkAttachmentLoadOp              stencilLoadOp;
+    VkAttachmentStoreOp             stencilStoreOp;
+    VkImageLayout                   initialLayout;
+    VkImageLayout                   finalLayout;
+} VkAttachmentDescription;
+
+typedef struct VkAttachmentReference {
+    deUint32         attachment;
+    VkImageLayout    layout;
+} VkAttachmentReference;
+
+typedef struct VkFramebufferCreateInfo {
+    VkStructureType             sType;
+    const void*                 pNext;
+    VkFramebufferCreateFlags    flags;
+    VkRenderPass                renderPass;
+    deUint32                    attachmentCount;
+    const VkImageView*          pAttachments;
+    deUint32                    width;
+    deUint32                    height;
+    deUint32                    layers;
+} VkFramebufferCreateInfo;
+
+typedef struct VkSubpassDescription {
+    VkSubpassDescriptionFlags       flags;
+    VkPipelineBindPoint             pipelineBindPoint;
+    deUint32                        inputAttachmentCount;
+    const VkAttachmentReference*    pInputAttachments;
+    deUint32                        colorAttachmentCount;
+    const VkAttachmentReference*    pColorAttachments;
+    const VkAttachmentReference*    pResolveAttachments;
+    const VkAttachmentReference*    pDepthStencilAttachment;
+    deUint32                        preserveAttachmentCount;
+    const deUint32*                 pPreserveAttachments;
+} VkSubpassDescription;
+
+typedef struct VkSubpassDependency {
+    deUint32                srcSubpass;
+    deUint32                dstSubpass;
+    VkPipelineStageFlags    srcStageMask;
+    VkPipelineStageFlags    dstStageMask;
+    VkAccessFlags           srcAccessMask;
+    VkAccessFlags           dstAccessMask;
+    VkDependencyFlags       dependencyFlags;
+} VkSubpassDependency;
+
+typedef struct VkRenderPassCreateInfo {
+    VkStructureType                   sType;
+    const void*                       pNext;
+    VkRenderPassCreateFlags           flags;
+    deUint32                          attachmentCount;
+    const VkAttachmentDescription*    pAttachments;
+    deUint32                          subpassCount;
+    const VkSubpassDescription*       pSubpasses;
+    deUint32                          dependencyCount;
+    const VkSubpassDependency*        pDependencies;
+} VkRenderPassCreateInfo;
+
+typedef struct VkCommandPoolCreateInfo {
+    VkStructureType             sType;
+    const void*                 pNext;
+    VkCommandPoolCreateFlags    flags;
+    deUint32                    queueFamilyIndex;
+} VkCommandPoolCreateInfo;
+
+typedef struct VkCommandBufferAllocateInfo {
+    VkStructureType         sType;
+    const void*             pNext;
+    VkCommandPool           commandPool;
+    VkCommandBufferLevel    level;
+    deUint32                commandBufferCount;
+} VkCommandBufferAllocateInfo;
+
+typedef struct VkCommandBufferInheritanceInfo {
+    VkStructureType                  sType;
+    const void*                      pNext;
+    VkRenderPass                     renderPass;
+    deUint32                         subpass;
+    VkFramebuffer                    framebuffer;
+    VkBool32                         occlusionQueryEnable;
+    VkQueryControlFlags              queryFlags;
+    VkQueryPipelineStatisticFlags    pipelineStatistics;
+} VkCommandBufferInheritanceInfo;
+
+typedef struct VkCommandBufferBeginInfo {
+    VkStructureType                          sType;
+    const void*                              pNext;
+    VkCommandBufferUsageFlags                flags;
+    const VkCommandBufferInheritanceInfo*    pInheritanceInfo;
+} VkCommandBufferBeginInfo;
+
+typedef struct VkBufferCopy {
+    VkDeviceSize    srcOffset;
+    VkDeviceSize    dstOffset;
+    VkDeviceSize    size;
+} VkBufferCopy;
+
+typedef struct VkImageSubresourceLayers {
+    VkImageAspectFlags    aspectMask;
+    deUint32              mipLevel;
+    deUint32              baseArrayLayer;
+    deUint32              layerCount;
+} VkImageSubresourceLayers;
+
+typedef struct VkBufferImageCopy {
+    VkDeviceSize                bufferOffset;
+    deUint32                    bufferRowLength;
+    deUint32                    bufferImageHeight;
+    VkImageSubresourceLayers    imageSubresource;
+    VkOffset3D                  imageOffset;
+    VkExtent3D                  imageExtent;
+} VkBufferImageCopy;
+
+typedef union VkClearColorValue {
+    float       float32[4];
+    deInt32     int32[4];
+    deUint32    uint32[4];
+} VkClearColorValue;
+
+typedef struct VkClearDepthStencilValue {
+    float       depth;
+    deUint32    stencil;
+} VkClearDepthStencilValue;
+
+typedef union VkClearValue {
+    VkClearColorValue           color;
+    VkClearDepthStencilValue    depthStencil;
+} VkClearValue;
+
+typedef struct VkClearAttachment {
+    VkImageAspectFlags    aspectMask;
+    deUint32              colorAttachment;
+    VkClearValue          clearValue;
+} VkClearAttachment;
+
+typedef struct VkClearRect {
+    VkRect2D    rect;
+    deUint32    baseArrayLayer;
+    deUint32    layerCount;
+} VkClearRect;
+
+typedef struct VkImageBlit {
+    VkImageSubresourceLayers    srcSubresource;
+    VkOffset3D                  srcOffsets[2];
+    VkImageSubresourceLayers    dstSubresource;
+    VkOffset3D                  dstOffsets[2];
+} VkImageBlit;
+
+typedef struct VkImageCopy {
+    VkImageSubresourceLayers    srcSubresource;
+    VkOffset3D                  srcOffset;
+    VkImageSubresourceLayers    dstSubresource;
+    VkOffset3D                  dstOffset;
+    VkExtent3D                  extent;
+} VkImageCopy;
+
+typedef struct VkImageResolve {
+    VkImageSubresourceLayers    srcSubresource;
+    VkOffset3D                  srcOffset;
+    VkImageSubresourceLayers    dstSubresource;
+    VkOffset3D                  dstOffset;
+    VkExtent3D                  extent;
+} VkImageResolve;
+
+typedef struct VkRenderPassBeginInfo {
+    VkStructureType        sType;
+    const void*            pNext;
+    VkRenderPass           renderPass;
+    VkFramebuffer          framebuffer;
+    VkRect2D               renderArea;
+    deUint32               clearValueCount;
+    const VkClearValue*    pClearValues;
+} VkRenderPassBeginInfo;
+
+typedef VkResult (VKAPI_PTR *PFN_vkCreateInstance)(const VkInstanceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkInstance* pInstance);
+typedef void (VKAPI_PTR *PFN_vkDestroyInstance)(VkInstance instance, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkEnumeratePhysicalDevices)(VkInstance instance, deUint32* pPhysicalDeviceCount, VkPhysicalDevice* pPhysicalDevices);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceFeatures)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures* pFeatures);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties* pFormatProperties);
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceImageFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkImageFormatProperties* pImageFormatProperties);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceProperties)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties* pProperties);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceQueueFamilyProperties)(VkPhysicalDevice physicalDevice, deUint32* pQueueFamilyPropertyCount, VkQueueFamilyProperties* pQueueFamilyProperties);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceMemoryProperties)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties* pMemoryProperties);
+typedef PFN_vkVoidFunction (VKAPI_PTR *PFN_vkGetInstanceProcAddr)(VkInstance instance, const char* pName);
+typedef PFN_vkVoidFunction (VKAPI_PTR *PFN_vkGetDeviceProcAddr)(VkDevice device, const char* pName);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateDevice)(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDevice* pDevice);
+typedef void (VKAPI_PTR *PFN_vkDestroyDevice)(VkDevice device, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkEnumerateInstanceExtensionProperties)(const char* pLayerName, deUint32* pPropertyCount, VkExtensionProperties* pProperties);
+typedef VkResult (VKAPI_PTR *PFN_vkEnumerateDeviceExtensionProperties)(VkPhysicalDevice physicalDevice, const char* pLayerName, deUint32* pPropertyCount, VkExtensionProperties* pProperties);
+typedef VkResult (VKAPI_PTR *PFN_vkEnumerateInstanceLayerProperties)(deUint32* pPropertyCount, VkLayerProperties* pProperties);
+typedef VkResult (VKAPI_PTR *PFN_vkEnumerateDeviceLayerProperties)(VkPhysicalDevice physicalDevice, deUint32* pPropertyCount, VkLayerProperties* pProperties);
+typedef void (VKAPI_PTR *PFN_vkGetDeviceQueue)(VkDevice device, deUint32 queueFamilyIndex, deUint32 queueIndex, VkQueue* pQueue);
+typedef VkResult (VKAPI_PTR *PFN_vkQueueSubmit)(VkQueue queue, deUint32 submitCount, const VkSubmitInfo* pSubmits, VkFence fence);
+typedef VkResult (VKAPI_PTR *PFN_vkQueueWaitIdle)(VkQueue queue);
+typedef VkResult (VKAPI_PTR *PFN_vkDeviceWaitIdle)(VkDevice device);
+typedef VkResult (VKAPI_PTR *PFN_vkAllocateMemory)(VkDevice device, const VkMemoryAllocateInfo* pAllocateInfo, const VkAllocationCallbacks* pAllocator, VkDeviceMemory* pMemory);
+typedef VkResult (VKAPI_PTR *PFN_vkMapMemory)(VkDevice device, VkDeviceMemory memory, VkDeviceSize offset, VkDeviceSize size, VkMemoryMapFlags flags, void** ppData);
+typedef void (VKAPI_PTR *PFN_vkUnmapMemory)(VkDevice device, VkDeviceMemory memory);
+typedef VkResult (VKAPI_PTR *PFN_vkFlushMappedMemoryRanges)(VkDevice device, deUint32 memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges);
+typedef VkResult (VKAPI_PTR *PFN_vkInvalidateMappedMemoryRanges)(VkDevice device, deUint32 memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges);
+typedef void (VKAPI_PTR *PFN_vkGetDeviceMemoryCommitment)(VkDevice device, VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes);
+typedef VkResult (VKAPI_PTR *PFN_vkBindBufferMemory)(VkDevice device, VkBuffer buffer, VkDeviceMemory memory, VkDeviceSize memoryOffset);
+typedef VkResult (VKAPI_PTR *PFN_vkBindImageMemory)(VkDevice device, VkImage image, VkDeviceMemory memory, VkDeviceSize memoryOffset);
+typedef void (VKAPI_PTR *PFN_vkGetBufferMemoryRequirements)(VkDevice device, VkBuffer buffer, VkMemoryRequirements* pMemoryRequirements);
+typedef void (VKAPI_PTR *PFN_vkGetImageMemoryRequirements)(VkDevice device, VkImage image, VkMemoryRequirements* pMemoryRequirements);
+typedef void (VKAPI_PTR *PFN_vkGetImageSparseMemoryRequirements)(VkDevice device, VkImage image, deUint32* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements* pSparseMemoryRequirements);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceSparseImageFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkSampleCountFlagBits samples, VkImageUsageFlags usage, VkImageTiling tiling, deUint32* pPropertyCount, VkSparseImageFormatProperties* pProperties);
+typedef VkResult (VKAPI_PTR *PFN_vkQueueBindSparse)(VkQueue queue, deUint32 bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateFence)(VkDevice device, const VkFenceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence);
+typedef void (VKAPI_PTR *PFN_vkDestroyFence)(VkDevice device, VkFence fence, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkResetFences)(VkDevice device, deUint32 fenceCount, const VkFence* pFences);
+typedef VkResult (VKAPI_PTR *PFN_vkGetFenceStatus)(VkDevice device, VkFence fence);
+typedef VkResult (VKAPI_PTR *PFN_vkWaitForFences)(VkDevice device, deUint32 fenceCount, const VkFence* pFences, VkBool32 waitAll, deUint64 timeout);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateSemaphore)(VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSemaphore* pSemaphore);
+typedef void (VKAPI_PTR *PFN_vkDestroySemaphore)(VkDevice device, VkSemaphore semaphore, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateEvent)(VkDevice device, const VkEventCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkEvent* pEvent);
+typedef void (VKAPI_PTR *PFN_vkDestroyEvent)(VkDevice device, VkEvent event, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkGetEventStatus)(VkDevice device, VkEvent event);
+typedef VkResult (VKAPI_PTR *PFN_vkSetEvent)(VkDevice device, VkEvent event);
+typedef VkResult (VKAPI_PTR *PFN_vkResetEvent)(VkDevice device, VkEvent event);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateQueryPool)(VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkQueryPool* pQueryPool);
+typedef VkResult (VKAPI_PTR *PFN_vkGetQueryPoolResults)(VkDevice device, VkQueryPool queryPool, deUint32 firstQuery, deUint32 queryCount, deUintptr dataSize, void* pData, VkDeviceSize stride, VkQueryResultFlags flags);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateBuffer)(VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBuffer* pBuffer);
+typedef void (VKAPI_PTR *PFN_vkDestroyBuffer)(VkDevice device, VkBuffer buffer, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateBufferView)(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBufferView* pView);
+typedef void (VKAPI_PTR *PFN_vkDestroyBufferView)(VkDevice device, VkBufferView bufferView, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateImage)(VkDevice device, const VkImageCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImage* pImage);
+typedef void (VKAPI_PTR *PFN_vkDestroyImage)(VkDevice device, VkImage image, const VkAllocationCallbacks* pAllocator);
+typedef void (VKAPI_PTR *PFN_vkGetImageSubresourceLayout)(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateImageView)(VkDevice device, const VkImageViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImageView* pView);
+typedef void (VKAPI_PTR *PFN_vkDestroyImageView)(VkDevice device, VkImageView imageView, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkCreatePipelineCache)(VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineCache* pPipelineCache);
+typedef void (VKAPI_PTR *PFN_vkDestroyPipelineCache)(VkDevice device, VkPipelineCache pipelineCache, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateGraphicsPipelines)(VkDevice device, VkPipelineCache pipelineCache, deUint32 createInfoCount, const VkGraphicsPipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateComputePipelines)(VkDevice device, VkPipelineCache pipelineCache, deUint32 createInfoCount, const VkComputePipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines);
+typedef void (VKAPI_PTR *PFN_vkDestroyPipeline)(VkDevice device, VkPipeline pipeline, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkCreatePipelineLayout)(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineLayout* pPipelineLayout);
+typedef void (VKAPI_PTR *PFN_vkDestroyPipelineLayout)(VkDevice device, VkPipelineLayout pipelineLayout, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateSampler)(VkDevice device, const VkSamplerCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSampler* pSampler);
+typedef void (VKAPI_PTR *PFN_vkDestroySampler)(VkDevice device, VkSampler sampler, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateDescriptorSetLayout)(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorSetLayout* pSetLayout);
+typedef void (VKAPI_PTR *PFN_vkDestroyDescriptorSetLayout)(VkDevice device, VkDescriptorSetLayout descriptorSetLayout, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateDescriptorPool)(VkDevice device, const VkDescriptorPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorPool* pDescriptorPool);
+typedef VkResult (VKAPI_PTR *PFN_vkResetDescriptorPool)(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorPoolResetFlags flags);
+typedef VkResult (VKAPI_PTR *PFN_vkAllocateDescriptorSets)(VkDevice device, const VkDescriptorSetAllocateInfo* pAllocateInfo, VkDescriptorSet* pDescriptorSets);
+typedef VkResult (VKAPI_PTR *PFN_vkFreeDescriptorSets)(VkDevice device, VkDescriptorPool descriptorPool, deUint32 descriptorSetCount, const VkDescriptorSet* pDescriptorSets);
+typedef void (VKAPI_PTR *PFN_vkUpdateDescriptorSets)(VkDevice device, deUint32 descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites, deUint32 descriptorCopyCount, const VkCopyDescriptorSet* pDescriptorCopies);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateFramebuffer)(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFramebuffer* pFramebuffer);
+typedef void (VKAPI_PTR *PFN_vkDestroyFramebuffer)(VkDevice device, VkFramebuffer framebuffer, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateRenderPass)(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass);
+typedef void (VKAPI_PTR *PFN_vkDestroyRenderPass)(VkDevice device, VkRenderPass renderPass, const VkAllocationCallbacks* pAllocator);
+typedef void (VKAPI_PTR *PFN_vkGetRenderAreaGranularity)(VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateCommandPool)(VkDevice device, const VkCommandPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkCommandPool* pCommandPool);
+typedef VkResult (VKAPI_PTR *PFN_vkResetCommandPool)(VkDevice device, VkCommandPool commandPool, VkCommandPoolResetFlags flags);
+typedef VkResult (VKAPI_PTR *PFN_vkAllocateCommandBuffers)(VkDevice device, const VkCommandBufferAllocateInfo* pAllocateInfo, VkCommandBuffer* pCommandBuffers);
+typedef void (VKAPI_PTR *PFN_vkFreeCommandBuffers)(VkDevice device, VkCommandPool commandPool, deUint32 commandBufferCount, const VkCommandBuffer* pCommandBuffers);
+typedef VkResult (VKAPI_PTR *PFN_vkBeginCommandBuffer)(VkCommandBuffer commandBuffer, const VkCommandBufferBeginInfo* pBeginInfo);
+typedef VkResult (VKAPI_PTR *PFN_vkEndCommandBuffer)(VkCommandBuffer commandBuffer);
+typedef VkResult (VKAPI_PTR *PFN_vkResetCommandBuffer)(VkCommandBuffer commandBuffer, VkCommandBufferResetFlags flags);
+typedef void (VKAPI_PTR *PFN_vkCmdBindPipeline)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline);
+typedef void (VKAPI_PTR *PFN_vkCmdSetViewport)(VkCommandBuffer commandBuffer, deUint32 firstViewport, deUint32 viewportCount, const VkViewport* pViewports);
+typedef void (VKAPI_PTR *PFN_vkCmdSetScissor)(VkCommandBuffer commandBuffer, deUint32 firstScissor, deUint32 scissorCount, const VkRect2D* pScissors);
+typedef void (VKAPI_PTR *PFN_vkCmdSetLineWidth)(VkCommandBuffer commandBuffer, float lineWidth);
+typedef void (VKAPI_PTR *PFN_vkCmdSetDepthBias)(VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor);
+typedef void (VKAPI_PTR *PFN_vkCmdSetBlendConstants)(VkCommandBuffer commandBuffer, const float blendConstants[4]);
+typedef void (VKAPI_PTR *PFN_vkCmdSetDepthBounds)(VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds);
+typedef void (VKAPI_PTR *PFN_vkCmdSetStencilCompareMask)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, deUint32 compareMask);
+typedef void (VKAPI_PTR *PFN_vkCmdSetStencilWriteMask)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, deUint32 writeMask);
+typedef void (VKAPI_PTR *PFN_vkCmdSetStencilReference)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, deUint32 reference);
+typedef void (VKAPI_PTR *PFN_vkCmdBindDescriptorSets)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, deUint32 firstSet, deUint32 descriptorSetCount, const VkDescriptorSet* pDescriptorSets, deUint32 dynamicOffsetCount, const deUint32* pDynamicOffsets);
+typedef void (VKAPI_PTR *PFN_vkCmdBindIndexBuffer)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType);
+typedef void (VKAPI_PTR *PFN_vkCmdBindVertexBuffers)(VkCommandBuffer commandBuffer, deUint32 firstBinding, deUint32 bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets);
+typedef void (VKAPI_PTR *PFN_vkCmdDraw)(VkCommandBuffer commandBuffer, deUint32 vertexCount, deUint32 instanceCount, deUint32 firstVertex, deUint32 firstInstance);
+typedef void (VKAPI_PTR *PFN_vkCmdDrawIndexed)(VkCommandBuffer commandBuffer, deUint32 indexCount, deUint32 instanceCount, deUint32 firstIndex, deInt32 vertexOffset, deUint32 firstInstance);
+typedef void (VKAPI_PTR *PFN_vkCmdDrawIndirect)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, deUint32 drawCount, deUint32 stride);
+typedef void (VKAPI_PTR *PFN_vkCmdDrawIndexedIndirect)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, deUint32 drawCount, deUint32 stride);
+typedef void (VKAPI_PTR *PFN_vkCmdDispatch)(VkCommandBuffer commandBuffer, deUint32 groupCountX, deUint32 groupCountY, deUint32 groupCountZ);
+typedef void (VKAPI_PTR *PFN_vkCmdDispatchIndirect)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset);
+typedef void (VKAPI_PTR *PFN_vkCmdCopyBuffer)(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkBuffer dstBuffer, deUint32 regionCount, const VkBufferCopy* pRegions);
+typedef void (VKAPI_PTR *PFN_vkCmdCopyImage)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, deUint32 regionCount, const VkImageCopy* pRegions);
+typedef void (VKAPI_PTR *PFN_vkCmdBlitImage)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, deUint32 regionCount, const VkImageBlit* pRegions, VkFilter filter);
+typedef void (VKAPI_PTR *PFN_vkCmdCopyBufferToImage)(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkImage dstImage, VkImageLayout dstImageLayout, deUint32 regionCount, const VkBufferImageCopy* pRegions);
+typedef void (VKAPI_PTR *PFN_vkCmdCopyImageToBuffer)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer dstBuffer, deUint32 regionCount, const VkBufferImageCopy* pRegions);
+typedef void (VKAPI_PTR *PFN_vkCmdUpdateBuffer)(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize dataSize, const void* pData);
+typedef void (VKAPI_PTR *PFN_vkCmdFillBuffer)(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize size, deUint32 data);
+typedef void (VKAPI_PTR *PFN_vkCmdClearColorImage)(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, deUint32 rangeCount, const VkImageSubresourceRange* pRanges);
+typedef void (VKAPI_PTR *PFN_vkCmdClearDepthStencilImage)(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, deUint32 rangeCount, const VkImageSubresourceRange* pRanges);
+typedef void (VKAPI_PTR *PFN_vkCmdClearAttachments)(VkCommandBuffer commandBuffer, deUint32 attachmentCount, const VkClearAttachment* pAttachments, deUint32 rectCount, const VkClearRect* pRects);
+typedef void (VKAPI_PTR *PFN_vkCmdResolveImage)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, deUint32 regionCount, const VkImageResolve* pRegions);
+typedef void (VKAPI_PTR *PFN_vkCmdSetEvent)(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask);
+typedef void (VKAPI_PTR *PFN_vkCmdResetEvent)(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask);
+typedef void (VKAPI_PTR *PFN_vkCmdWaitEvents)(VkCommandBuffer commandBuffer, deUint32 eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, deUint32 memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, deUint32 bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, deUint32 imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers);
+typedef void (VKAPI_PTR *PFN_vkCmdPipelineBarrier)(VkCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, deUint32 memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, deUint32 bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, deUint32 imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers);
+typedef void (VKAPI_PTR *PFN_vkCmdBeginQuery)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 query, VkQueryControlFlags flags);
+typedef void (VKAPI_PTR *PFN_vkCmdEndQuery)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 query);
+typedef void (VKAPI_PTR *PFN_vkCmdResetQueryPool)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 firstQuery, deUint32 queryCount);
+typedef void (VKAPI_PTR *PFN_vkCmdWriteTimestamp)(VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, deUint32 query);
+typedef void (VKAPI_PTR *PFN_vkCmdCopyQueryPoolResults)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, deUint32 firstQuery, deUint32 queryCount, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize stride, VkQueryResultFlags flags);
+typedef void (VKAPI_PTR *PFN_vkCmdPushConstants)(VkCommandBuffer commandBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, deUint32 offset, deUint32 size, const void* pValues);
+typedef void (VKAPI_PTR *PFN_vkCmdBeginRenderPass)(VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkSubpassContents contents);
+typedef void (VKAPI_PTR *PFN_vkCmdNextSubpass)(VkCommandBuffer commandBuffer, VkSubpassContents contents);
+typedef void (VKAPI_PTR *PFN_vkCmdEndRenderPass)(VkCommandBuffer commandBuffer);
+typedef void (VKAPI_PTR *PFN_vkCmdExecuteCommands)(VkCommandBuffer commandBuffer, deUint32 commandBufferCount, const VkCommandBuffer* pCommandBuffers);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateInstance(
+    const VkInstanceCreateInfo*                 pCreateInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkInstance*                                 pInstance);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyInstance(
+    VkInstance                                  instance,
+    const VkAllocationCallbacks*                pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDevices(
+    VkInstance                                  instance,
+    deUint32*                                   pPhysicalDeviceCount,
+    VkPhysicalDevice*                           pPhysicalDevices);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFeatures(
+    VkPhysicalDevice                            physicalDevice,
+    VkPhysicalDeviceFeatures*                   pFeatures);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFormatProperties(
+    VkPhysicalDevice                            physicalDevice,
+    VkFormat                                    format,
+    VkFormatProperties*                         pFormatProperties);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceImageFormatProperties(
+    VkPhysicalDevice                            physicalDevice,
+    VkFormat                                    format,
+    VkImageType                                 type,
+    VkImageTiling                               tiling,
+    VkImageUsageFlags                           usage,
+    VkImageCreateFlags                          flags,
+    VkImageFormatProperties*                    pImageFormatProperties);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceProperties(
+    VkPhysicalDevice                            physicalDevice,
+    VkPhysicalDeviceProperties*                 pProperties);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyProperties(
+    VkPhysicalDevice                            physicalDevice,
+    deUint32*                                   pQueueFamilyPropertyCount,
+    VkQueueFamilyProperties*                    pQueueFamilyProperties);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMemoryProperties(
+    VkPhysicalDevice                            physicalDevice,
+    VkPhysicalDeviceMemoryProperties*           pMemoryProperties);
+
+VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetInstanceProcAddr(
+    VkInstance                                  instance,
+    const char*                                 pName);
+
+VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetDeviceProcAddr(
+    VkDevice                                    device,
+    const char*                                 pName);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateDevice(
+    VkPhysicalDevice                            physicalDevice,
+    const VkDeviceCreateInfo*                   pCreateInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkDevice*                                   pDevice);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyDevice(
+    VkDevice                                    device,
+    const VkAllocationCallbacks*                pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceExtensionProperties(
+    const char*                                 pLayerName,
+    deUint32*                                   pPropertyCount,
+    VkExtensionProperties*                      pProperties);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceExtensionProperties(
+    VkPhysicalDevice                            physicalDevice,
+    const char*                                 pLayerName,
+    deUint32*                                   pPropertyCount,
+    VkExtensionProperties*                      pProperties);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceLayerProperties(
+    deUint32*                                   pPropertyCount,
+    VkLayerProperties*                          pProperties);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceLayerProperties(
+    VkPhysicalDevice                            physicalDevice,
+    deUint32*                                   pPropertyCount,
+    VkLayerProperties*                          pProperties);
+
+VKAPI_ATTR void VKAPI_CALL vkGetDeviceQueue(
+    VkDevice                                    device,
+    deUint32                                    queueFamilyIndex,
+    deUint32                                    queueIndex,
+    VkQueue*                                    pQueue);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkQueueSubmit(
+    VkQueue                                     queue,
+    deUint32                                    submitCount,
+    const VkSubmitInfo*                         pSubmits,
+    VkFence                                     fence);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkQueueWaitIdle(
+    VkQueue                                     queue);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkDeviceWaitIdle(
+    VkDevice                                    device);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkAllocateMemory(
+    VkDevice                                    device,
+    const VkMemoryAllocateInfo*                 pAllocateInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkDeviceMemory*                             pMemory);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkMapMemory(
+    VkDevice                                    device,
+    VkDeviceMemory                              memory,
+    VkDeviceSize                                offset,
+    VkDeviceSize                                size,
+    VkMemoryMapFlags                            flags,
+    void**                                      ppData);
+
+VKAPI_ATTR void VKAPI_CALL vkUnmapMemory(
+    VkDevice                                    device,
+    VkDeviceMemory                              memory);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkFlushMappedMemoryRanges(
+    VkDevice                                    device,
+    deUint32                                    memoryRangeCount,
+    const VkMappedMemoryRange*                  pMemoryRanges);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkInvalidateMappedMemoryRanges(
+    VkDevice                                    device,
+    deUint32                                    memoryRangeCount,
+    const VkMappedMemoryRange*                  pMemoryRanges);
+
+VKAPI_ATTR void VKAPI_CALL vkGetDeviceMemoryCommitment(
+    VkDevice                                    device,
+    VkDeviceMemory                              memory,
+    VkDeviceSize*                               pCommittedMemoryInBytes);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkBindBufferMemory(
+    VkDevice                                    device,
+    VkBuffer                                    buffer,
+    VkDeviceMemory                              memory,
+    VkDeviceSize                                memoryOffset);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkBindImageMemory(
+    VkDevice                                    device,
+    VkImage                                     image,
+    VkDeviceMemory                              memory,
+    VkDeviceSize                                memoryOffset);
+
+VKAPI_ATTR void VKAPI_CALL vkGetBufferMemoryRequirements(
+    VkDevice                                    device,
+    VkBuffer                                    buffer,
+    VkMemoryRequirements*                       pMemoryRequirements);
+
+VKAPI_ATTR void VKAPI_CALL vkGetImageMemoryRequirements(
+    VkDevice                                    device,
+    VkImage                                     image,
+    VkMemoryRequirements*                       pMemoryRequirements);
+
+VKAPI_ATTR void VKAPI_CALL vkGetImageSparseMemoryRequirements(
+    VkDevice                                    device,
+    VkImage                                     image,
+    deUint32*                                   pSparseMemoryRequirementCount,
+    VkSparseImageMemoryRequirements*            pSparseMemoryRequirements);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceSparseImageFormatProperties(
+    VkPhysicalDevice                            physicalDevice,
+    VkFormat                                    format,
+    VkImageType                                 type,
+    VkSampleCountFlagBits                       samples,
+    VkImageUsageFlags                           usage,
+    VkImageTiling                               tiling,
+    deUint32*                                   pPropertyCount,
+    VkSparseImageFormatProperties*              pProperties);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkQueueBindSparse(
+    VkQueue                                     queue,
+    deUint32                                    bindInfoCount,
+    const VkBindSparseInfo*                     pBindInfo,
+    VkFence                                     fence);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateFence(
+    VkDevice                                    device,
+    const VkFenceCreateInfo*                    pCreateInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkFence*                                    pFence);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyFence(
+    VkDevice                                    device,
+    VkFence                                     fence,
+    const VkAllocationCallbacks*                pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkResetFences(
+    VkDevice                                    device,
+    deUint32                                    fenceCount,
+    const VkFence*                              pFences);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetFenceStatus(
+    VkDevice                                    device,
+    VkFence                                     fence);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkWaitForFences(
+    VkDevice                                    device,
+    deUint32                                    fenceCount,
+    const VkFence*                              pFences,
+    VkBool32                                    waitAll,
+    deUint64                                    timeout);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateSemaphore(
+    VkDevice                                    device,
+    const VkSemaphoreCreateInfo*                pCreateInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkSemaphore*                                pSemaphore);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroySemaphore(
+    VkDevice                                    device,
+    VkSemaphore                                 semaphore,
+    const VkAllocationCallbacks*                pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateEvent(
+    VkDevice                                    device,
+    const VkEventCreateInfo*                    pCreateInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkEvent*                                    pEvent);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyEvent(
+    VkDevice                                    device,
+    VkEvent                                     event,
+    const VkAllocationCallbacks*                pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetEventStatus(
+    VkDevice                                    device,
+    VkEvent                                     event);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkSetEvent(
+    VkDevice                                    device,
+    VkEvent                                     event);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkResetEvent(
+    VkDevice                                    device,
+    VkEvent                                     event);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateQueryPool(
+    VkDevice                                    device,
+    const VkQueryPoolCreateInfo*                pCreateInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkQueryPool*                                pQueryPool);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetQueryPoolResults(
+    VkDevice                                    device,
+    VkQueryPool                                 queryPool,
+    deUint32                                    firstQuery,
+    deUint32                                    queryCount,
+    deUintptr                                      dataSize,
+    void*                                       pData,
+    VkDeviceSize                                stride,
+    VkQueryResultFlags                          flags);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateBuffer(
+    VkDevice                                    device,
+    const VkBufferCreateInfo*                   pCreateInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkBuffer*                                   pBuffer);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyBuffer(
+    VkDevice                                    device,
+    VkBuffer                                    buffer,
+    const VkAllocationCallbacks*                pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateBufferView(
+    VkDevice                                    device,
+    const VkBufferViewCreateInfo*               pCreateInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkBufferView*                               pView);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyBufferView(
+    VkDevice                                    device,
+    VkBufferView                                bufferView,
+    const VkAllocationCallbacks*                pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateImage(
+    VkDevice                                    device,
+    const VkImageCreateInfo*                    pCreateInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkImage*                                    pImage);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyImage(
+    VkDevice                                    device,
+    VkImage                                     image,
+    const VkAllocationCallbacks*                pAllocator);
+
+VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout(
+    VkDevice                                    device,
+    VkImage                                     image,
+    const VkImageSubresource*                   pSubresource,
+    VkSubresourceLayout*                        pLayout);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateImageView(
+    VkDevice                                    device,
+    const VkImageViewCreateInfo*                pCreateInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkImageView*                                pView);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyImageView(
+    VkDevice                                    device,
+    VkImageView                                 imageView,
+    const VkAllocationCallbacks*                pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineCache(
+    VkDevice                                    device,
+    const VkPipelineCacheCreateInfo*            pCreateInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkPipelineCache*                            pPipelineCache);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyPipelineCache(
+    VkDevice                                    device,
+    VkPipelineCache                             pipelineCache,
+    const VkAllocationCallbacks*                pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateGraphicsPipelines(
+    VkDevice                                    device,
+    VkPipelineCache                             pipelineCache,
+    deUint32                                    createInfoCount,
+    const VkGraphicsPipelineCreateInfo*         pCreateInfos,
+    const VkAllocationCallbacks*                pAllocator,
+    VkPipeline*                                 pPipelines);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateComputePipelines(
+    VkDevice                                    device,
+    VkPipelineCache                             pipelineCache,
+    deUint32                                    createInfoCount,
+    const VkComputePipelineCreateInfo*          pCreateInfos,
+    const VkAllocationCallbacks*                pAllocator,
+    VkPipeline*                                 pPipelines);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyPipeline(
+    VkDevice                                    device,
+    VkPipeline                                  pipeline,
+    const VkAllocationCallbacks*                pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineLayout(
+    VkDevice                                    device,
+    const VkPipelineLayoutCreateInfo*           pCreateInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkPipelineLayout*                           pPipelineLayout);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyPipelineLayout(
+    VkDevice                                    device,
+    VkPipelineLayout                            pipelineLayout,
+    const VkAllocationCallbacks*                pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateSampler(
+    VkDevice                                    device,
+    const VkSamplerCreateInfo*                  pCreateInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkSampler*                                  pSampler);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroySampler(
+    VkDevice                                    device,
+    VkSampler                                   sampler,
+    const VkAllocationCallbacks*                pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorSetLayout(
+    VkDevice                                    device,
+    const VkDescriptorSetLayoutCreateInfo*      pCreateInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkDescriptorSetLayout*                      pSetLayout);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorSetLayout(
+    VkDevice                                    device,
+    VkDescriptorSetLayout                       descriptorSetLayout,
+    const VkAllocationCallbacks*                pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorPool(
+    VkDevice                                    device,
+    const VkDescriptorPoolCreateInfo*           pCreateInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkDescriptorPool*                           pDescriptorPool);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkResetDescriptorPool(
+    VkDevice                                    device,
+    VkDescriptorPool                            descriptorPool,
+    VkDescriptorPoolResetFlags                  flags);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkAllocateDescriptorSets(
+    VkDevice                                    device,
+    const VkDescriptorSetAllocateInfo*          pAllocateInfo,
+    VkDescriptorSet*                            pDescriptorSets);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkFreeDescriptorSets(
+    VkDevice                                    device,
+    VkDescriptorPool                            descriptorPool,
+    deUint32                                    descriptorSetCount,
+    const VkDescriptorSet*                      pDescriptorSets);
+
+VKAPI_ATTR void VKAPI_CALL vkUpdateDescriptorSets(
+    VkDevice                                    device,
+    deUint32                                    descriptorWriteCount,
+    const VkWriteDescriptorSet*                 pDescriptorWrites,
+    deUint32                                    descriptorCopyCount,
+    const VkCopyDescriptorSet*                  pDescriptorCopies);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateFramebuffer(
+    VkDevice                                    device,
+    const VkFramebufferCreateInfo*              pCreateInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkFramebuffer*                              pFramebuffer);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyFramebuffer(
+    VkDevice                                    device,
+    VkFramebuffer                               framebuffer,
+    const VkAllocationCallbacks*                pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass(
+    VkDevice                                    device,
+    const VkRenderPassCreateInfo*               pCreateInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkRenderPass*                               pRenderPass);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyRenderPass(
+    VkDevice                                    device,
+    VkRenderPass                                renderPass,
+    const VkAllocationCallbacks*                pAllocator);
+
+VKAPI_ATTR void VKAPI_CALL vkGetRenderAreaGranularity(
+    VkDevice                                    device,
+    VkRenderPass                                renderPass,
+    VkExtent2D*                                 pGranularity);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateCommandPool(
+    VkDevice                                    device,
+    const VkCommandPoolCreateInfo*              pCreateInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkCommandPool*                              pCommandPool);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandPool(
+    VkDevice                                    device,
+    VkCommandPool                               commandPool,
+    VkCommandPoolResetFlags                     flags);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkAllocateCommandBuffers(
+    VkDevice                                    device,
+    const VkCommandBufferAllocateInfo*          pAllocateInfo,
+    VkCommandBuffer*                            pCommandBuffers);
+
+VKAPI_ATTR void VKAPI_CALL vkFreeCommandBuffers(
+    VkDevice                                    device,
+    VkCommandPool                               commandPool,
+    deUint32                                    commandBufferCount,
+    const VkCommandBuffer*                      pCommandBuffers);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkBeginCommandBuffer(
+    VkCommandBuffer                             commandBuffer,
+    const VkCommandBufferBeginInfo*             pBeginInfo);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkEndCommandBuffer(
+    VkCommandBuffer                             commandBuffer);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandBuffer(
+    VkCommandBuffer                             commandBuffer,
+    VkCommandBufferResetFlags                   flags);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdBindPipeline(
+    VkCommandBuffer                             commandBuffer,
+    VkPipelineBindPoint                         pipelineBindPoint,
+    VkPipeline                                  pipeline);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetViewport(
+    VkCommandBuffer                             commandBuffer,
+    deUint32                                    firstViewport,
+    deUint32                                    viewportCount,
+    const VkViewport*                           pViewports);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetScissor(
+    VkCommandBuffer                             commandBuffer,
+    deUint32                                    firstScissor,
+    deUint32                                    scissorCount,
+    const VkRect2D*                             pScissors);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetLineWidth(
+    VkCommandBuffer                             commandBuffer,
+    float                                       lineWidth);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBias(
+    VkCommandBuffer                             commandBuffer,
+    float                                       depthBiasConstantFactor,
+    float                                       depthBiasClamp,
+    float                                       depthBiasSlopeFactor);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetBlendConstants(
+    VkCommandBuffer                             commandBuffer,
+    const float                                 blendConstants[4]);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBounds(
+    VkCommandBuffer                             commandBuffer,
+    float                                       minDepthBounds,
+    float                                       maxDepthBounds);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilCompareMask(
+    VkCommandBuffer                             commandBuffer,
+    VkStencilFaceFlags                          faceMask,
+    deUint32                                    compareMask);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilWriteMask(
+    VkCommandBuffer                             commandBuffer,
+    VkStencilFaceFlags                          faceMask,
+    deUint32                                    writeMask);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilReference(
+    VkCommandBuffer                             commandBuffer,
+    VkStencilFaceFlags                          faceMask,
+    deUint32                                    reference);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorSets(
+    VkCommandBuffer                             commandBuffer,
+    VkPipelineBindPoint                         pipelineBindPoint,
+    VkPipelineLayout                            layout,
+    deUint32                                    firstSet,
+    deUint32                                    descriptorSetCount,
+    const VkDescriptorSet*                      pDescriptorSets,
+    deUint32                                    dynamicOffsetCount,
+    const deUint32*                             pDynamicOffsets);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdBindIndexBuffer(
+    VkCommandBuffer                             commandBuffer,
+    VkBuffer                                    buffer,
+    VkDeviceSize                                offset,
+    VkIndexType                                 indexType);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdBindVertexBuffers(
+    VkCommandBuffer                             commandBuffer,
+    deUint32                                    firstBinding,
+    deUint32                                    bindingCount,
+    const VkBuffer*                             pBuffers,
+    const VkDeviceSize*                         pOffsets);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdDraw(
+    VkCommandBuffer                             commandBuffer,
+    deUint32                                    vertexCount,
+    deUint32                                    instanceCount,
+    deUint32                                    firstVertex,
+    deUint32                                    firstInstance);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexed(
+    VkCommandBuffer                             commandBuffer,
+    deUint32                                    indexCount,
+    deUint32                                    instanceCount,
+    deUint32                                    firstIndex,
+    deInt32                                     vertexOffset,
+    deUint32                                    firstInstance);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirect(
+    VkCommandBuffer                             commandBuffer,
+    VkBuffer                                    buffer,
+    VkDeviceSize                                offset,
+    deUint32                                    drawCount,
+    deUint32                                    stride);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirect(
+    VkCommandBuffer                             commandBuffer,
+    VkBuffer                                    buffer,
+    VkDeviceSize                                offset,
+    deUint32                                    drawCount,
+    deUint32                                    stride);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdDispatch(
+    VkCommandBuffer                             commandBuffer,
+    deUint32                                    groupCountX,
+    deUint32                                    groupCountY,
+    deUint32                                    groupCountZ);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdDispatchIndirect(
+    VkCommandBuffer                             commandBuffer,
+    VkBuffer                                    buffer,
+    VkDeviceSize                                offset);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdCopyBuffer(
+    VkCommandBuffer                             commandBuffer,
+    VkBuffer                                    srcBuffer,
+    VkBuffer                                    dstBuffer,
+    deUint32                                    regionCount,
+    const VkBufferCopy*                         pRegions);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdCopyImage(
+    VkCommandBuffer                             commandBuffer,
+    VkImage                                     srcImage,
+    VkImageLayout                               srcImageLayout,
+    VkImage                                     dstImage,
+    VkImageLayout                               dstImageLayout,
+    deUint32                                    regionCount,
+    const VkImageCopy*                          pRegions);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdBlitImage(
+    VkCommandBuffer                             commandBuffer,
+    VkImage                                     srcImage,
+    VkImageLayout                               srcImageLayout,
+    VkImage                                     dstImage,
+    VkImageLayout                               dstImageLayout,
+    deUint32                                    regionCount,
+    const VkImageBlit*                          pRegions,
+    VkFilter                                    filter);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdCopyBufferToImage(
+    VkCommandBuffer                             commandBuffer,
+    VkBuffer                                    srcBuffer,
+    VkImage                                     dstImage,
+    VkImageLayout                               dstImageLayout,
+    deUint32                                    regionCount,
+    const VkBufferImageCopy*                    pRegions);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdCopyImageToBuffer(
+    VkCommandBuffer                             commandBuffer,
+    VkImage                                     srcImage,
+    VkImageLayout                               srcImageLayout,
+    VkBuffer                                    dstBuffer,
+    deUint32                                    regionCount,
+    const VkBufferImageCopy*                    pRegions);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdUpdateBuffer(
+    VkCommandBuffer                             commandBuffer,
+    VkBuffer                                    dstBuffer,
+    VkDeviceSize                                dstOffset,
+    VkDeviceSize                                dataSize,
+    const void*                                 pData);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdFillBuffer(
+    VkCommandBuffer                             commandBuffer,
+    VkBuffer                                    dstBuffer,
+    VkDeviceSize                                dstOffset,
+    VkDeviceSize                                size,
+    deUint32                                    data);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdClearColorImage(
+    VkCommandBuffer                             commandBuffer,
+    VkImage                                     image,
+    VkImageLayout                               imageLayout,
+    const VkClearColorValue*                    pColor,
+    deUint32                                    rangeCount,
+    const VkImageSubresourceRange*              pRanges);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdClearDepthStencilImage(
+    VkCommandBuffer                             commandBuffer,
+    VkImage                                     image,
+    VkImageLayout                               imageLayout,
+    const VkClearDepthStencilValue*             pDepthStencil,
+    deUint32                                    rangeCount,
+    const VkImageSubresourceRange*              pRanges);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdClearAttachments(
+    VkCommandBuffer                             commandBuffer,
+    deUint32                                    attachmentCount,
+    const VkClearAttachment*                    pAttachments,
+    deUint32                                    rectCount,
+    const VkClearRect*                          pRects);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdResolveImage(
+    VkCommandBuffer                             commandBuffer,
+    VkImage                                     srcImage,
+    VkImageLayout                               srcImageLayout,
+    VkImage                                     dstImage,
+    VkImageLayout                               dstImageLayout,
+    deUint32                                    regionCount,
+    const VkImageResolve*                       pRegions);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetEvent(
+    VkCommandBuffer                             commandBuffer,
+    VkEvent                                     event,
+    VkPipelineStageFlags                        stageMask);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdResetEvent(
+    VkCommandBuffer                             commandBuffer,
+    VkEvent                                     event,
+    VkPipelineStageFlags                        stageMask);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents(
+    VkCommandBuffer                             commandBuffer,
+    deUint32                                    eventCount,
+    const VkEvent*                              pEvents,
+    VkPipelineStageFlags                        srcStageMask,
+    VkPipelineStageFlags                        dstStageMask,
+    deUint32                                    memoryBarrierCount,
+    const VkMemoryBarrier*                      pMemoryBarriers,
+    deUint32                                    bufferMemoryBarrierCount,
+    const VkBufferMemoryBarrier*                pBufferMemoryBarriers,
+    deUint32                                    imageMemoryBarrierCount,
+    const VkImageMemoryBarrier*                 pImageMemoryBarriers);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdPipelineBarrier(
+    VkCommandBuffer                             commandBuffer,
+    VkPipelineStageFlags                        srcStageMask,
+    VkPipelineStageFlags                        dstStageMask,
+    VkDependencyFlags                           dependencyFlags,
+    deUint32                                    memoryBarrierCount,
+    const VkMemoryBarrier*                      pMemoryBarriers,
+    deUint32                                    bufferMemoryBarrierCount,
+    const VkBufferMemoryBarrier*                pBufferMemoryBarriers,
+    deUint32                                    imageMemoryBarrierCount,
+    const VkImageMemoryBarrier*                 pImageMemoryBarriers);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdBeginQuery(
+    VkCommandBuffer                             commandBuffer,
+    VkQueryPool                                 queryPool,
+    deUint32                                    query,
+    VkQueryControlFlags                         flags);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdEndQuery(
+    VkCommandBuffer                             commandBuffer,
+    VkQueryPool                                 queryPool,
+    deUint32                                    query);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdResetQueryPool(
+    VkCommandBuffer                             commandBuffer,
+    VkQueryPool                                 queryPool,
+    deUint32                                    firstQuery,
+    deUint32                                    queryCount);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdWriteTimestamp(
+    VkCommandBuffer                             commandBuffer,
+    VkPipelineStageFlagBits                     pipelineStage,
+    VkQueryPool                                 queryPool,
+    deUint32                                    query);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdCopyQueryPoolResults(
+    VkCommandBuffer                             commandBuffer,
+    VkQueryPool                                 queryPool,
+    deUint32                                    firstQuery,
+    deUint32                                    queryCount,
+    VkBuffer                                    dstBuffer,
+    VkDeviceSize                                dstOffset,
+    VkDeviceSize                                stride,
+    VkQueryResultFlags                          flags);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdPushConstants(
+    VkCommandBuffer                             commandBuffer,
+    VkPipelineLayout                            layout,
+    VkShaderStageFlags                          stageFlags,
+    deUint32                                    offset,
+    deUint32                                    size,
+    const void*                                 pValues);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderPass(
+    VkCommandBuffer                             commandBuffer,
+    const VkRenderPassBeginInfo*                pRenderPassBegin,
+    VkSubpassContents                           contents);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdNextSubpass(
+    VkCommandBuffer                             commandBuffer,
+    VkSubpassContents                           contents);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderPass(
+    VkCommandBuffer                             commandBuffer);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdExecuteCommands(
+    VkCommandBuffer                             commandBuffer,
+    deUint32                                    commandBufferCount,
+    const VkCommandBuffer*                      pCommandBuffers);
+#endif
+
+
+#define VKSC_VERSION_1_0 1
+// Vulkan SC 1.0 version number
+#define VKSC_API_VERSION_1_0 VK_MAKE_VERSION(1, 0, 0)// Patch version should always be set to 0
+
+
+typedef enum VkFaultLevel {
+    VK_FAULT_LEVEL_UNASSIGNED = 0,
+    VK_FAULT_LEVEL_CRITICAL = 1,
+    VK_FAULT_LEVEL_RECOVERABLE = 2,
+    VK_FAULT_LEVEL_WARNING = 3,
+    VK_FAULT_LEVEL_UNASSIGNED_KHR = VK_FAULT_LEVEL_UNASSIGNED,
+    VK_FAULT_LEVEL_CRITICAL_KHR = VK_FAULT_LEVEL_CRITICAL,
+    VK_FAULT_LEVEL_RECOVERABLE_KHR = VK_FAULT_LEVEL_RECOVERABLE,
+    VK_FAULT_LEVEL_WARNING_KHR = VK_FAULT_LEVEL_WARNING,
+    VK_FAULT_LEVEL_MAX_ENUM = 0x7FFFFFFF
+} VkFaultLevel;
+
+typedef enum VkFaultType {
+    VK_FAULT_TYPE_INVALID = 0,
+    VK_FAULT_TYPE_UNASSIGNED = 1,
+    VK_FAULT_TYPE_IMPLEMENTATION = 2,
+    VK_FAULT_TYPE_SYSTEM = 3,
+    VK_FAULT_TYPE_PHYSICAL_DEVICE = 4,
+    VK_FAULT_TYPE_COMMAND_BUFFER_FULL = 5,
+    VK_FAULT_TYPE_INVALID_API_USAGE = 6,
+    VK_FAULT_TYPE_INVALID_KHR = VK_FAULT_TYPE_INVALID,
+    VK_FAULT_TYPE_UNASSIGNED_KHR = VK_FAULT_TYPE_UNASSIGNED,
+    VK_FAULT_TYPE_IMPLEMENTATION_KHR = VK_FAULT_TYPE_IMPLEMENTATION,
+    VK_FAULT_TYPE_SYSTEM_KHR = VK_FAULT_TYPE_SYSTEM,
+    VK_FAULT_TYPE_PHYSICAL_DEVICE_KHR = VK_FAULT_TYPE_PHYSICAL_DEVICE,
+    VK_FAULT_TYPE_COMMAND_BUFFER_FULL_KHR = VK_FAULT_TYPE_COMMAND_BUFFER_FULL,
+    VK_FAULT_TYPE_INVALID_API_USAGE_KHR = VK_FAULT_TYPE_INVALID_API_USAGE,
+    VK_FAULT_TYPE_MAX_ENUM = 0x7FFFFFFF
+} VkFaultType;
+
+typedef enum VkFaultQueryBehavior {
+    VK_FAULT_QUERY_BEHAVIOR_GET_AND_CLEAR_ALL_FAULTS = 0,
+    VK_FAULT_QUERY_BEHAVIOR_GET_AND_CLEAR_ALL_FAULTS_KHR = VK_FAULT_QUERY_BEHAVIOR_GET_AND_CLEAR_ALL_FAULTS,
+    VK_FAULT_QUERY_BEHAVIOR_MAX_ENUM = 0x7FFFFFFF
+} VkFaultQueryBehavior;
+
+typedef enum VkPipelineMatchControl {
+    VK_PIPELINE_MATCH_CONTROL_APPLICATION_UUID_EXACT_MATCH = 0,
+    VK_PIPELINE_MATCH_CONTROL_APPLICATION_UUID_EXACT_MATCH_KHR = VK_PIPELINE_MATCH_CONTROL_APPLICATION_UUID_EXACT_MATCH,
+    VK_PIPELINE_MATCH_CONTROL_MAX_ENUM = 0x7FFFFFFF
+} VkPipelineMatchControl;
+typedef struct VkPhysicalDeviceVulkanSC10Features {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           pipelineIdentifier;
+    VkBool32           shaderAtomicInstructions;
+} VkPhysicalDeviceVulkanSC10Features;
+
+typedef struct VkPhysicalDeviceVulkanSC10Properties {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           deviceDestroyFreesMemory;
+    VkBool32           commandPoolMultipleCommandBuffersRecording;
+    VkBool32           commandPoolResetCommandBuffer;
+    VkBool32           descriptorPoolFreeDescriptorSets;
+    VkBool32           externalSubpassDependencies;
+    VkBool32           recyclePipelineMemory;
+    deUint32           maxSubpasses;
+    deUint32           maxInputAttachments;
+    deUint32           maxPreserveAttachments;
+    deUint32           maxFramebufferAttachments;
+    deUint32           maxQueryFaultCount;
+    deUint32           maxCallbackFaultCount;
+    VkBool32           commandBufferSimultaneousUse;
+    VkBool32           secondaryCommandBufferNullFramebuffer;
+} VkPhysicalDeviceVulkanSC10Properties;
+
+typedef struct VkPipelinePoolSize {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkDeviceSize       poolEntrySize;
+    deUint32           poolEntryCount;
+} VkPipelinePoolSize;
+
+typedef struct VkDeviceMemoryReservationCreateInfo {
+    VkStructureType                     sType;
+    const void*                         pNext;
+    deUint32                            pipelineCacheCreateInfoCount;
+    const VkPipelineCacheCreateInfo*    pPipelineCacheCreateInfos;
+    deUint32                            pipelinePoolSizeCount;
+    const VkPipelinePoolSize*           pPipelinePoolSizes;
+    deUint32                            descriptorSetLayoutBindingCount;
+    deUint32                            imageViewMaxMipLevels;
+    deUint32                            imageViewMaxArrayLayers;
+    deUint32                            layeredImageViewMaxMipLevels;
+    deUint32                            semaphoreRequestCount;
+    deUint32                            commandBufferRequestCount;
+    deUint32                            fenceRequestCount;
+    deUint32                            deviceMemoryRequestCount;
+    deUint32                            bufferRequestCount;
+    deUint32                            imageRequestCount;
+    deUint32                            eventRequestCount;
+    deUint32                            queryPoolRequestCount;
+    deUint32                            bufferViewRequestCount;
+    deUint32                            imageViewRequestCount;
+    deUint32                            layeredImageViewRequestCount;
+    deUint32                            pipelineLayoutRequestCount;
+    deUint32                            renderPassRequestCount;
+    deUint32                            graphicsPipelineRequestCount;
+    deUint32                            computePipelineRequestCount;
+    deUint32                            descriptorSetLayoutRequestCount;
+    deUint32                            samplerRequestCount;
+    deUint32                            descriptorPoolRequestCount;
+    deUint32                            descriptorSetRequestCount;
+    deUint32                            framebufferRequestCount;
+    deUint32                            commandPoolRequestCount;
+    deUint32                            samplerYcbcrConversionRequestCount;
+    deUint32                            surfaceRequestCount;
+    deUint32                            swapchainRequestCount;
+    deUint32                            displayModeRequestCount;
+} VkDeviceMemoryReservationCreateInfo;
+
+typedef struct VkCommandPoolMemoryReservationCreateInfo {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkDeviceSize       commandPoolReservedSize;
+    deUint32           commandPoolMaxCommandBuffers;
+} VkCommandPoolMemoryReservationCreateInfo;
+
+typedef struct VkCommandPoolMemoryConsumption {
+    VkStructureType    sType;
+    void*              pNext;
+    VkDeviceSize       commandPoolAllocated;
+    VkDeviceSize       commandPoolReservedSize;
+    VkDeviceSize       commandBufferAllocated;
+} VkCommandPoolMemoryConsumption;
+
+typedef struct VkPipelinePoolEntrySizeCreateInfo {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkDeviceSize       poolEntrySize;
+} VkPipelinePoolEntrySizeCreateInfo;
+
+typedef struct VkFaultData {
+    VkStructureType    sType;
+    void*              pNext;
+    VkFaultLevel       faultLevel;
+    VkFaultType        faultType;
+} VkFaultData;
+
+typedef void (VKAPI_PTR *PFN_vkFaultCallbackFunction)(
+    VkBool32                                    unrecordedFaults,
+    deUint32                                    faultCount,
+    const VkFaultData*                          pFaults);
+
+typedef struct VkFaultCallbackInfo {
+    VkStructureType                sType;
+    void*                          pNext;
+    VkFaultData*                   pFaults;
+    PFN_vkFaultCallbackFunction    pfnFaultCallback;
+} VkFaultCallbackInfo;
+
+typedef struct VkPhysicalDeviceFaultHandlingProperties {
+    VkStructureType    sType;
+    void*              pNext;
+    deUint32           maxQueryFaultCount;
+    deUint32           maxCallbackFaultCount;
+} VkPhysicalDeviceFaultHandlingProperties;
+
+typedef struct VkPhysicalDevicePipelineIdentifierFeatures {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           pipelineIdentifier;
+} VkPhysicalDevicePipelineIdentifierFeatures;
+
+typedef struct VkPipelineIdentifierInfo {
+    VkStructureType           sType;
+    const void*               pNext;
+    deUint8                   pipelineIdentifier[VK_UUID_SIZE];
+    VkPipelineMatchControl    matchControl;
+} VkPipelineIdentifierInfo;
+
+typedef void (VKAPI_PTR *PFN_vkGetCommandPoolMemoryConsumption)(VkDevice device, VkCommandPool commandPool, VkCommandBuffer commandBuffer, VkCommandPoolMemoryConsumption* pConsumption);
+typedef VkResult (VKAPI_PTR *PFN_vkGetFaultData)(VkDevice device, VkFaultQueryBehavior faultQueryBehavior, VkBool32* pUnrecordedFaults, deUint32* pFaultCount, VkFaultData* pFaults);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkGetCommandPoolMemoryConsumption(
+    VkDevice                                    device,
+    VkCommandPool                               commandPool,
+    VkCommandBuffer                             commandBuffer,
+    VkCommandPoolMemoryConsumption*             pConsumption);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetFaultData(
+    VkDevice                                    device,
+    VkFaultQueryBehavior                        faultQueryBehavior,
+    VkBool32*                                   pUnrecordedFaults,
+    deUint32*                                   pFaultCount,
+    VkFaultData*                                pFaults);
+#endif
+
+
+#define VK_VERSION_1_1 1
+// Vulkan 1.1 version number
+#define VK_API_VERSION_1_1 VK_MAKE_VERSION(1, 1, 0)// Patch version should always be set to 0
+
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSamplerYcbcrConversion)
+#define VK_MAX_DEVICE_GROUP_SIZE          32
+#define VK_LUID_SIZE                      8
+#define VK_QUEUE_FAMILY_EXTERNAL          (~0U-1)
+
+typedef enum VkPointClippingBehavior {
+    VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES = 0,
+    VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY = 1,
+    VK_POINT_CLIPPING_BEHAVIOR_MAX_ENUM = 0x7FFFFFFF
+} VkPointClippingBehavior;
+
+typedef enum VkTessellationDomainOrigin {
+    VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT = 0,
+    VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT = 1,
+    VK_TESSELLATION_DOMAIN_ORIGIN_MAX_ENUM = 0x7FFFFFFF
+} VkTessellationDomainOrigin;
+
+typedef enum VkSamplerYcbcrModelConversion {
+    VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY = 0,
+    VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY = 1,
+    VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709 = 2,
+    VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601 = 3,
+    VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020 = 4,
+    VK_SAMPLER_YCBCR_MODEL_CONVERSION_MAX_ENUM = 0x7FFFFFFF
+} VkSamplerYcbcrModelConversion;
+
+typedef enum VkSamplerYcbcrRange {
+    VK_SAMPLER_YCBCR_RANGE_ITU_FULL = 0,
+    VK_SAMPLER_YCBCR_RANGE_ITU_NARROW = 1,
+    VK_SAMPLER_YCBCR_RANGE_MAX_ENUM = 0x7FFFFFFF
+} VkSamplerYcbcrRange;
+
+typedef enum VkChromaLocation {
+    VK_CHROMA_LOCATION_COSITED_EVEN = 0,
+    VK_CHROMA_LOCATION_MIDPOINT = 1,
+    VK_CHROMA_LOCATION_MAX_ENUM = 0x7FFFFFFF
+} VkChromaLocation;
+
+typedef enum VkSubgroupFeatureFlagBits {
+    VK_SUBGROUP_FEATURE_BASIC_BIT = 0x00000001,
+    VK_SUBGROUP_FEATURE_VOTE_BIT = 0x00000002,
+    VK_SUBGROUP_FEATURE_ARITHMETIC_BIT = 0x00000004,
+    VK_SUBGROUP_FEATURE_BALLOT_BIT = 0x00000008,
+    VK_SUBGROUP_FEATURE_SHUFFLE_BIT = 0x00000010,
+    VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT = 0x00000020,
+    VK_SUBGROUP_FEATURE_CLUSTERED_BIT = 0x00000040,
+    VK_SUBGROUP_FEATURE_QUAD_BIT = 0x00000080,
+    VK_SUBGROUP_FEATURE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkSubgroupFeatureFlagBits;
+typedef VkFlags VkSubgroupFeatureFlags;
+
+typedef enum VkPeerMemoryFeatureFlagBits {
+    VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT = 0x00000001,
+    VK_PEER_MEMORY_FEATURE_COPY_DST_BIT = 0x00000002,
+    VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT = 0x00000004,
+    VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT = 0x00000008,
+    VK_PEER_MEMORY_FEATURE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkPeerMemoryFeatureFlagBits;
+typedef VkFlags VkPeerMemoryFeatureFlags;
+
+typedef enum VkMemoryAllocateFlagBits {
+    VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT = 0x00000001,
+    VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT = 0x00000002,
+    VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT = 0x00000004,
+    VK_MEMORY_ALLOCATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkMemoryAllocateFlagBits;
+typedef VkFlags VkMemoryAllocateFlags;
+
+typedef enum VkExternalMemoryHandleTypeFlagBits {
+    VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT = 0x00000001,
+    VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT = 0x00000002,
+    VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT = 0x00000004,
+    VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT = 0x00000008,
+    VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT = 0x00000010,
+    VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT = 0x00000020,
+    VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT = 0x00000040,
+    VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT = 0x00000200,
+    VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT = 0x00000080,
+    VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT = 0x00000100,
+    VK_EXTERNAL_MEMORY_HANDLE_TYPE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkExternalMemoryHandleTypeFlagBits;
+typedef VkFlags VkExternalMemoryHandleTypeFlags;
+
+typedef enum VkExternalMemoryFeatureFlagBits {
+    VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT = 0x00000001,
+    VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT = 0x00000002,
+    VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT = 0x00000004,
+    VK_EXTERNAL_MEMORY_FEATURE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkExternalMemoryFeatureFlagBits;
+typedef VkFlags VkExternalMemoryFeatureFlags;
+
+typedef enum VkExternalFenceHandleTypeFlagBits {
+    VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT = 0x00000001,
+    VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT = 0x00000002,
+    VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT = 0x00000004,
+    VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT = 0x00000008,
+    VK_EXTERNAL_FENCE_HANDLE_TYPE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkExternalFenceHandleTypeFlagBits;
+typedef VkFlags VkExternalFenceHandleTypeFlags;
+
+typedef enum VkExternalFenceFeatureFlagBits {
+    VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT = 0x00000001,
+    VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT = 0x00000002,
+    VK_EXTERNAL_FENCE_FEATURE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkExternalFenceFeatureFlagBits;
+typedef VkFlags VkExternalFenceFeatureFlags;
+
+typedef enum VkFenceImportFlagBits {
+    VK_FENCE_IMPORT_TEMPORARY_BIT = 0x00000001,
+    VK_FENCE_IMPORT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkFenceImportFlagBits;
+typedef VkFlags VkFenceImportFlags;
+
+typedef enum VkSemaphoreImportFlagBits {
+    VK_SEMAPHORE_IMPORT_TEMPORARY_BIT = 0x00000001,
+    VK_SEMAPHORE_IMPORT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkSemaphoreImportFlagBits;
+typedef VkFlags VkSemaphoreImportFlags;
+
+typedef enum VkExternalSemaphoreHandleTypeFlagBits {
+    VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT = 0x00000001,
+    VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT = 0x00000002,
+    VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT = 0x00000004,
+    VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT = 0x00000008,
+    VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT = 0x00000010,
+    VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_FENCE_BIT = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT,
+    VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkExternalSemaphoreHandleTypeFlagBits;
+typedef VkFlags VkExternalSemaphoreHandleTypeFlags;
+
+typedef enum VkExternalSemaphoreFeatureFlagBits {
+    VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT = 0x00000001,
+    VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT = 0x00000002,
+    VK_EXTERNAL_SEMAPHORE_FEATURE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkExternalSemaphoreFeatureFlagBits;
+typedef VkFlags VkExternalSemaphoreFeatureFlags;
+typedef struct VkPhysicalDeviceSubgroupProperties {
+    VkStructureType           sType;
+    void*                     pNext;
+    deUint32                  subgroupSize;
+    VkShaderStageFlags        supportedStages;
+    VkSubgroupFeatureFlags    supportedOperations;
+    VkBool32                  quadOperationsInAllStages;
+} VkPhysicalDeviceSubgroupProperties;
+
+typedef struct VkBindBufferMemoryInfo {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkBuffer           buffer;
+    VkDeviceMemory     memory;
+    VkDeviceSize       memoryOffset;
+} VkBindBufferMemoryInfo;
+
+typedef struct VkBindImageMemoryInfo {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkImage            image;
+    VkDeviceMemory     memory;
+    VkDeviceSize       memoryOffset;
+} VkBindImageMemoryInfo;
+
+typedef struct VkPhysicalDevice16BitStorageFeatures {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           storageBuffer16BitAccess;
+    VkBool32           uniformAndStorageBuffer16BitAccess;
+    VkBool32           storagePushConstant16;
+    VkBool32           storageInputOutput16;
+} VkPhysicalDevice16BitStorageFeatures;
+
+typedef struct VkMemoryDedicatedRequirements {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           prefersDedicatedAllocation;
+    VkBool32           requiresDedicatedAllocation;
+} VkMemoryDedicatedRequirements;
+
+typedef struct VkMemoryDedicatedAllocateInfo {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkImage            image;
+    VkBuffer           buffer;
+} VkMemoryDedicatedAllocateInfo;
+
+typedef struct VkMemoryAllocateFlagsInfo {
+    VkStructureType          sType;
+    const void*              pNext;
+    VkMemoryAllocateFlags    flags;
+    deUint32                 deviceMask;
+} VkMemoryAllocateFlagsInfo;
+
+typedef struct VkDeviceGroupRenderPassBeginInfo {
+    VkStructureType    sType;
+    const void*        pNext;
+    deUint32           deviceMask;
+    deUint32           deviceRenderAreaCount;
+    const VkRect2D*    pDeviceRenderAreas;
+} VkDeviceGroupRenderPassBeginInfo;
+
+typedef struct VkDeviceGroupCommandBufferBeginInfo {
+    VkStructureType    sType;
+    const void*        pNext;
+    deUint32           deviceMask;
+} VkDeviceGroupCommandBufferBeginInfo;
+
+typedef struct VkDeviceGroupSubmitInfo {
+    VkStructureType    sType;
+    const void*        pNext;
+    deUint32           waitSemaphoreCount;
+    const deUint32*    pWaitSemaphoreDeviceIndices;
+    deUint32           commandBufferCount;
+    const deUint32*    pCommandBufferDeviceMasks;
+    deUint32           signalSemaphoreCount;
+    const deUint32*    pSignalSemaphoreDeviceIndices;
+} VkDeviceGroupSubmitInfo;
+
+typedef struct VkDeviceGroupBindSparseInfo {
+    VkStructureType    sType;
+    const void*        pNext;
+    deUint32           resourceDeviceIndex;
+    deUint32           memoryDeviceIndex;
+} VkDeviceGroupBindSparseInfo;
+
+typedef struct VkBindBufferMemoryDeviceGroupInfo {
+    VkStructureType    sType;
+    const void*        pNext;
+    deUint32           deviceIndexCount;
+    const deUint32*    pDeviceIndices;
+} VkBindBufferMemoryDeviceGroupInfo;
+
+typedef struct VkBindImageMemoryDeviceGroupInfo {
+    VkStructureType    sType;
+    const void*        pNext;
+    deUint32           deviceIndexCount;
+    const deUint32*    pDeviceIndices;
+    deUint32           splitInstanceBindRegionCount;
+    const VkRect2D*    pSplitInstanceBindRegions;
+} VkBindImageMemoryDeviceGroupInfo;
+
+typedef struct VkPhysicalDeviceGroupProperties {
+    VkStructureType     sType;
+    void*               pNext;
+    deUint32            physicalDeviceCount;
+    VkPhysicalDevice    physicalDevices[VK_MAX_DEVICE_GROUP_SIZE];
+    VkBool32            subsetAllocation;
+} VkPhysicalDeviceGroupProperties;
+
+typedef struct VkDeviceGroupDeviceCreateInfo {
+    VkStructureType            sType;
+    const void*                pNext;
+    deUint32                   physicalDeviceCount;
+    const VkPhysicalDevice*    pPhysicalDevices;
+} VkDeviceGroupDeviceCreateInfo;
+
+typedef struct VkBufferMemoryRequirementsInfo2 {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkBuffer           buffer;
+} VkBufferMemoryRequirementsInfo2;
+
+typedef struct VkImageMemoryRequirementsInfo2 {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkImage            image;
+} VkImageMemoryRequirementsInfo2;
+
+typedef struct VkImageSparseMemoryRequirementsInfo2 {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkImage            image;
+} VkImageSparseMemoryRequirementsInfo2;
+
+typedef struct VkMemoryRequirements2 {
+    VkStructureType         sType;
+    void*                   pNext;
+    VkMemoryRequirements    memoryRequirements;
+} VkMemoryRequirements2;
+
+typedef struct VkSparseImageMemoryRequirements2 {
+    VkStructureType                    sType;
+    void*                              pNext;
+    VkSparseImageMemoryRequirements    memoryRequirements;
+} VkSparseImageMemoryRequirements2;
+
+typedef struct VkPhysicalDeviceFeatures2 {
+    VkStructureType             sType;
+    void*                       pNext;
+    VkPhysicalDeviceFeatures    features;
+} VkPhysicalDeviceFeatures2;
+
+typedef struct VkPhysicalDeviceProperties2 {
+    VkStructureType               sType;
+    void*                         pNext;
+    VkPhysicalDeviceProperties    properties;
+} VkPhysicalDeviceProperties2;
+
+typedef struct VkFormatProperties2 {
+    VkStructureType       sType;
+    void*                 pNext;
+    VkFormatProperties    formatProperties;
+} VkFormatProperties2;
+
+typedef struct VkImageFormatProperties2 {
+    VkStructureType            sType;
+    void*                      pNext;
+    VkImageFormatProperties    imageFormatProperties;
+} VkImageFormatProperties2;
+
+typedef struct VkPhysicalDeviceImageFormatInfo2 {
+    VkStructureType       sType;
+    const void*           pNext;
+    VkFormat              format;
+    VkImageType           type;
+    VkImageTiling         tiling;
+    VkImageUsageFlags     usage;
+    VkImageCreateFlags    flags;
+} VkPhysicalDeviceImageFormatInfo2;
+
+typedef struct VkQueueFamilyProperties2 {
+    VkStructureType            sType;
+    void*                      pNext;
+    VkQueueFamilyProperties    queueFamilyProperties;
+} VkQueueFamilyProperties2;
+
+typedef struct VkPhysicalDeviceMemoryProperties2 {
+    VkStructureType                     sType;
+    void*                               pNext;
+    VkPhysicalDeviceMemoryProperties    memoryProperties;
+} VkPhysicalDeviceMemoryProperties2;
+
+typedef struct VkSparseImageFormatProperties2 {
+    VkStructureType                  sType;
+    void*                            pNext;
+    VkSparseImageFormatProperties    properties;
+} VkSparseImageFormatProperties2;
+
+typedef struct VkPhysicalDeviceSparseImageFormatInfo2 {
+    VkStructureType          sType;
+    const void*              pNext;
+    VkFormat                 format;
+    VkImageType              type;
+    VkSampleCountFlagBits    samples;
+    VkImageUsageFlags        usage;
+    VkImageTiling            tiling;
+} VkPhysicalDeviceSparseImageFormatInfo2;
+
+typedef struct VkPhysicalDevicePointClippingProperties {
+    VkStructureType            sType;
+    void*                      pNext;
+    VkPointClippingBehavior    pointClippingBehavior;
+} VkPhysicalDevicePointClippingProperties;
+
+typedef struct VkInputAttachmentAspectReference {
+    deUint32              subpass;
+    deUint32              inputAttachmentIndex;
+    VkImageAspectFlags    aspectMask;
+} VkInputAttachmentAspectReference;
+
+typedef struct VkRenderPassInputAttachmentAspectCreateInfo {
+    VkStructureType                            sType;
+    const void*                                pNext;
+    deUint32                                   aspectReferenceCount;
+    const VkInputAttachmentAspectReference*    pAspectReferences;
+} VkRenderPassInputAttachmentAspectCreateInfo;
+
+typedef struct VkImageViewUsageCreateInfo {
+    VkStructureType      sType;
+    const void*          pNext;
+    VkImageUsageFlags    usage;
+} VkImageViewUsageCreateInfo;
+
+typedef struct VkPipelineTessellationDomainOriginStateCreateInfo {
+    VkStructureType               sType;
+    const void*                   pNext;
+    VkTessellationDomainOrigin    domainOrigin;
+} VkPipelineTessellationDomainOriginStateCreateInfo;
+
+typedef struct VkRenderPassMultiviewCreateInfo {
+    VkStructureType    sType;
+    const void*        pNext;
+    deUint32           subpassCount;
+    const deUint32*    pViewMasks;
+    deUint32           dependencyCount;
+    const deInt32*     pViewOffsets;
+    deUint32           correlationMaskCount;
+    const deUint32*    pCorrelationMasks;
+} VkRenderPassMultiviewCreateInfo;
+
+typedef struct VkPhysicalDeviceMultiviewFeatures {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           multiview;
+    VkBool32           multiviewGeometryShader;
+    VkBool32           multiviewTessellationShader;
+} VkPhysicalDeviceMultiviewFeatures;
+
+typedef struct VkPhysicalDeviceMultiviewProperties {
+    VkStructureType    sType;
+    void*              pNext;
+    deUint32           maxMultiviewViewCount;
+    deUint32           maxMultiviewInstanceIndex;
+} VkPhysicalDeviceMultiviewProperties;
+
+typedef struct VkPhysicalDeviceVariablePointersFeatures {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           variablePointersStorageBuffer;
+    VkBool32           variablePointers;
+} VkPhysicalDeviceVariablePointersFeatures;
+
+typedef VkPhysicalDeviceVariablePointersFeatures VkPhysicalDeviceVariablePointerFeatures;
+
+typedef struct VkPhysicalDeviceProtectedMemoryFeatures {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           protectedMemory;
+} VkPhysicalDeviceProtectedMemoryFeatures;
+
+typedef struct VkPhysicalDeviceProtectedMemoryProperties {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           protectedNoFault;
+} VkPhysicalDeviceProtectedMemoryProperties;
+
+typedef struct VkDeviceQueueInfo2 {
+    VkStructureType             sType;
+    const void*                 pNext;
+    VkDeviceQueueCreateFlags    flags;
+    deUint32                    queueFamilyIndex;
+    deUint32                    queueIndex;
+} VkDeviceQueueInfo2;
+
+typedef struct VkProtectedSubmitInfo {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkBool32           protectedSubmit;
+} VkProtectedSubmitInfo;
+
+typedef struct VkSamplerYcbcrConversionCreateInfo {
+    VkStructureType                  sType;
+    const void*                      pNext;
+    VkFormat                         format;
+    VkSamplerYcbcrModelConversion    ycbcrModel;
+    VkSamplerYcbcrRange              ycbcrRange;
+    VkComponentMapping               components;
+    VkChromaLocation                 xChromaOffset;
+    VkChromaLocation                 yChromaOffset;
+    VkFilter                         chromaFilter;
+    VkBool32                         forceExplicitReconstruction;
+} VkSamplerYcbcrConversionCreateInfo;
+
+typedef struct VkSamplerYcbcrConversionInfo {
+    VkStructureType             sType;
+    const void*                 pNext;
+    VkSamplerYcbcrConversion    conversion;
+} VkSamplerYcbcrConversionInfo;
+
+typedef struct VkBindImagePlaneMemoryInfo {
+    VkStructureType          sType;
+    const void*              pNext;
+    VkImageAspectFlagBits    planeAspect;
+} VkBindImagePlaneMemoryInfo;
+
+typedef struct VkImagePlaneMemoryRequirementsInfo {
+    VkStructureType          sType;
+    const void*              pNext;
+    VkImageAspectFlagBits    planeAspect;
+} VkImagePlaneMemoryRequirementsInfo;
+
+typedef struct VkPhysicalDeviceSamplerYcbcrConversionFeatures {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           samplerYcbcrConversion;
+} VkPhysicalDeviceSamplerYcbcrConversionFeatures;
+
+typedef struct VkSamplerYcbcrConversionImageFormatProperties {
+    VkStructureType    sType;
+    void*              pNext;
+    deUint32           combinedImageSamplerDescriptorCount;
+} VkSamplerYcbcrConversionImageFormatProperties;
+
+typedef struct VkExternalMemoryProperties {
+    VkExternalMemoryFeatureFlags       externalMemoryFeatures;
+    VkExternalMemoryHandleTypeFlags    exportFromImportedHandleTypes;
+    VkExternalMemoryHandleTypeFlags    compatibleHandleTypes;
+} VkExternalMemoryProperties;
+
+typedef struct VkPhysicalDeviceExternalImageFormatInfo {
+    VkStructureType                       sType;
+    const void*                           pNext;
+    VkExternalMemoryHandleTypeFlagBits    handleType;
+} VkPhysicalDeviceExternalImageFormatInfo;
+
+typedef struct VkExternalImageFormatProperties {
+    VkStructureType               sType;
+    void*                         pNext;
+    VkExternalMemoryProperties    externalMemoryProperties;
+} VkExternalImageFormatProperties;
+
+typedef struct VkPhysicalDeviceExternalBufferInfo {
+    VkStructureType                       sType;
+    const void*                           pNext;
+    VkBufferCreateFlags                   flags;
+    VkBufferUsageFlags                    usage;
+    VkExternalMemoryHandleTypeFlagBits    handleType;
+} VkPhysicalDeviceExternalBufferInfo;
+
+typedef struct VkExternalBufferProperties {
+    VkStructureType               sType;
+    void*                         pNext;
+    VkExternalMemoryProperties    externalMemoryProperties;
+} VkExternalBufferProperties;
+
+typedef struct VkPhysicalDeviceIDProperties {
+    VkStructureType    sType;
+    void*              pNext;
+    deUint8            deviceUUID[VK_UUID_SIZE];
+    deUint8            driverUUID[VK_UUID_SIZE];
+    deUint8            deviceLUID[VK_LUID_SIZE];
+    deUint32           deviceNodeMask;
+    VkBool32           deviceLUIDValid;
+} VkPhysicalDeviceIDProperties;
+
+typedef struct VkExternalMemoryImageCreateInfo {
+    VkStructureType                    sType;
+    const void*                        pNext;
+    VkExternalMemoryHandleTypeFlags    handleTypes;
+} VkExternalMemoryImageCreateInfo;
+
+typedef struct VkExternalMemoryBufferCreateInfo {
+    VkStructureType                    sType;
+    const void*                        pNext;
+    VkExternalMemoryHandleTypeFlags    handleTypes;
+} VkExternalMemoryBufferCreateInfo;
+
+typedef struct VkExportMemoryAllocateInfo {
+    VkStructureType                    sType;
+    const void*                        pNext;
+    VkExternalMemoryHandleTypeFlags    handleTypes;
+} VkExportMemoryAllocateInfo;
+
+typedef struct VkPhysicalDeviceExternalFenceInfo {
+    VkStructureType                      sType;
+    const void*                          pNext;
+    VkExternalFenceHandleTypeFlagBits    handleType;
+} VkPhysicalDeviceExternalFenceInfo;
+
+typedef struct VkExternalFenceProperties {
+    VkStructureType                   sType;
+    void*                             pNext;
+    VkExternalFenceHandleTypeFlags    exportFromImportedHandleTypes;
+    VkExternalFenceHandleTypeFlags    compatibleHandleTypes;
+    VkExternalFenceFeatureFlags       externalFenceFeatures;
+} VkExternalFenceProperties;
+
+typedef struct VkExportFenceCreateInfo {
+    VkStructureType                   sType;
+    const void*                       pNext;
+    VkExternalFenceHandleTypeFlags    handleTypes;
+} VkExportFenceCreateInfo;
+
+typedef struct VkExportSemaphoreCreateInfo {
+    VkStructureType                       sType;
+    const void*                           pNext;
+    VkExternalSemaphoreHandleTypeFlags    handleTypes;
+} VkExportSemaphoreCreateInfo;
+
+typedef struct VkPhysicalDeviceExternalSemaphoreInfo {
+    VkStructureType                          sType;
+    const void*                              pNext;
+    VkExternalSemaphoreHandleTypeFlagBits    handleType;
+} VkPhysicalDeviceExternalSemaphoreInfo;
+
+typedef struct VkExternalSemaphoreProperties {
+    VkStructureType                       sType;
+    void*                                 pNext;
+    VkExternalSemaphoreHandleTypeFlags    exportFromImportedHandleTypes;
+    VkExternalSemaphoreHandleTypeFlags    compatibleHandleTypes;
+    VkExternalSemaphoreFeatureFlags       externalSemaphoreFeatures;
+} VkExternalSemaphoreProperties;
+
+typedef struct VkPhysicalDeviceMaintenance3Properties {
+    VkStructureType    sType;
+    void*              pNext;
+    deUint32           maxPerSetDescriptors;
+    VkDeviceSize       maxMemoryAllocationSize;
+} VkPhysicalDeviceMaintenance3Properties;
+
+typedef struct VkDescriptorSetLayoutSupport {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           supported;
+} VkDescriptorSetLayoutSupport;
+
+typedef struct VkPhysicalDeviceShaderDrawParametersFeatures {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           shaderDrawParameters;
+} VkPhysicalDeviceShaderDrawParametersFeatures;
+
+typedef VkPhysicalDeviceShaderDrawParametersFeatures VkPhysicalDeviceShaderDrawParameterFeatures;
+
+typedef VkResult (VKAPI_PTR *PFN_vkEnumerateInstanceVersion)(deUint32* pApiVersion);
+typedef VkResult (VKAPI_PTR *PFN_vkBindBufferMemory2)(VkDevice device, deUint32 bindInfoCount, const VkBindBufferMemoryInfo* pBindInfos);
+typedef VkResult (VKAPI_PTR *PFN_vkBindImageMemory2)(VkDevice device, deUint32 bindInfoCount, const VkBindImageMemoryInfo* pBindInfos);
+typedef void (VKAPI_PTR *PFN_vkGetDeviceGroupPeerMemoryFeatures)(VkDevice device, deUint32 heapIndex, deUint32 localDeviceIndex, deUint32 remoteDeviceIndex, VkPeerMemoryFeatureFlags* pPeerMemoryFeatures);
+typedef void (VKAPI_PTR *PFN_vkCmdSetDeviceMask)(VkCommandBuffer commandBuffer, deUint32 deviceMask);
+typedef void (VKAPI_PTR *PFN_vkCmdDispatchBase)(VkCommandBuffer commandBuffer, deUint32 baseGroupX, deUint32 baseGroupY, deUint32 baseGroupZ, deUint32 groupCountX, deUint32 groupCountY, deUint32 groupCountZ);
+typedef VkResult (VKAPI_PTR *PFN_vkEnumeratePhysicalDeviceGroups)(VkInstance instance, deUint32* pPhysicalDeviceGroupCount, VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties);
+typedef void (VKAPI_PTR *PFN_vkGetImageMemoryRequirements2)(VkDevice device, const VkImageMemoryRequirementsInfo2* pInfo, VkMemoryRequirements2* pMemoryRequirements);
+typedef void (VKAPI_PTR *PFN_vkGetBufferMemoryRequirements2)(VkDevice device, const VkBufferMemoryRequirementsInfo2* pInfo, VkMemoryRequirements2* pMemoryRequirements);
+typedef void (VKAPI_PTR *PFN_vkGetImageSparseMemoryRequirements2)(VkDevice device, const VkImageSparseMemoryRequirementsInfo2* pInfo, deUint32* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2* pSparseMemoryRequirements);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceFeatures2)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures2* pFeatures);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceProperties2)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties2* pProperties);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceFormatProperties2)(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties2* pFormatProperties);
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceImageFormatProperties2)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo, VkImageFormatProperties2* pImageFormatProperties);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceQueueFamilyProperties2)(VkPhysicalDevice physicalDevice, deUint32* pQueueFamilyPropertyCount, VkQueueFamilyProperties2* pQueueFamilyProperties);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceMemoryProperties2)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties2* pMemoryProperties);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceSparseImageFormatProperties2)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo, deUint32* pPropertyCount, VkSparseImageFormatProperties2* pProperties);
+typedef void (VKAPI_PTR *PFN_vkGetDeviceQueue2)(VkDevice device, const VkDeviceQueueInfo2* pQueueInfo, VkQueue* pQueue);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateSamplerYcbcrConversion)(VkDevice device, const VkSamplerYcbcrConversionCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSamplerYcbcrConversion* pYcbcrConversion);
+typedef void (VKAPI_PTR *PFN_vkDestroySamplerYcbcrConversion)(VkDevice device, VkSamplerYcbcrConversion ycbcrConversion, const VkAllocationCallbacks* pAllocator);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalBufferProperties)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo, VkExternalBufferProperties* pExternalBufferProperties);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalFenceProperties)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo, VkExternalFenceProperties* pExternalFenceProperties);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalSemaphoreProperties)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo, VkExternalSemaphoreProperties* pExternalSemaphoreProperties);
+typedef void (VKAPI_PTR *PFN_vkGetDescriptorSetLayoutSupport)(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, VkDescriptorSetLayoutSupport* pSupport);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceVersion(
+    deUint32*                                   pApiVersion);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkBindBufferMemory2(
+    VkDevice                                    device,
+    deUint32                                    bindInfoCount,
+    const VkBindBufferMemoryInfo*               pBindInfos);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkBindImageMemory2(
+    VkDevice                                    device,
+    deUint32                                    bindInfoCount,
+    const VkBindImageMemoryInfo*                pBindInfos);
+
+VKAPI_ATTR void VKAPI_CALL vkGetDeviceGroupPeerMemoryFeatures(
+    VkDevice                                    device,
+    deUint32                                    heapIndex,
+    deUint32                                    localDeviceIndex,
+    deUint32                                    remoteDeviceIndex,
+    VkPeerMemoryFeatureFlags*                   pPeerMemoryFeatures);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetDeviceMask(
+    VkCommandBuffer                             commandBuffer,
+    deUint32                                    deviceMask);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdDispatchBase(
+    VkCommandBuffer                             commandBuffer,
+    deUint32                                    baseGroupX,
+    deUint32                                    baseGroupY,
+    deUint32                                    baseGroupZ,
+    deUint32                                    groupCountX,
+    deUint32                                    groupCountY,
+    deUint32                                    groupCountZ);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDeviceGroups(
+    VkInstance                                  instance,
+    deUint32*                                   pPhysicalDeviceGroupCount,
+    VkPhysicalDeviceGroupProperties*            pPhysicalDeviceGroupProperties);
+
+VKAPI_ATTR void VKAPI_CALL vkGetImageMemoryRequirements2(
+    VkDevice                                    device,
+    const VkImageMemoryRequirementsInfo2*       pInfo,
+    VkMemoryRequirements2*                      pMemoryRequirements);
+
+VKAPI_ATTR void VKAPI_CALL vkGetBufferMemoryRequirements2(
+    VkDevice                                    device,
+    const VkBufferMemoryRequirementsInfo2*      pInfo,
+    VkMemoryRequirements2*                      pMemoryRequirements);
+
+VKAPI_ATTR void VKAPI_CALL vkGetImageSparseMemoryRequirements2(
+    VkDevice                                    device,
+    const VkImageSparseMemoryRequirementsInfo2* pInfo,
+    deUint32*                                   pSparseMemoryRequirementCount,
+    VkSparseImageMemoryRequirements2*           pSparseMemoryRequirements);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFeatures2(
+    VkPhysicalDevice                            physicalDevice,
+    VkPhysicalDeviceFeatures2*                  pFeatures);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceProperties2(
+    VkPhysicalDevice                            physicalDevice,
+    VkPhysicalDeviceProperties2*                pProperties);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFormatProperties2(
+    VkPhysicalDevice                            physicalDevice,
+    VkFormat                                    format,
+    VkFormatProperties2*                        pFormatProperties);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceImageFormatProperties2(
+    VkPhysicalDevice                            physicalDevice,
+    const VkPhysicalDeviceImageFormatInfo2*     pImageFormatInfo,
+    VkImageFormatProperties2*                   pImageFormatProperties);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyProperties2(
+    VkPhysicalDevice                            physicalDevice,
+    deUint32*                                   pQueueFamilyPropertyCount,
+    VkQueueFamilyProperties2*                   pQueueFamilyProperties);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMemoryProperties2(
+    VkPhysicalDevice                            physicalDevice,
+    VkPhysicalDeviceMemoryProperties2*          pMemoryProperties);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceSparseImageFormatProperties2(
+    VkPhysicalDevice                            physicalDevice,
+    const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo,
+    deUint32*                                   pPropertyCount,
+    VkSparseImageFormatProperties2*             pProperties);
+
+VKAPI_ATTR void VKAPI_CALL vkGetDeviceQueue2(
+    VkDevice                                    device,
+    const VkDeviceQueueInfo2*                   pQueueInfo,
+    VkQueue*                                    pQueue);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateSamplerYcbcrConversion(
+    VkDevice                                    device,
+    const VkSamplerYcbcrConversionCreateInfo*   pCreateInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkSamplerYcbcrConversion*                   pYcbcrConversion);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroySamplerYcbcrConversion(
+    VkDevice                                    device,
+    VkSamplerYcbcrConversion                    ycbcrConversion,
+    const VkAllocationCallbacks*                pAllocator);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalBufferProperties(
+    VkPhysicalDevice                            physicalDevice,
+    const VkPhysicalDeviceExternalBufferInfo*   pExternalBufferInfo,
+    VkExternalBufferProperties*                 pExternalBufferProperties);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalFenceProperties(
+    VkPhysicalDevice                            physicalDevice,
+    const VkPhysicalDeviceExternalFenceInfo*    pExternalFenceInfo,
+    VkExternalFenceProperties*                  pExternalFenceProperties);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalSemaphoreProperties(
+    VkPhysicalDevice                            physicalDevice,
+    const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo,
+    VkExternalSemaphoreProperties*              pExternalSemaphoreProperties);
+
+VKAPI_ATTR void VKAPI_CALL vkGetDescriptorSetLayoutSupport(
+    VkDevice                                    device,
+    const VkDescriptorSetLayoutCreateInfo*      pCreateInfo,
+    VkDescriptorSetLayoutSupport*               pSupport);
+#endif
+
+
+#define VK_VERSION_1_2 1
+// Vulkan 1.2 version number
+#define VK_API_VERSION_1_2 VK_MAKE_VERSION(1, 2, 0)// Patch version should always be set to 0
+
+#define VK_MAX_DRIVER_NAME_SIZE           256
+#define VK_MAX_DRIVER_INFO_SIZE           256
+
+typedef enum VkDriverId {
+    VK_DRIVER_ID_AMD_PROPRIETARY = 1,
+    VK_DRIVER_ID_AMD_OPEN_SOURCE = 2,
+    VK_DRIVER_ID_MESA_RADV = 3,
+    VK_DRIVER_ID_NVIDIA_PROPRIETARY = 4,
+    VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS = 5,
+    VK_DRIVER_ID_INTEL_OPEN_SOURCE_MESA = 6,
+    VK_DRIVER_ID_IMAGINATION_PROPRIETARY = 7,
+    VK_DRIVER_ID_QUALCOMM_PROPRIETARY = 8,
+    VK_DRIVER_ID_ARM_PROPRIETARY = 9,
+    VK_DRIVER_ID_GOOGLE_SWIFTSHADER = 10,
+    VK_DRIVER_ID_GGP_PROPRIETARY = 11,
+    VK_DRIVER_ID_BROADCOM_PROPRIETARY = 12,
+    VK_DRIVER_ID_MESA_LLVMPIPE = 13,
+    VK_DRIVER_ID_MOLTENVK = 14,
+    VK_DRIVER_ID_MAX_ENUM = 0x7FFFFFFF
+} VkDriverId;
+
+typedef enum VkShaderFloatControlsIndependence {
+    VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY = 0,
+    VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL = 1,
+    VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE = 2,
+    VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_MAX_ENUM = 0x7FFFFFFF
+} VkShaderFloatControlsIndependence;
+
+typedef enum VkSamplerReductionMode {
+    VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE = 0,
+    VK_SAMPLER_REDUCTION_MODE_MIN = 1,
+    VK_SAMPLER_REDUCTION_MODE_MAX = 2,
+    VK_SAMPLER_REDUCTION_MODE_MAX_ENUM = 0x7FFFFFFF
+} VkSamplerReductionMode;
+
+typedef enum VkSemaphoreType {
+    VK_SEMAPHORE_TYPE_BINARY = 0,
+    VK_SEMAPHORE_TYPE_TIMELINE = 1,
+    VK_SEMAPHORE_TYPE_MAX_ENUM = 0x7FFFFFFF
+} VkSemaphoreType;
+
+typedef enum VkResolveModeFlagBits {
+    VK_RESOLVE_MODE_NONE = 0,
+    VK_RESOLVE_MODE_SAMPLE_ZERO_BIT = 0x00000001,
+    VK_RESOLVE_MODE_AVERAGE_BIT = 0x00000002,
+    VK_RESOLVE_MODE_MIN_BIT = 0x00000004,
+    VK_RESOLVE_MODE_MAX_BIT = 0x00000008,
+    VK_RESOLVE_MODE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkResolveModeFlagBits;
+typedef VkFlags VkResolveModeFlags;
+
+typedef enum VkDescriptorBindingFlagBits {
+    VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT = 0x00000001,
+    VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT = 0x00000002,
+    VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT = 0x00000004,
+    VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT = 0x00000008,
+    VK_DESCRIPTOR_BINDING_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkDescriptorBindingFlagBits;
+typedef VkFlags VkDescriptorBindingFlags;
+
+typedef enum VkSemaphoreWaitFlagBits {
+    VK_SEMAPHORE_WAIT_ANY_BIT = 0x00000001,
+    VK_SEMAPHORE_WAIT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkSemaphoreWaitFlagBits;
+typedef VkFlags VkSemaphoreWaitFlags;
+typedef struct VkPhysicalDeviceVulkan11Features {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           storageBuffer16BitAccess;
+    VkBool32           uniformAndStorageBuffer16BitAccess;
+    VkBool32           storagePushConstant16;
+    VkBool32           storageInputOutput16;
+    VkBool32           multiview;
+    VkBool32           multiviewGeometryShader;
+    VkBool32           multiviewTessellationShader;
+    VkBool32           variablePointersStorageBuffer;
+    VkBool32           variablePointers;
+    VkBool32           protectedMemory;
+    VkBool32           samplerYcbcrConversion;
+    VkBool32           shaderDrawParameters;
+} VkPhysicalDeviceVulkan11Features;
+
+typedef struct VkPhysicalDeviceVulkan11Properties {
+    VkStructureType            sType;
+    void*                      pNext;
+    deUint8                    deviceUUID[VK_UUID_SIZE];
+    deUint8                    driverUUID[VK_UUID_SIZE];
+    deUint8                    deviceLUID[VK_LUID_SIZE];
+    deUint32                   deviceNodeMask;
+    VkBool32                   deviceLUIDValid;
+    deUint32                   subgroupSize;
+    VkShaderStageFlags         subgroupSupportedStages;
+    VkSubgroupFeatureFlags     subgroupSupportedOperations;
+    VkBool32                   subgroupQuadOperationsInAllStages;
+    VkPointClippingBehavior    pointClippingBehavior;
+    deUint32                   maxMultiviewViewCount;
+    deUint32                   maxMultiviewInstanceIndex;
+    VkBool32                   protectedNoFault;
+    deUint32                   maxPerSetDescriptors;
+    VkDeviceSize               maxMemoryAllocationSize;
+} VkPhysicalDeviceVulkan11Properties;
+
+typedef struct VkPhysicalDeviceVulkan12Features {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           samplerMirrorClampToEdge;
+    VkBool32           drawIndirectCount;
+    VkBool32           storageBuffer8BitAccess;
+    VkBool32           uniformAndStorageBuffer8BitAccess;
+    VkBool32           storagePushConstant8;
+    VkBool32           shaderBufferInt64Atomics;
+    VkBool32           shaderSharedInt64Atomics;
+    VkBool32           shaderFloat16;
+    VkBool32           shaderInt8;
+    VkBool32           descriptorIndexing;
+    VkBool32           shaderInputAttachmentArrayDynamicIndexing;
+    VkBool32           shaderUniformTexelBufferArrayDynamicIndexing;
+    VkBool32           shaderStorageTexelBufferArrayDynamicIndexing;
+    VkBool32           shaderUniformBufferArrayNonUniformIndexing;
+    VkBool32           shaderSampledImageArrayNonUniformIndexing;
+    VkBool32           shaderStorageBufferArrayNonUniformIndexing;
+    VkBool32           shaderStorageImageArrayNonUniformIndexing;
+    VkBool32           shaderInputAttachmentArrayNonUniformIndexing;
+    VkBool32           shaderUniformTexelBufferArrayNonUniformIndexing;
+    VkBool32           shaderStorageTexelBufferArrayNonUniformIndexing;
+    VkBool32           descriptorBindingUniformBufferUpdateAfterBind;
+    VkBool32           descriptorBindingSampledImageUpdateAfterBind;
+    VkBool32           descriptorBindingStorageImageUpdateAfterBind;
+    VkBool32           descriptorBindingStorageBufferUpdateAfterBind;
+    VkBool32           descriptorBindingUniformTexelBufferUpdateAfterBind;
+    VkBool32           descriptorBindingStorageTexelBufferUpdateAfterBind;
+    VkBool32           descriptorBindingUpdateUnusedWhilePending;
+    VkBool32           descriptorBindingPartiallyBound;
+    VkBool32           descriptorBindingVariableDescriptorCount;
+    VkBool32           runtimeDescriptorArray;
+    VkBool32           samplerFilterMinmax;
+    VkBool32           scalarBlockLayout;
+    VkBool32           imagelessFramebuffer;
+    VkBool32           uniformBufferStandardLayout;
+    VkBool32           shaderSubgroupExtendedTypes;
+    VkBool32           separateDepthStencilLayouts;
+    VkBool32           hostQueryReset;
+    VkBool32           timelineSemaphore;
+    VkBool32           bufferDeviceAddress;
+    VkBool32           bufferDeviceAddressCaptureReplay;
+    VkBool32           bufferDeviceAddressMultiDevice;
+    VkBool32           vulkanMemoryModel;
+    VkBool32           vulkanMemoryModelDeviceScope;
+    VkBool32           vulkanMemoryModelAvailabilityVisibilityChains;
+    VkBool32           shaderOutputViewportIndex;
+    VkBool32           shaderOutputLayer;
+    VkBool32           subgroupBroadcastDynamicId;
+} VkPhysicalDeviceVulkan12Features;
+
+typedef struct VkConformanceVersion {
+    deUint8    major;
+    deUint8    minor;
+    deUint8    subminor;
+    deUint8    patch;
+} VkConformanceVersion;
+
+typedef struct VkPhysicalDeviceVulkan12Properties {
+    VkStructureType                      sType;
+    void*                                pNext;
+    VkDriverId                           driverID;
+    char                                 driverName[VK_MAX_DRIVER_NAME_SIZE];
+    char                                 driverInfo[VK_MAX_DRIVER_INFO_SIZE];
+    VkConformanceVersion                 conformanceVersion;
+    VkShaderFloatControlsIndependence    denormBehaviorIndependence;
+    VkShaderFloatControlsIndependence    roundingModeIndependence;
+    VkBool32                             shaderSignedZeroInfNanPreserveFloat16;
+    VkBool32                             shaderSignedZeroInfNanPreserveFloat32;
+    VkBool32                             shaderSignedZeroInfNanPreserveFloat64;
+    VkBool32                             shaderDenormPreserveFloat16;
+    VkBool32                             shaderDenormPreserveFloat32;
+    VkBool32                             shaderDenormPreserveFloat64;
+    VkBool32                             shaderDenormFlushToZeroFloat16;
+    VkBool32                             shaderDenormFlushToZeroFloat32;
+    VkBool32                             shaderDenormFlushToZeroFloat64;
+    VkBool32                             shaderRoundingModeRTEFloat16;
+    VkBool32                             shaderRoundingModeRTEFloat32;
+    VkBool32                             shaderRoundingModeRTEFloat64;
+    VkBool32                             shaderRoundingModeRTZFloat16;
+    VkBool32                             shaderRoundingModeRTZFloat32;
+    VkBool32                             shaderRoundingModeRTZFloat64;
+    deUint32                             maxUpdateAfterBindDescriptorsInAllPools;
+    VkBool32                             shaderUniformBufferArrayNonUniformIndexingNative;
+    VkBool32                             shaderSampledImageArrayNonUniformIndexingNative;
+    VkBool32                             shaderStorageBufferArrayNonUniformIndexingNative;
+    VkBool32                             shaderStorageImageArrayNonUniformIndexingNative;
+    VkBool32                             shaderInputAttachmentArrayNonUniformIndexingNative;
+    VkBool32                             robustBufferAccessUpdateAfterBind;
+    VkBool32                             quadDivergentImplicitLod;
+    deUint32                             maxPerStageDescriptorUpdateAfterBindSamplers;
+    deUint32                             maxPerStageDescriptorUpdateAfterBindUniformBuffers;
+    deUint32                             maxPerStageDescriptorUpdateAfterBindStorageBuffers;
+    deUint32                             maxPerStageDescriptorUpdateAfterBindSampledImages;
+    deUint32                             maxPerStageDescriptorUpdateAfterBindStorageImages;
+    deUint32                             maxPerStageDescriptorUpdateAfterBindInputAttachments;
+    deUint32                             maxPerStageUpdateAfterBindResources;
+    deUint32                             maxDescriptorSetUpdateAfterBindSamplers;
+    deUint32                             maxDescriptorSetUpdateAfterBindUniformBuffers;
+    deUint32                             maxDescriptorSetUpdateAfterBindUniformBuffersDynamic;
+    deUint32                             maxDescriptorSetUpdateAfterBindStorageBuffers;
+    deUint32                             maxDescriptorSetUpdateAfterBindStorageBuffersDynamic;
+    deUint32                             maxDescriptorSetUpdateAfterBindSampledImages;
+    deUint32                             maxDescriptorSetUpdateAfterBindStorageImages;
+    deUint32                             maxDescriptorSetUpdateAfterBindInputAttachments;
+    VkResolveModeFlags                   supportedDepthResolveModes;
+    VkResolveModeFlags                   supportedStencilResolveModes;
+    VkBool32                             independentResolveNone;
+    VkBool32                             independentResolve;
+    VkBool32                             filterMinmaxSingleComponentFormats;
+    VkBool32                             filterMinmaxImageComponentMapping;
+    deUint64                             maxTimelineSemaphoreValueDifference;
+    VkSampleCountFlags                   framebufferIntegerColorSampleCounts;
+} VkPhysicalDeviceVulkan12Properties;
+
+typedef struct VkImageFormatListCreateInfo {
+    VkStructureType    sType;
+    const void*        pNext;
+    deUint32           viewFormatCount;
+    const VkFormat*    pViewFormats;
+} VkImageFormatListCreateInfo;
+
+typedef struct VkAttachmentDescription2 {
+    VkStructureType                 sType;
+    const void*                     pNext;
+    VkAttachmentDescriptionFlags    flags;
+    VkFormat                        format;
+    VkSampleCountFlagBits           samples;
+    VkAttachmentLoadOp              loadOp;
+    VkAttachmentStoreOp             storeOp;
+    VkAttachmentLoadOp              stencilLoadOp;
+    VkAttachmentStoreOp             stencilStoreOp;
+    VkImageLayout                   initialLayout;
+    VkImageLayout                   finalLayout;
+} VkAttachmentDescription2;
+
+typedef struct VkAttachmentReference2 {
+    VkStructureType       sType;
+    const void*           pNext;
+    deUint32              attachment;
+    VkImageLayout         layout;
+    VkImageAspectFlags    aspectMask;
+} VkAttachmentReference2;
+
+typedef struct VkSubpassDescription2 {
+    VkStructureType                  sType;
+    const void*                      pNext;
+    VkSubpassDescriptionFlags        flags;
+    VkPipelineBindPoint              pipelineBindPoint;
+    deUint32                         viewMask;
+    deUint32                         inputAttachmentCount;
+    const VkAttachmentReference2*    pInputAttachments;
+    deUint32                         colorAttachmentCount;
+    const VkAttachmentReference2*    pColorAttachments;
+    const VkAttachmentReference2*    pResolveAttachments;
+    const VkAttachmentReference2*    pDepthStencilAttachment;
+    deUint32                         preserveAttachmentCount;
+    const deUint32*                  pPreserveAttachments;
+} VkSubpassDescription2;
+
+typedef struct VkSubpassDependency2 {
+    VkStructureType         sType;
+    const void*             pNext;
+    deUint32                srcSubpass;
+    deUint32                dstSubpass;
+    VkPipelineStageFlags    srcStageMask;
+    VkPipelineStageFlags    dstStageMask;
+    VkAccessFlags           srcAccessMask;
+    VkAccessFlags           dstAccessMask;
+    VkDependencyFlags       dependencyFlags;
+    deInt32                 viewOffset;
+} VkSubpassDependency2;
+
+typedef struct VkRenderPassCreateInfo2 {
+    VkStructureType                    sType;
+    const void*                        pNext;
+    VkRenderPassCreateFlags            flags;
+    deUint32                           attachmentCount;
+    const VkAttachmentDescription2*    pAttachments;
+    deUint32                           subpassCount;
+    const VkSubpassDescription2*       pSubpasses;
+    deUint32                           dependencyCount;
+    const VkSubpassDependency2*        pDependencies;
+    deUint32                           correlatedViewMaskCount;
+    const deUint32*                    pCorrelatedViewMasks;
+} VkRenderPassCreateInfo2;
+
+typedef struct VkSubpassBeginInfo {
+    VkStructureType      sType;
+    const void*          pNext;
+    VkSubpassContents    contents;
+} VkSubpassBeginInfo;
+
+typedef struct VkSubpassEndInfo {
+    VkStructureType    sType;
+    const void*        pNext;
+} VkSubpassEndInfo;
+
+typedef struct VkPhysicalDevice8BitStorageFeatures {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           storageBuffer8BitAccess;
+    VkBool32           uniformAndStorageBuffer8BitAccess;
+    VkBool32           storagePushConstant8;
+} VkPhysicalDevice8BitStorageFeatures;
+
+typedef struct VkPhysicalDeviceDriverProperties {
+    VkStructureType         sType;
+    void*                   pNext;
+    VkDriverId              driverID;
+    char                    driverName[VK_MAX_DRIVER_NAME_SIZE];
+    char                    driverInfo[VK_MAX_DRIVER_INFO_SIZE];
+    VkConformanceVersion    conformanceVersion;
+} VkPhysicalDeviceDriverProperties;
+
+typedef struct VkPhysicalDeviceShaderAtomicInt64Features {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           shaderBufferInt64Atomics;
+    VkBool32           shaderSharedInt64Atomics;
+} VkPhysicalDeviceShaderAtomicInt64Features;
+
+typedef struct VkPhysicalDeviceShaderFloat16Int8Features {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           shaderFloat16;
+    VkBool32           shaderInt8;
+} VkPhysicalDeviceShaderFloat16Int8Features;
+
+typedef struct VkPhysicalDeviceFloatControlsProperties {
+    VkStructureType                      sType;
+    void*                                pNext;
+    VkShaderFloatControlsIndependence    denormBehaviorIndependence;
+    VkShaderFloatControlsIndependence    roundingModeIndependence;
+    VkBool32                             shaderSignedZeroInfNanPreserveFloat16;
+    VkBool32                             shaderSignedZeroInfNanPreserveFloat32;
+    VkBool32                             shaderSignedZeroInfNanPreserveFloat64;
+    VkBool32                             shaderDenormPreserveFloat16;
+    VkBool32                             shaderDenormPreserveFloat32;
+    VkBool32                             shaderDenormPreserveFloat64;
+    VkBool32                             shaderDenormFlushToZeroFloat16;
+    VkBool32                             shaderDenormFlushToZeroFloat32;
+    VkBool32                             shaderDenormFlushToZeroFloat64;
+    VkBool32                             shaderRoundingModeRTEFloat16;
+    VkBool32                             shaderRoundingModeRTEFloat32;
+    VkBool32                             shaderRoundingModeRTEFloat64;
+    VkBool32                             shaderRoundingModeRTZFloat16;
+    VkBool32                             shaderRoundingModeRTZFloat32;
+    VkBool32                             shaderRoundingModeRTZFloat64;
+} VkPhysicalDeviceFloatControlsProperties;
+
+typedef struct VkDescriptorSetLayoutBindingFlagsCreateInfo {
+    VkStructureType                    sType;
+    const void*                        pNext;
+    deUint32                           bindingCount;
+    const VkDescriptorBindingFlags*    pBindingFlags;
+} VkDescriptorSetLayoutBindingFlagsCreateInfo;
+
+typedef struct VkPhysicalDeviceDescriptorIndexingFeatures {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           shaderInputAttachmentArrayDynamicIndexing;
+    VkBool32           shaderUniformTexelBufferArrayDynamicIndexing;
+    VkBool32           shaderStorageTexelBufferArrayDynamicIndexing;
+    VkBool32           shaderUniformBufferArrayNonUniformIndexing;
+    VkBool32           shaderSampledImageArrayNonUniformIndexing;
+    VkBool32           shaderStorageBufferArrayNonUniformIndexing;
+    VkBool32           shaderStorageImageArrayNonUniformIndexing;
+    VkBool32           shaderInputAttachmentArrayNonUniformIndexing;
+    VkBool32           shaderUniformTexelBufferArrayNonUniformIndexing;
+    VkBool32           shaderStorageTexelBufferArrayNonUniformIndexing;
+    VkBool32           descriptorBindingUniformBufferUpdateAfterBind;
+    VkBool32           descriptorBindingSampledImageUpdateAfterBind;
+    VkBool32           descriptorBindingStorageImageUpdateAfterBind;
+    VkBool32           descriptorBindingStorageBufferUpdateAfterBind;
+    VkBool32           descriptorBindingUniformTexelBufferUpdateAfterBind;
+    VkBool32           descriptorBindingStorageTexelBufferUpdateAfterBind;
+    VkBool32           descriptorBindingUpdateUnusedWhilePending;
+    VkBool32           descriptorBindingPartiallyBound;
+    VkBool32           descriptorBindingVariableDescriptorCount;
+    VkBool32           runtimeDescriptorArray;
+} VkPhysicalDeviceDescriptorIndexingFeatures;
+
+typedef struct VkPhysicalDeviceDescriptorIndexingProperties {
+    VkStructureType    sType;
+    void*              pNext;
+    deUint32           maxUpdateAfterBindDescriptorsInAllPools;
+    VkBool32           shaderUniformBufferArrayNonUniformIndexingNative;
+    VkBool32           shaderSampledImageArrayNonUniformIndexingNative;
+    VkBool32           shaderStorageBufferArrayNonUniformIndexingNative;
+    VkBool32           shaderStorageImageArrayNonUniformIndexingNative;
+    VkBool32           shaderInputAttachmentArrayNonUniformIndexingNative;
+    VkBool32           robustBufferAccessUpdateAfterBind;
+    VkBool32           quadDivergentImplicitLod;
+    deUint32           maxPerStageDescriptorUpdateAfterBindSamplers;
+    deUint32           maxPerStageDescriptorUpdateAfterBindUniformBuffers;
+    deUint32           maxPerStageDescriptorUpdateAfterBindStorageBuffers;
+    deUint32           maxPerStageDescriptorUpdateAfterBindSampledImages;
+    deUint32           maxPerStageDescriptorUpdateAfterBindStorageImages;
+    deUint32           maxPerStageDescriptorUpdateAfterBindInputAttachments;
+    deUint32           maxPerStageUpdateAfterBindResources;
+    deUint32           maxDescriptorSetUpdateAfterBindSamplers;
+    deUint32           maxDescriptorSetUpdateAfterBindUniformBuffers;
+    deUint32           maxDescriptorSetUpdateAfterBindUniformBuffersDynamic;
+    deUint32           maxDescriptorSetUpdateAfterBindStorageBuffers;
+    deUint32           maxDescriptorSetUpdateAfterBindStorageBuffersDynamic;
+    deUint32           maxDescriptorSetUpdateAfterBindSampledImages;
+    deUint32           maxDescriptorSetUpdateAfterBindStorageImages;
+    deUint32           maxDescriptorSetUpdateAfterBindInputAttachments;
+} VkPhysicalDeviceDescriptorIndexingProperties;
+
+typedef struct VkDescriptorSetVariableDescriptorCountAllocateInfo {
+    VkStructureType    sType;
+    const void*        pNext;
+    deUint32           descriptorSetCount;
+    const deUint32*    pDescriptorCounts;
+} VkDescriptorSetVariableDescriptorCountAllocateInfo;
+
+typedef struct VkDescriptorSetVariableDescriptorCountLayoutSupport {
+    VkStructureType    sType;
+    void*              pNext;
+    deUint32           maxVariableDescriptorCount;
+} VkDescriptorSetVariableDescriptorCountLayoutSupport;
+
+typedef struct VkSubpassDescriptionDepthStencilResolve {
+    VkStructureType                  sType;
+    const void*                      pNext;
+    VkResolveModeFlagBits            depthResolveMode;
+    VkResolveModeFlagBits            stencilResolveMode;
+    const VkAttachmentReference2*    pDepthStencilResolveAttachment;
+} VkSubpassDescriptionDepthStencilResolve;
+
+typedef struct VkPhysicalDeviceDepthStencilResolveProperties {
+    VkStructureType       sType;
+    void*                 pNext;
+    VkResolveModeFlags    supportedDepthResolveModes;
+    VkResolveModeFlags    supportedStencilResolveModes;
+    VkBool32              independentResolveNone;
+    VkBool32              independentResolve;
+} VkPhysicalDeviceDepthStencilResolveProperties;
+
+typedef struct VkPhysicalDeviceScalarBlockLayoutFeatures {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           scalarBlockLayout;
+} VkPhysicalDeviceScalarBlockLayoutFeatures;
+
+typedef struct VkImageStencilUsageCreateInfo {
+    VkStructureType      sType;
+    const void*          pNext;
+    VkImageUsageFlags    stencilUsage;
+} VkImageStencilUsageCreateInfo;
+
+typedef struct VkSamplerReductionModeCreateInfo {
+    VkStructureType           sType;
+    const void*               pNext;
+    VkSamplerReductionMode    reductionMode;
+} VkSamplerReductionModeCreateInfo;
+
+typedef struct VkPhysicalDeviceSamplerFilterMinmaxProperties {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           filterMinmaxSingleComponentFormats;
+    VkBool32           filterMinmaxImageComponentMapping;
+} VkPhysicalDeviceSamplerFilterMinmaxProperties;
+
+typedef struct VkPhysicalDeviceVulkanMemoryModelFeatures {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           vulkanMemoryModel;
+    VkBool32           vulkanMemoryModelDeviceScope;
+    VkBool32           vulkanMemoryModelAvailabilityVisibilityChains;
+} VkPhysicalDeviceVulkanMemoryModelFeatures;
+
+typedef struct VkPhysicalDeviceImagelessFramebufferFeatures {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           imagelessFramebuffer;
+} VkPhysicalDeviceImagelessFramebufferFeatures;
+
+typedef struct VkFramebufferAttachmentImageInfo {
+    VkStructureType       sType;
+    const void*           pNext;
+    VkImageCreateFlags    flags;
+    VkImageUsageFlags     usage;
+    deUint32              width;
+    deUint32              height;
+    deUint32              layerCount;
+    deUint32              viewFormatCount;
+    const VkFormat*       pViewFormats;
+} VkFramebufferAttachmentImageInfo;
+
+typedef struct VkFramebufferAttachmentsCreateInfo {
+    VkStructureType                            sType;
+    const void*                                pNext;
+    deUint32                                   attachmentImageInfoCount;
+    const VkFramebufferAttachmentImageInfo*    pAttachmentImageInfos;
+} VkFramebufferAttachmentsCreateInfo;
+
+typedef struct VkRenderPassAttachmentBeginInfo {
+    VkStructureType       sType;
+    const void*           pNext;
+    deUint32              attachmentCount;
+    const VkImageView*    pAttachments;
+} VkRenderPassAttachmentBeginInfo;
+
+typedef struct VkPhysicalDeviceUniformBufferStandardLayoutFeatures {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           uniformBufferStandardLayout;
+} VkPhysicalDeviceUniformBufferStandardLayoutFeatures;
+
+typedef struct VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           shaderSubgroupExtendedTypes;
+} VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures;
+
+typedef struct VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           separateDepthStencilLayouts;
+} VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures;
+
+typedef struct VkAttachmentReferenceStencilLayout {
+    VkStructureType    sType;
+    void*              pNext;
+    VkImageLayout      stencilLayout;
+} VkAttachmentReferenceStencilLayout;
+
+typedef struct VkAttachmentDescriptionStencilLayout {
+    VkStructureType    sType;
+    void*              pNext;
+    VkImageLayout      stencilInitialLayout;
+    VkImageLayout      stencilFinalLayout;
+} VkAttachmentDescriptionStencilLayout;
+
+typedef struct VkPhysicalDeviceHostQueryResetFeatures {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           hostQueryReset;
+} VkPhysicalDeviceHostQueryResetFeatures;
+
+typedef struct VkPhysicalDeviceTimelineSemaphoreFeatures {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           timelineSemaphore;
+} VkPhysicalDeviceTimelineSemaphoreFeatures;
+
+typedef struct VkPhysicalDeviceTimelineSemaphoreProperties {
+    VkStructureType    sType;
+    void*              pNext;
+    deUint64           maxTimelineSemaphoreValueDifference;
+} VkPhysicalDeviceTimelineSemaphoreProperties;
+
+typedef struct VkSemaphoreTypeCreateInfo {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkSemaphoreType    semaphoreType;
+    deUint64           initialValue;
+} VkSemaphoreTypeCreateInfo;
+
+typedef struct VkTimelineSemaphoreSubmitInfo {
+    VkStructureType    sType;
+    const void*        pNext;
+    deUint32           waitSemaphoreValueCount;
+    const deUint64*    pWaitSemaphoreValues;
+    deUint32           signalSemaphoreValueCount;
+    const deUint64*    pSignalSemaphoreValues;
+} VkTimelineSemaphoreSubmitInfo;
+
+typedef struct VkSemaphoreWaitInfo {
+    VkStructureType         sType;
+    const void*             pNext;
+    VkSemaphoreWaitFlags    flags;
+    deUint32                semaphoreCount;
+    const VkSemaphore*      pSemaphores;
+    const deUint64*         pValues;
+} VkSemaphoreWaitInfo;
+
+typedef struct VkSemaphoreSignalInfo {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkSemaphore        semaphore;
+    deUint64           value;
+} VkSemaphoreSignalInfo;
+
+typedef struct VkPhysicalDeviceBufferDeviceAddressFeatures {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           bufferDeviceAddress;
+    VkBool32           bufferDeviceAddressCaptureReplay;
+    VkBool32           bufferDeviceAddressMultiDevice;
+} VkPhysicalDeviceBufferDeviceAddressFeatures;
+
+typedef struct VkBufferDeviceAddressInfo {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkBuffer           buffer;
+} VkBufferDeviceAddressInfo;
+
+typedef struct VkBufferOpaqueCaptureAddressCreateInfo {
+    VkStructureType    sType;
+    const void*        pNext;
+    deUint64           opaqueCaptureAddress;
+} VkBufferOpaqueCaptureAddressCreateInfo;
+
+typedef struct VkMemoryOpaqueCaptureAddressAllocateInfo {
+    VkStructureType    sType;
+    const void*        pNext;
+    deUint64           opaqueCaptureAddress;
+} VkMemoryOpaqueCaptureAddressAllocateInfo;
+
+typedef struct VkDeviceMemoryOpaqueCaptureAddressInfo {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkDeviceMemory     memory;
+} VkDeviceMemoryOpaqueCaptureAddressInfo;
+
+typedef void (VKAPI_PTR *PFN_vkCmdDrawIndirectCount)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, deUint32 maxDrawCount, deUint32 stride);
+typedef void (VKAPI_PTR *PFN_vkCmdDrawIndexedIndirectCount)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, deUint32 maxDrawCount, deUint32 stride);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateRenderPass2)(VkDevice device, const VkRenderPassCreateInfo2* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass);
+typedef void (VKAPI_PTR *PFN_vkCmdBeginRenderPass2)(VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo*      pRenderPassBegin, const VkSubpassBeginInfo*      pSubpassBeginInfo);
+typedef void (VKAPI_PTR *PFN_vkCmdNextSubpass2)(VkCommandBuffer commandBuffer, const VkSubpassBeginInfo*      pSubpassBeginInfo, const VkSubpassEndInfo*        pSubpassEndInfo);
+typedef void (VKAPI_PTR *PFN_vkCmdEndRenderPass2)(VkCommandBuffer commandBuffer, const VkSubpassEndInfo*        pSubpassEndInfo);
+typedef void (VKAPI_PTR *PFN_vkResetQueryPool)(VkDevice device, VkQueryPool queryPool, deUint32 firstQuery, deUint32 queryCount);
+typedef VkResult (VKAPI_PTR *PFN_vkGetSemaphoreCounterValue)(VkDevice device, VkSemaphore semaphore, deUint64* pValue);
+typedef VkResult (VKAPI_PTR *PFN_vkWaitSemaphores)(VkDevice device, const VkSemaphoreWaitInfo* pWaitInfo, deUint64 timeout);
+typedef VkResult (VKAPI_PTR *PFN_vkSignalSemaphore)(VkDevice device, const VkSemaphoreSignalInfo* pSignalInfo);
+typedef VkDeviceAddress (VKAPI_PTR *PFN_vkGetBufferDeviceAddress)(VkDevice device, const VkBufferDeviceAddressInfo* pInfo);
+typedef deUint64 (VKAPI_PTR *PFN_vkGetBufferOpaqueCaptureAddress)(VkDevice device, const VkBufferDeviceAddressInfo* pInfo);
+typedef deUint64 (VKAPI_PTR *PFN_vkGetDeviceMemoryOpaqueCaptureAddress)(VkDevice device, const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirectCount(
+    VkCommandBuffer                             commandBuffer,
+    VkBuffer                                    buffer,
+    VkDeviceSize                                offset,
+    VkBuffer                                    countBuffer,
+    VkDeviceSize                                countBufferOffset,
+    deUint32                                    maxDrawCount,
+    deUint32                                    stride);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirectCount(
+    VkCommandBuffer                             commandBuffer,
+    VkBuffer                                    buffer,
+    VkDeviceSize                                offset,
+    VkBuffer                                    countBuffer,
+    VkDeviceSize                                countBufferOffset,
+    deUint32                                    maxDrawCount,
+    deUint32                                    stride);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass2(
+    VkDevice                                    device,
+    const VkRenderPassCreateInfo2*              pCreateInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkRenderPass*                               pRenderPass);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderPass2(
+    VkCommandBuffer                             commandBuffer,
+    const VkRenderPassBeginInfo*                pRenderPassBegin,
+    const VkSubpassBeginInfo*                   pSubpassBeginInfo);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdNextSubpass2(
+    VkCommandBuffer                             commandBuffer,
+    const VkSubpassBeginInfo*                   pSubpassBeginInfo,
+    const VkSubpassEndInfo*                     pSubpassEndInfo);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderPass2(
+    VkCommandBuffer                             commandBuffer,
+    const VkSubpassEndInfo*                     pSubpassEndInfo);
+
+VKAPI_ATTR void VKAPI_CALL vkResetQueryPool(
+    VkDevice                                    device,
+    VkQueryPool                                 queryPool,
+    deUint32                                    firstQuery,
+    deUint32                                    queryCount);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreCounterValue(
+    VkDevice                                    device,
+    VkSemaphore                                 semaphore,
+    deUint64*                                   pValue);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkWaitSemaphores(
+    VkDevice                                    device,
+    const VkSemaphoreWaitInfo*                  pWaitInfo,
+    deUint64                                    timeout);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkSignalSemaphore(
+    VkDevice                                    device,
+    const VkSemaphoreSignalInfo*                pSignalInfo);
+
+VKAPI_ATTR VkDeviceAddress VKAPI_CALL vkGetBufferDeviceAddress(
+    VkDevice                                    device,
+    const VkBufferDeviceAddressInfo*            pInfo);
+
+VKAPI_ATTR deUint64 VKAPI_CALL vkGetBufferOpaqueCaptureAddress(
+    VkDevice                                    device,
+    const VkBufferDeviceAddressInfo*            pInfo);
+
+VKAPI_ATTR deUint64 VKAPI_CALL vkGetDeviceMemoryOpaqueCaptureAddress(
+    VkDevice                                    device,
+    const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo);
+#endif
+
+
+#define VK_KHR_surface 1
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSurfaceKHR)
+#define VK_KHR_SURFACE_SPEC_VERSION       25
+#define VK_KHR_SURFACE_EXTENSION_NAME     "VK_KHR_surface"
+
+typedef enum VkPresentModeKHR {
+    VK_PRESENT_MODE_IMMEDIATE_KHR = 0,
+    VK_PRESENT_MODE_MAILBOX_KHR = 1,
+    VK_PRESENT_MODE_FIFO_KHR = 2,
+    VK_PRESENT_MODE_FIFO_RELAXED_KHR = 3,
+    VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR = 1000111000,
+    VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR = 1000111001,
+    VK_PRESENT_MODE_MAX_ENUM_KHR = 0x7FFFFFFF
+} VkPresentModeKHR;
+
+typedef enum VkColorSpaceKHR {
+    VK_COLOR_SPACE_SRGB_NONLINEAR_KHR = 0,
+    VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT = 1000104001,
+    VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT = 1000104002,
+    VK_COLOR_SPACE_DISPLAY_P3_LINEAR_EXT = 1000104003,
+    VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT = 1000104004,
+    VK_COLOR_SPACE_BT709_LINEAR_EXT = 1000104005,
+    VK_COLOR_SPACE_BT709_NONLINEAR_EXT = 1000104006,
+    VK_COLOR_SPACE_BT2020_LINEAR_EXT = 1000104007,
+    VK_COLOR_SPACE_HDR10_ST2084_EXT = 1000104008,
+    VK_COLOR_SPACE_DOLBYVISION_EXT = 1000104009,
+    VK_COLOR_SPACE_HDR10_HLG_EXT = 1000104010,
+    VK_COLOR_SPACE_ADOBERGB_LINEAR_EXT = 1000104011,
+    VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT = 1000104012,
+    VK_COLOR_SPACE_PASS_THROUGH_EXT = 1000104013,
+    VK_COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT = 1000104014,
+    VK_COLORSPACE_SRGB_NONLINEAR_KHR = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR,
+    VK_COLOR_SPACE_DCI_P3_LINEAR_EXT = VK_COLOR_SPACE_DISPLAY_P3_LINEAR_EXT,
+    VK_COLOR_SPACE_MAX_ENUM_KHR = 0x7FFFFFFF
+} VkColorSpaceKHR;
+
+typedef enum VkSurfaceTransformFlagBitsKHR {
+    VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR = 0x00000001,
+    VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR = 0x00000002,
+    VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR = 0x00000004,
+    VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR = 0x00000008,
+    VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR = 0x00000010,
+    VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR = 0x00000020,
+    VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR = 0x00000040,
+    VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR = 0x00000080,
+    VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR = 0x00000100,
+    VK_SURFACE_TRANSFORM_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
+} VkSurfaceTransformFlagBitsKHR;
+
+typedef enum VkCompositeAlphaFlagBitsKHR {
+    VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR = 0x00000001,
+    VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR = 0x00000002,
+    VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR = 0x00000004,
+    VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR = 0x00000008,
+    VK_COMPOSITE_ALPHA_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
+} VkCompositeAlphaFlagBitsKHR;
+typedef VkFlags VkCompositeAlphaFlagsKHR;
+typedef VkFlags VkSurfaceTransformFlagsKHR;
+typedef struct VkSurfaceCapabilitiesKHR {
+    deUint32                         minImageCount;
+    deUint32                         maxImageCount;
+    VkExtent2D                       currentExtent;
+    VkExtent2D                       minImageExtent;
+    VkExtent2D                       maxImageExtent;
+    deUint32                         maxImageArrayLayers;
+    VkSurfaceTransformFlagsKHR       supportedTransforms;
+    VkSurfaceTransformFlagBitsKHR    currentTransform;
+    VkCompositeAlphaFlagsKHR         supportedCompositeAlpha;
+    VkImageUsageFlags                supportedUsageFlags;
+} VkSurfaceCapabilitiesKHR;
+
+typedef struct VkSurfaceFormatKHR {
+    VkFormat           format;
+    VkColorSpaceKHR    colorSpace;
+} VkSurfaceFormatKHR;
+
+typedef void (VKAPI_PTR *PFN_vkDestroySurfaceKHR)(VkInstance instance, VkSurfaceKHR surface, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceSupportKHR)(VkPhysicalDevice physicalDevice, deUint32 queueFamilyIndex, VkSurfaceKHR surface, VkBool32* pSupported);
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, VkSurfaceCapabilitiesKHR* pSurfaceCapabilities);
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceFormatsKHR)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, deUint32* pSurfaceFormatCount, VkSurfaceFormatKHR* pSurfaceFormats);
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfacePresentModesKHR)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, deUint32* pPresentModeCount, VkPresentModeKHR* pPresentModes);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkDestroySurfaceKHR(
+    VkInstance                                  instance,
+    VkSurfaceKHR                                surface,
+    const VkAllocationCallbacks*                pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceSupportKHR(
+    VkPhysicalDevice                            physicalDevice,
+    deUint32                                    queueFamilyIndex,
+    VkSurfaceKHR                                surface,
+    VkBool32*                                   pSupported);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceCapabilitiesKHR(
+    VkPhysicalDevice                            physicalDevice,
+    VkSurfaceKHR                                surface,
+    VkSurfaceCapabilitiesKHR*                   pSurfaceCapabilities);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceFormatsKHR(
+    VkPhysicalDevice                            physicalDevice,
+    VkSurfaceKHR                                surface,
+    deUint32*                                   pSurfaceFormatCount,
+    VkSurfaceFormatKHR*                         pSurfaceFormats);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfacePresentModesKHR(
+    VkPhysicalDevice                            physicalDevice,
+    VkSurfaceKHR                                surface,
+    deUint32*                                   pPresentModeCount,
+    VkPresentModeKHR*                           pPresentModes);
+#endif
+
+
+#define VK_KHR_swapchain 1
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSwapchainKHR)
+#define VK_KHR_SWAPCHAIN_SPEC_VERSION     70
+#define VK_KHR_SWAPCHAIN_EXTENSION_NAME   "VK_KHR_swapchain"
+
+typedef enum VkSwapchainCreateFlagBitsKHR {
+    VK_SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR = 0x00000001,
+    VK_SWAPCHAIN_CREATE_PROTECTED_BIT_KHR = 0x00000002,
+    VK_SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR = 0x00000004,
+    VK_SWAPCHAIN_CREATE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
+} VkSwapchainCreateFlagBitsKHR;
+typedef VkFlags VkSwapchainCreateFlagsKHR;
+
+typedef enum VkDeviceGroupPresentModeFlagBitsKHR {
+    VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR = 0x00000001,
+    VK_DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHR = 0x00000002,
+    VK_DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR = 0x00000004,
+    VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR = 0x00000008,
+    VK_DEVICE_GROUP_PRESENT_MODE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
+} VkDeviceGroupPresentModeFlagBitsKHR;
+typedef VkFlags VkDeviceGroupPresentModeFlagsKHR;
+typedef struct VkSwapchainCreateInfoKHR {
+    VkStructureType                  sType;
+    const void*                      pNext;
+    VkSwapchainCreateFlagsKHR        flags;
+    VkSurfaceKHR                     surface;
+    deUint32                         minImageCount;
+    VkFormat                         imageFormat;
+    VkColorSpaceKHR                  imageColorSpace;
+    VkExtent2D                       imageExtent;
+    deUint32                         imageArrayLayers;
+    VkImageUsageFlags                imageUsage;
+    VkSharingMode                    imageSharingMode;
+    deUint32                         queueFamilyIndexCount;
+    const deUint32*                  pQueueFamilyIndices;
+    VkSurfaceTransformFlagBitsKHR    preTransform;
+    VkCompositeAlphaFlagBitsKHR      compositeAlpha;
+    VkPresentModeKHR                 presentMode;
+    VkBool32                         clipped;
+    VkSwapchainKHR                   oldSwapchain;
+} VkSwapchainCreateInfoKHR;
+
+typedef struct VkPresentInfoKHR {
+    VkStructureType          sType;
+    const void*              pNext;
+    deUint32                 waitSemaphoreCount;
+    const VkSemaphore*       pWaitSemaphores;
+    deUint32                 swapchainCount;
+    const VkSwapchainKHR*    pSwapchains;
+    const deUint32*          pImageIndices;
+    VkResult*                pResults;
+} VkPresentInfoKHR;
+
+typedef struct VkImageSwapchainCreateInfoKHR {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkSwapchainKHR     swapchain;
+} VkImageSwapchainCreateInfoKHR;
+
+typedef struct VkBindImageMemorySwapchainInfoKHR {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkSwapchainKHR     swapchain;
+    deUint32           imageIndex;
+} VkBindImageMemorySwapchainInfoKHR;
+
+typedef struct VkAcquireNextImageInfoKHR {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkSwapchainKHR     swapchain;
+    deUint64           timeout;
+    VkSemaphore        semaphore;
+    VkFence            fence;
+    deUint32           deviceMask;
+} VkAcquireNextImageInfoKHR;
+
+typedef struct VkDeviceGroupPresentCapabilitiesKHR {
+    VkStructureType                     sType;
+    const void*                         pNext;
+    deUint32                            presentMask[VK_MAX_DEVICE_GROUP_SIZE];
+    VkDeviceGroupPresentModeFlagsKHR    modes;
+} VkDeviceGroupPresentCapabilitiesKHR;
+
+typedef struct VkDeviceGroupPresentInfoKHR {
+    VkStructureType                        sType;
+    const void*                            pNext;
+    deUint32                               swapchainCount;
+    const deUint32*                        pDeviceMasks;
+    VkDeviceGroupPresentModeFlagBitsKHR    mode;
+} VkDeviceGroupPresentInfoKHR;
+
+typedef struct VkDeviceGroupSwapchainCreateInfoKHR {
+    VkStructureType                     sType;
+    const void*                         pNext;
+    VkDeviceGroupPresentModeFlagsKHR    modes;
+} VkDeviceGroupSwapchainCreateInfoKHR;
+
+typedef VkResult (VKAPI_PTR *PFN_vkCreateSwapchainKHR)(VkDevice device, const VkSwapchainCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSwapchainKHR* pSwapchain);
+typedef VkResult (VKAPI_PTR *PFN_vkGetSwapchainImagesKHR)(VkDevice device, VkSwapchainKHR swapchain, deUint32* pSwapchainImageCount, VkImage* pSwapchainImages);
+typedef VkResult (VKAPI_PTR *PFN_vkAcquireNextImageKHR)(VkDevice device, VkSwapchainKHR swapchain, deUint64 timeout, VkSemaphore semaphore, VkFence fence, deUint32* pImageIndex);
+typedef VkResult (VKAPI_PTR *PFN_vkQueuePresentKHR)(VkQueue queue, const VkPresentInfoKHR* pPresentInfo);
+typedef VkResult (VKAPI_PTR *PFN_vkGetDeviceGroupPresentCapabilitiesKHR)(VkDevice device, VkDeviceGroupPresentCapabilitiesKHR* pDeviceGroupPresentCapabilities);
+typedef VkResult (VKAPI_PTR *PFN_vkGetDeviceGroupSurfacePresentModesKHR)(VkDevice device, VkSurfaceKHR surface, VkDeviceGroupPresentModeFlagsKHR* pModes);
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDevicePresentRectanglesKHR)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, deUint32* pRectCount, VkRect2D* pRects);
+typedef VkResult (VKAPI_PTR *PFN_vkAcquireNextImage2KHR)(VkDevice device, const VkAcquireNextImageInfoKHR* pAcquireInfo, deUint32* pImageIndex);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateSwapchainKHR(
+    VkDevice                                    device,
+    const VkSwapchainCreateInfoKHR*             pCreateInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkSwapchainKHR*                             pSwapchain);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainImagesKHR(
+    VkDevice                                    device,
+    VkSwapchainKHR                              swapchain,
+    deUint32*                                   pSwapchainImageCount,
+    VkImage*                                    pSwapchainImages);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkAcquireNextImageKHR(
+    VkDevice                                    device,
+    VkSwapchainKHR                              swapchain,
+    deUint64                                    timeout,
+    VkSemaphore                                 semaphore,
+    VkFence                                     fence,
+    deUint32*                                   pImageIndex);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkQueuePresentKHR(
+    VkQueue                                     queue,
+    const VkPresentInfoKHR*                     pPresentInfo);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceGroupPresentCapabilitiesKHR(
+    VkDevice                                    device,
+    VkDeviceGroupPresentCapabilitiesKHR*        pDeviceGroupPresentCapabilities);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceGroupSurfacePresentModesKHR(
+    VkDevice                                    device,
+    VkSurfaceKHR                                surface,
+    VkDeviceGroupPresentModeFlagsKHR*           pModes);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDevicePresentRectanglesKHR(
+    VkPhysicalDevice                            physicalDevice,
+    VkSurfaceKHR                                surface,
+    deUint32*                                   pRectCount,
+    VkRect2D*                                   pRects);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkAcquireNextImage2KHR(
+    VkDevice                                    device,
+    const VkAcquireNextImageInfoKHR*            pAcquireInfo,
+    deUint32*                                   pImageIndex);
+#endif
+
+
+#define VK_KHR_display 1
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDisplayKHR)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDisplayModeKHR)
+#define VK_KHR_DISPLAY_SPEC_VERSION       23
+#define VK_KHR_DISPLAY_EXTENSION_NAME     "VK_KHR_display"
+typedef VkFlags VkDisplayModeCreateFlagsKHR;
+
+typedef enum VkDisplayPlaneAlphaFlagBitsKHR {
+    VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR = 0x00000001,
+    VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR = 0x00000002,
+    VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR = 0x00000004,
+    VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR = 0x00000008,
+    VK_DISPLAY_PLANE_ALPHA_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
+} VkDisplayPlaneAlphaFlagBitsKHR;
+typedef VkFlags VkDisplayPlaneAlphaFlagsKHR;
+typedef VkFlags VkDisplaySurfaceCreateFlagsKHR;
+typedef struct VkDisplayModeParametersKHR {
+    VkExtent2D    visibleRegion;
+    deUint32      refreshRate;
+} VkDisplayModeParametersKHR;
+
+typedef struct VkDisplayModeCreateInfoKHR {
+    VkStructureType                sType;
+    const void*                    pNext;
+    VkDisplayModeCreateFlagsKHR    flags;
+    VkDisplayModeParametersKHR     parameters;
+} VkDisplayModeCreateInfoKHR;
+
+typedef struct VkDisplayModePropertiesKHR {
+    VkDisplayModeKHR              displayMode;
+    VkDisplayModeParametersKHR    parameters;
+} VkDisplayModePropertiesKHR;
+
+typedef struct VkDisplayPlaneCapabilitiesKHR {
+    VkDisplayPlaneAlphaFlagsKHR    supportedAlpha;
+    VkOffset2D                     minSrcPosition;
+    VkOffset2D                     maxSrcPosition;
+    VkExtent2D                     minSrcExtent;
+    VkExtent2D                     maxSrcExtent;
+    VkOffset2D                     minDstPosition;
+    VkOffset2D                     maxDstPosition;
+    VkExtent2D                     minDstExtent;
+    VkExtent2D                     maxDstExtent;
+} VkDisplayPlaneCapabilitiesKHR;
+
+typedef struct VkDisplayPlanePropertiesKHR {
+    VkDisplayKHR    currentDisplay;
+    deUint32        currentStackIndex;
+} VkDisplayPlanePropertiesKHR;
+
+typedef struct VkDisplayPropertiesKHR {
+    VkDisplayKHR                  display;
+    const char*                   displayName;
+    VkExtent2D                    physicalDimensions;
+    VkExtent2D                    physicalResolution;
+    VkSurfaceTransformFlagsKHR    supportedTransforms;
+    VkBool32                      planeReorderPossible;
+    VkBool32                      persistentContent;
+} VkDisplayPropertiesKHR;
+
+typedef struct VkDisplaySurfaceCreateInfoKHR {
+    VkStructureType                   sType;
+    const void*                       pNext;
+    VkDisplaySurfaceCreateFlagsKHR    flags;
+    VkDisplayModeKHR                  displayMode;
+    deUint32                          planeIndex;
+    deUint32                          planeStackIndex;
+    VkSurfaceTransformFlagBitsKHR     transform;
+    float                             globalAlpha;
+    VkDisplayPlaneAlphaFlagBitsKHR    alphaMode;
+    VkExtent2D                        imageExtent;
+} VkDisplaySurfaceCreateInfoKHR;
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceDisplayPropertiesKHR)(VkPhysicalDevice physicalDevice, deUint32* pPropertyCount, VkDisplayPropertiesKHR* pProperties);
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR)(VkPhysicalDevice physicalDevice, deUint32* pPropertyCount, VkDisplayPlanePropertiesKHR* pProperties);
+typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayPlaneSupportedDisplaysKHR)(VkPhysicalDevice physicalDevice, deUint32 planeIndex, deUint32* pDisplayCount, VkDisplayKHR* pDisplays);
+typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayModePropertiesKHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, deUint32* pPropertyCount, VkDisplayModePropertiesKHR* pProperties);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateDisplayModeKHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, const VkDisplayModeCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDisplayModeKHR* pMode);
+typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayPlaneCapabilitiesKHR)(VkPhysicalDevice physicalDevice, VkDisplayModeKHR mode, deUint32 planeIndex, VkDisplayPlaneCapabilitiesKHR* pCapabilities);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateDisplayPlaneSurfaceKHR)(VkInstance instance, const VkDisplaySurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayPropertiesKHR(
+    VkPhysicalDevice                            physicalDevice,
+    deUint32*                                   pPropertyCount,
+    VkDisplayPropertiesKHR*                     pProperties);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayPlanePropertiesKHR(
+    VkPhysicalDevice                            physicalDevice,
+    deUint32*                                   pPropertyCount,
+    VkDisplayPlanePropertiesKHR*                pProperties);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayPlaneSupportedDisplaysKHR(
+    VkPhysicalDevice                            physicalDevice,
+    deUint32                                    planeIndex,
+    deUint32*                                   pDisplayCount,
+    VkDisplayKHR*                               pDisplays);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayModePropertiesKHR(
+    VkPhysicalDevice                            physicalDevice,
+    VkDisplayKHR                                display,
+    deUint32*                                   pPropertyCount,
+    VkDisplayModePropertiesKHR*                 pProperties);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateDisplayModeKHR(
+    VkPhysicalDevice                            physicalDevice,
+    VkDisplayKHR                                display,
+    const VkDisplayModeCreateInfoKHR*           pCreateInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkDisplayModeKHR*                           pMode);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayPlaneCapabilitiesKHR(
+    VkPhysicalDevice                            physicalDevice,
+    VkDisplayModeKHR                            mode,
+    deUint32                                    planeIndex,
+    VkDisplayPlaneCapabilitiesKHR*              pCapabilities);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateDisplayPlaneSurfaceKHR(
+    VkInstance                                  instance,
+    const VkDisplaySurfaceCreateInfoKHR*        pCreateInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkSurfaceKHR*                               pSurface);
+#endif
+
+
+#define VK_KHR_display_swapchain 1
+#define VK_KHR_DISPLAY_SWAPCHAIN_SPEC_VERSION 10
+#define VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME "VK_KHR_display_swapchain"
+typedef struct VkDisplayPresentInfoKHR {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkRect2D           srcRect;
+    VkRect2D           dstRect;
+    VkBool32           persistent;
+} VkDisplayPresentInfoKHR;
+
+typedef VkResult (VKAPI_PTR *PFN_vkCreateSharedSwapchainsKHR)(VkDevice device, deUint32 swapchainCount, const VkSwapchainCreateInfoKHR* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkSwapchainKHR* pSwapchains);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateSharedSwapchainsKHR(
+    VkDevice                                    device,
+    deUint32                                    swapchainCount,
+    const VkSwapchainCreateInfoKHR*             pCreateInfos,
+    const VkAllocationCallbacks*                pAllocator,
+    VkSwapchainKHR*                             pSwapchains);
+#endif
+
+
+#define VK_KHR_external_memory_fd 1
+#define VK_KHR_EXTERNAL_MEMORY_FD_SPEC_VERSION 1
+#define VK_KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME "VK_KHR_external_memory_fd"
+typedef struct VkImportMemoryFdInfoKHR {
+    VkStructureType                       sType;
+    const void*                           pNext;
+    VkExternalMemoryHandleTypeFlagBits    handleType;
+    int                                   fd;
+} VkImportMemoryFdInfoKHR;
+
+typedef struct VkMemoryFdPropertiesKHR {
+    VkStructureType    sType;
+    void*              pNext;
+    deUint32           memoryTypeBits;
+} VkMemoryFdPropertiesKHR;
+
+typedef struct VkMemoryGetFdInfoKHR {
+    VkStructureType                       sType;
+    const void*                           pNext;
+    VkDeviceMemory                        memory;
+    VkExternalMemoryHandleTypeFlagBits    handleType;
+} VkMemoryGetFdInfoKHR;
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryFdKHR)(VkDevice device, const VkMemoryGetFdInfoKHR* pGetFdInfo, int* pFd);
+typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryFdPropertiesKHR)(VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, int fd, VkMemoryFdPropertiesKHR* pMemoryFdProperties);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryFdKHR(
+    VkDevice                                    device,
+    const VkMemoryGetFdInfoKHR*                 pGetFdInfo,
+    int*                                        pFd);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryFdPropertiesKHR(
+    VkDevice                                    device,
+    VkExternalMemoryHandleTypeFlagBits          handleType,
+    int                                         fd,
+    VkMemoryFdPropertiesKHR*                    pMemoryFdProperties);
+#endif
+
+
+#define VK_KHR_external_semaphore_fd 1
+#define VK_KHR_EXTERNAL_SEMAPHORE_FD_SPEC_VERSION 1
+#define VK_KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME "VK_KHR_external_semaphore_fd"
+typedef struct VkImportSemaphoreFdInfoKHR {
+    VkStructureType                          sType;
+    const void*                              pNext;
+    VkSemaphore                              semaphore;
+    VkSemaphoreImportFlags                   flags;
+    VkExternalSemaphoreHandleTypeFlagBits    handleType;
+    int                                      fd;
+} VkImportSemaphoreFdInfoKHR;
+
+typedef struct VkSemaphoreGetFdInfoKHR {
+    VkStructureType                          sType;
+    const void*                              pNext;
+    VkSemaphore                              semaphore;
+    VkExternalSemaphoreHandleTypeFlagBits    handleType;
+} VkSemaphoreGetFdInfoKHR;
+
+typedef VkResult (VKAPI_PTR *PFN_vkImportSemaphoreFdKHR)(VkDevice device, const VkImportSemaphoreFdInfoKHR* pImportSemaphoreFdInfo);
+typedef VkResult (VKAPI_PTR *PFN_vkGetSemaphoreFdKHR)(VkDevice device, const VkSemaphoreGetFdInfoKHR* pGetFdInfo, int* pFd);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkImportSemaphoreFdKHR(
+    VkDevice                                    device,
+    const VkImportSemaphoreFdInfoKHR*           pImportSemaphoreFdInfo);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreFdKHR(
+    VkDevice                                    device,
+    const VkSemaphoreGetFdInfoKHR*              pGetFdInfo,
+    int*                                        pFd);
+#endif
+
+
+#define VK_KHR_incremental_present 1
+#define VK_KHR_INCREMENTAL_PRESENT_SPEC_VERSION 1
+#define VK_KHR_INCREMENTAL_PRESENT_EXTENSION_NAME "VK_KHR_incremental_present"
+typedef struct VkRectLayerKHR {
+    VkOffset2D    offset;
+    VkExtent2D    extent;
+    deUint32      layer;
+} VkRectLayerKHR;
+
+typedef struct VkPresentRegionKHR {
+    deUint32                 rectangleCount;
+    const VkRectLayerKHR*    pRectangles;
+} VkPresentRegionKHR;
+
+typedef struct VkPresentRegionsKHR {
+    VkStructureType              sType;
+    const void*                  pNext;
+    deUint32                     swapchainCount;
+    const VkPresentRegionKHR*    pRegions;
+} VkPresentRegionsKHR;
+
+
+
+#define VK_KHR_shared_presentable_image 1
+#define VK_KHR_SHARED_PRESENTABLE_IMAGE_SPEC_VERSION 1
+#define VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME "VK_KHR_shared_presentable_image"
+typedef struct VkSharedPresentSurfaceCapabilitiesKHR {
+    VkStructureType      sType;
+    void*                pNext;
+    VkImageUsageFlags    sharedPresentSupportedUsageFlags;
+} VkSharedPresentSurfaceCapabilitiesKHR;
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetSwapchainStatusKHR)(VkDevice device, VkSwapchainKHR swapchain);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainStatusKHR(
+    VkDevice                                    device,
+    VkSwapchainKHR                              swapchain);
+#endif
+
+
+#define VK_KHR_external_fence_fd 1
+#define VK_KHR_EXTERNAL_FENCE_FD_SPEC_VERSION 1
+#define VK_KHR_EXTERNAL_FENCE_FD_EXTENSION_NAME "VK_KHR_external_fence_fd"
+typedef struct VkImportFenceFdInfoKHR {
+    VkStructureType                      sType;
+    const void*                          pNext;
+    VkFence                              fence;
+    VkFenceImportFlags                   flags;
+    VkExternalFenceHandleTypeFlagBits    handleType;
+    int                                  fd;
+} VkImportFenceFdInfoKHR;
+
+typedef struct VkFenceGetFdInfoKHR {
+    VkStructureType                      sType;
+    const void*                          pNext;
+    VkFence                              fence;
+    VkExternalFenceHandleTypeFlagBits    handleType;
+} VkFenceGetFdInfoKHR;
+
+typedef VkResult (VKAPI_PTR *PFN_vkImportFenceFdKHR)(VkDevice device, const VkImportFenceFdInfoKHR* pImportFenceFdInfo);
+typedef VkResult (VKAPI_PTR *PFN_vkGetFenceFdKHR)(VkDevice device, const VkFenceGetFdInfoKHR* pGetFdInfo, int* pFd);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkImportFenceFdKHR(
+    VkDevice                                    device,
+    const VkImportFenceFdInfoKHR*               pImportFenceFdInfo);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetFenceFdKHR(
+    VkDevice                                    device,
+    const VkFenceGetFdInfoKHR*                  pGetFdInfo,
+    int*                                        pFd);
+#endif
+
+
+#define VK_KHR_get_surface_capabilities2 1
+#define VK_KHR_GET_SURFACE_CAPABILITIES_2_SPEC_VERSION 1
+#define VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME "VK_KHR_get_surface_capabilities2"
+typedef struct VkPhysicalDeviceSurfaceInfo2KHR {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkSurfaceKHR       surface;
+} VkPhysicalDeviceSurfaceInfo2KHR;
+
+typedef struct VkSurfaceCapabilities2KHR {
+    VkStructureType             sType;
+    void*                       pNext;
+    VkSurfaceCapabilitiesKHR    surfaceCapabilities;
+} VkSurfaceCapabilities2KHR;
+
+typedef struct VkSurfaceFormat2KHR {
+    VkStructureType       sType;
+    void*                 pNext;
+    VkSurfaceFormatKHR    surfaceFormat;
+} VkSurfaceFormat2KHR;
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, VkSurfaceCapabilities2KHR* pSurfaceCapabilities);
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceFormats2KHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, deUint32* pSurfaceFormatCount, VkSurfaceFormat2KHR* pSurfaceFormats);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceCapabilities2KHR(
+    VkPhysicalDevice                            physicalDevice,
+    const VkPhysicalDeviceSurfaceInfo2KHR*      pSurfaceInfo,
+    VkSurfaceCapabilities2KHR*                  pSurfaceCapabilities);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceFormats2KHR(
+    VkPhysicalDevice                            physicalDevice,
+    const VkPhysicalDeviceSurfaceInfo2KHR*      pSurfaceInfo,
+    deUint32*                                   pSurfaceFormatCount,
+    VkSurfaceFormat2KHR*                        pSurfaceFormats);
+#endif
+
+
+#define VK_KHR_get_display_properties2 1
+#define VK_KHR_GET_DISPLAY_PROPERTIES_2_SPEC_VERSION 1
+#define VK_KHR_GET_DISPLAY_PROPERTIES_2_EXTENSION_NAME "VK_KHR_get_display_properties2"
+typedef struct VkDisplayProperties2KHR {
+    VkStructureType           sType;
+    void*                     pNext;
+    VkDisplayPropertiesKHR    displayProperties;
+} VkDisplayProperties2KHR;
+
+typedef struct VkDisplayPlaneProperties2KHR {
+    VkStructureType                sType;
+    void*                          pNext;
+    VkDisplayPlanePropertiesKHR    displayPlaneProperties;
+} VkDisplayPlaneProperties2KHR;
+
+typedef struct VkDisplayModeProperties2KHR {
+    VkStructureType               sType;
+    void*                         pNext;
+    VkDisplayModePropertiesKHR    displayModeProperties;
+} VkDisplayModeProperties2KHR;
+
+typedef struct VkDisplayPlaneInfo2KHR {
+    VkStructureType     sType;
+    const void*         pNext;
+    VkDisplayModeKHR    mode;
+    deUint32            planeIndex;
+} VkDisplayPlaneInfo2KHR;
+
+typedef struct VkDisplayPlaneCapabilities2KHR {
+    VkStructureType                  sType;
+    void*                            pNext;
+    VkDisplayPlaneCapabilitiesKHR    capabilities;
+} VkDisplayPlaneCapabilities2KHR;
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceDisplayProperties2KHR)(VkPhysicalDevice physicalDevice, deUint32* pPropertyCount, VkDisplayProperties2KHR* pProperties);
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceDisplayPlaneProperties2KHR)(VkPhysicalDevice physicalDevice, deUint32* pPropertyCount, VkDisplayPlaneProperties2KHR* pProperties);
+typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayModeProperties2KHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, deUint32* pPropertyCount, VkDisplayModeProperties2KHR* pProperties);
+typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayPlaneCapabilities2KHR)(VkPhysicalDevice physicalDevice, const VkDisplayPlaneInfo2KHR* pDisplayPlaneInfo, VkDisplayPlaneCapabilities2KHR* pCapabilities);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayProperties2KHR(
+    VkPhysicalDevice                            physicalDevice,
+    deUint32*                                   pPropertyCount,
+    VkDisplayProperties2KHR*                    pProperties);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayPlaneProperties2KHR(
+    VkPhysicalDevice                            physicalDevice,
+    deUint32*                                   pPropertyCount,
+    VkDisplayPlaneProperties2KHR*               pProperties);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayModeProperties2KHR(
+    VkPhysicalDevice                            physicalDevice,
+    VkDisplayKHR                                display,
+    deUint32*                                   pPropertyCount,
+    VkDisplayModeProperties2KHR*                pProperties);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayPlaneCapabilities2KHR(
+    VkPhysicalDevice                            physicalDevice,
+    const VkDisplayPlaneInfo2KHR*               pDisplayPlaneInfo,
+    VkDisplayPlaneCapabilities2KHR*             pCapabilities);
+#endif
+
+
+#define VK_KHR_shader_clock 1
+#define VK_KHR_SHADER_CLOCK_SPEC_VERSION  1
+#define VK_KHR_SHADER_CLOCK_EXTENSION_NAME "VK_KHR_shader_clock"
+typedef struct VkPhysicalDeviceShaderClockFeaturesKHR {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           shaderSubgroupClock;
+    VkBool32           shaderDeviceClock;
+} VkPhysicalDeviceShaderClockFeaturesKHR;
+
+
+
+#define VK_KHR_swapchain_mutable_format 1
+#define VK_KHR_SWAPCHAIN_MUTABLE_FORMAT_SPEC_VERSION 1
+#define VK_KHR_SWAPCHAIN_MUTABLE_FORMAT_EXTENSION_NAME "VK_KHR_swapchain_mutable_format"
+
+
+#define VK_KHR_shader_terminate_invocation 1
+#define VK_KHR_SHADER_TERMINATE_INVOCATION_SPEC_VERSION 1
+#define VK_KHR_SHADER_TERMINATE_INVOCATION_EXTENSION_NAME "VK_KHR_shader_terminate_invocation"
+typedef struct VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           shaderTerminateInvocation;
+} VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR;
+
+
+
+#define VK_KHR_fragment_shading_rate 1
+#define VK_KHR_FRAGMENT_SHADING_RATE_SPEC_VERSION 1
+#define VK_KHR_FRAGMENT_SHADING_RATE_EXTENSION_NAME "VK_KHR_fragment_shading_rate"
+
+typedef enum VkFragmentShadingRateCombinerOpKHR {
+    VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR = 0,
+    VK_FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_KHR = 1,
+    VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MIN_KHR = 2,
+    VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MAX_KHR = 3,
+    VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MUL_KHR = 4,
+    VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MAX_ENUM_KHR = 0x7FFFFFFF
+} VkFragmentShadingRateCombinerOpKHR;
+typedef struct VkFragmentShadingRateAttachmentInfoKHR {
+    VkStructureType                  sType;
+    const void*                      pNext;
+    const VkAttachmentReference2*    pFragmentShadingRateAttachment;
+    VkExtent2D                       shadingRateAttachmentTexelSize;
+} VkFragmentShadingRateAttachmentInfoKHR;
+
+typedef struct VkPipelineFragmentShadingRateStateCreateInfoKHR {
+    VkStructureType                       sType;
+    const void*                           pNext;
+    VkExtent2D                            fragmentSize;
+    VkFragmentShadingRateCombinerOpKHR    combinerOps[2];
+} VkPipelineFragmentShadingRateStateCreateInfoKHR;
+
+typedef struct VkPhysicalDeviceFragmentShadingRateFeaturesKHR {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           pipelineFragmentShadingRate;
+    VkBool32           primitiveFragmentShadingRate;
+    VkBool32           attachmentFragmentShadingRate;
+} VkPhysicalDeviceFragmentShadingRateFeaturesKHR;
+
+typedef struct VkPhysicalDeviceFragmentShadingRatePropertiesKHR {
+    VkStructureType          sType;
+    void*                    pNext;
+    VkExtent2D               minFragmentShadingRateAttachmentTexelSize;
+    VkExtent2D               maxFragmentShadingRateAttachmentTexelSize;
+    deUint32                 maxFragmentShadingRateAttachmentTexelSizeAspectRatio;
+    VkBool32                 primitiveFragmentShadingRateWithMultipleViewports;
+    VkBool32                 layeredShadingRateAttachments;
+    VkBool32                 fragmentShadingRateNonTrivialCombinerOps;
+    VkExtent2D               maxFragmentSize;
+    deUint32                 maxFragmentSizeAspectRatio;
+    deUint32                 maxFragmentShadingRateCoverageSamples;
+    VkSampleCountFlagBits    maxFragmentShadingRateRasterizationSamples;
+    VkBool32                 fragmentShadingRateWithShaderDepthStencilWrites;
+    VkBool32                 fragmentShadingRateWithSampleMask;
+    VkBool32                 fragmentShadingRateWithShaderSampleMask;
+    VkBool32                 fragmentShadingRateWithConservativeRasterization;
+    VkBool32                 fragmentShadingRateWithFragmentShaderInterlock;
+    VkBool32                 fragmentShadingRateWithCustomSampleLocations;
+    VkBool32                 fragmentShadingRateStrictMultiplyCombiner;
+} VkPhysicalDeviceFragmentShadingRatePropertiesKHR;
+
+typedef struct VkPhysicalDeviceFragmentShadingRateKHR {
+    VkStructureType       sType;
+    void*                 pNext;
+    VkSampleCountFlags    sampleCounts;
+    VkExtent2D            fragmentSize;
+} VkPhysicalDeviceFragmentShadingRateKHR;
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceFragmentShadingRatesKHR)(VkPhysicalDevice physicalDevice, deUint32* pFragmentShadingRateCount, VkPhysicalDeviceFragmentShadingRateKHR* pFragmentShadingRates);
+typedef void (VKAPI_PTR *PFN_vkCmdSetFragmentShadingRateKHR)(VkCommandBuffer           commandBuffer, const VkExtent2D*                           pFragmentSize, const VkFragmentShadingRateCombinerOpKHR    combinerOps[2]);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceFragmentShadingRatesKHR(
+    VkPhysicalDevice                            physicalDevice,
+    deUint32*                                   pFragmentShadingRateCount,
+    VkPhysicalDeviceFragmentShadingRateKHR*     pFragmentShadingRates);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetFragmentShadingRateKHR(
+    VkCommandBuffer                             commandBuffer,
+    const VkExtent2D*                           pFragmentSize,
+    const VkFragmentShadingRateCombinerOpKHR    combinerOps[2]);
+#endif
+
+
+#define VK_KHR_fault_handling 1
+#define VK_KHR_FAULT_HANDLING_SPEC_VERSION 1
+#define VK_KHR_FAULT_HANDLING_EXTENSION_NAME "VK_KHR_fault_handling"
+typedef VkFaultLevel VkFaultLevelKHR;
+
+typedef VkFaultType VkFaultTypeKHR;
+
+typedef VkFaultQueryBehavior VkFaultQueryBehaviorKHR;
+
+typedef VkFaultData VkFaultDataKHR;
+
+typedef VkFaultCallbackInfo VkFaultCallbackInfoKHR;
+
+typedef PFN_vkFaultCallbackFunction PFN_vkFaultCallbackFunctionKHR;
+
+typedef VkPhysicalDeviceFaultHandlingProperties VkPhysicalDeviceFaultHandlingPropertiesKHR;
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetFaultDataKHR)(VkDevice device, VkFaultQueryBehavior faultQueryBehavior, VkBool32* pUnrecordedFaults, deUint32* pFaultCount, VkFaultData* pFaults);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkGetFaultDataKHR(
+    VkDevice                                    device,
+    VkFaultQueryBehavior                        faultQueryBehavior,
+    VkBool32*                                   pUnrecordedFaults,
+    deUint32*                                   pFaultCount,
+    VkFaultData*                                pFaults);
+#endif
+
+
+#define VK_KHR_object_refresh 1
+#define VK_KHR_OBJECT_REFRESH_SPEC_VERSION 1
+#define VK_KHR_OBJECT_REFRESH_EXTENSION_NAME "VK_KHR_object_refresh"
+
+typedef enum VkRefreshObjectFlagBitsKHR {
+    VK_REFRESH_OBJECT_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
+} VkRefreshObjectFlagBitsKHR;
+typedef VkFlags VkRefreshObjectFlagsKHR;
+typedef struct VkRefreshObjectKHR {
+    VkObjectType               objectType;
+    deUint64                   objectHandle;
+    VkRefreshObjectFlagsKHR    flags;
+} VkRefreshObjectKHR;
+
+typedef struct VkRefreshObjectListKHR {
+    VkStructureType              sType;
+    const void*                  pNext;
+    deUint32                     objectCount;
+    const VkRefreshObjectKHR*    pObjects;
+} VkRefreshObjectListKHR;
+
+typedef void (VKAPI_PTR *PFN_vkCmdRefreshObjectsKHR)(VkCommandBuffer commandBuffer, const VkRefreshObjectListKHR* pRefreshObjects);
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceRefreshableObjectTypesKHR)(VkPhysicalDevice physicalDevice, deUint32* pRefreshableObjectCount, VkObjectType* pRefreshableObjectTypes);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkCmdRefreshObjectsKHR(
+    VkCommandBuffer                             commandBuffer,
+    const VkRefreshObjectListKHR*               pRefreshObjects);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceRefreshableObjectTypesKHR(
+    VkPhysicalDevice                            physicalDevice,
+    deUint32*                                   pRefreshableObjectCount,
+    VkObjectType*                               pRefreshableObjectTypes);
+#endif
+
+
+#define VK_KHR_seu_safe_memory 1
+#define VK_KHR_SEU_SAFE_MEMORY_SPEC_VERSION 1
+#define VK_KHR_SEU_SAFE_MEMORY_EXTENSION_NAME "VK_KHR_seu_safe_memory"
+
+
+#define VK_KHR_pipeline_identifier 1
+#define VK_KHR_PIPELINE_IDENTIFIER_SPEC_VERSION 1
+#define VK_KHR_PIPELINE_IDENTIFIER_EXTENSION_NAME "VK_KHR_pipeline_identifier"
+typedef VkPipelineMatchControl VkPipelineMatchControlKHR;
+
+typedef VkPhysicalDevicePipelineIdentifierFeatures VkPhysicalDevicePipelineIdentifierFeaturesKHR;
+
+typedef VkPipelineIdentifierInfo VkPipelineIdentifierInfoKHR;
+
+
+
+#define VK_KHR_copy_commands2 1
+#define VK_KHR_COPY_COMMANDS_2_SPEC_VERSION 1
+#define VK_KHR_COPY_COMMANDS_2_EXTENSION_NAME "VK_KHR_copy_commands2"
+typedef struct VkBufferCopy2KHR {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkDeviceSize       srcOffset;
+    VkDeviceSize       dstOffset;
+    VkDeviceSize       size;
+} VkBufferCopy2KHR;
+
+typedef struct VkCopyBufferInfo2KHR {
+    VkStructureType            sType;
+    const void*                pNext;
+    VkBuffer                   srcBuffer;
+    VkBuffer                   dstBuffer;
+    deUint32                   regionCount;
+    const VkBufferCopy2KHR*    pRegions;
+} VkCopyBufferInfo2KHR;
+
+typedef struct VkImageCopy2KHR {
+    VkStructureType             sType;
+    const void*                 pNext;
+    VkImageSubresourceLayers    srcSubresource;
+    VkOffset3D                  srcOffset;
+    VkImageSubresourceLayers    dstSubresource;
+    VkOffset3D                  dstOffset;
+    VkExtent3D                  extent;
+} VkImageCopy2KHR;
+
+typedef struct VkCopyImageInfo2KHR {
+    VkStructureType           sType;
+    const void*               pNext;
+    VkImage                   srcImage;
+    VkImageLayout             srcImageLayout;
+    VkImage                   dstImage;
+    VkImageLayout             dstImageLayout;
+    deUint32                  regionCount;
+    const VkImageCopy2KHR*    pRegions;
+} VkCopyImageInfo2KHR;
+
+typedef struct VkBufferImageCopy2KHR {
+    VkStructureType             sType;
+    const void*                 pNext;
+    VkDeviceSize                bufferOffset;
+    deUint32                    bufferRowLength;
+    deUint32                    bufferImageHeight;
+    VkImageSubresourceLayers    imageSubresource;
+    VkOffset3D                  imageOffset;
+    VkExtent3D                  imageExtent;
+} VkBufferImageCopy2KHR;
+
+typedef struct VkCopyBufferToImageInfo2KHR {
+    VkStructureType                 sType;
+    const void*                     pNext;
+    VkBuffer                        srcBuffer;
+    VkImage                         dstImage;
+    VkImageLayout                   dstImageLayout;
+    deUint32                        regionCount;
+    const VkBufferImageCopy2KHR*    pRegions;
+} VkCopyBufferToImageInfo2KHR;
+
+typedef struct VkCopyImageToBufferInfo2KHR {
+    VkStructureType                 sType;
+    const void*                     pNext;
+    VkImage                         srcImage;
+    VkImageLayout                   srcImageLayout;
+    VkBuffer                        dstBuffer;
+    deUint32                        regionCount;
+    const VkBufferImageCopy2KHR*    pRegions;
+} VkCopyImageToBufferInfo2KHR;
+
+typedef struct VkImageBlit2KHR {
+    VkStructureType             sType;
+    const void*                 pNext;
+    VkImageSubresourceLayers    srcSubresource;
+    VkOffset3D                  srcOffsets[2];
+    VkImageSubresourceLayers    dstSubresource;
+    VkOffset3D                  dstOffsets[2];
+} VkImageBlit2KHR;
+
+typedef struct VkBlitImageInfo2KHR {
+    VkStructureType           sType;
+    const void*               pNext;
+    VkImage                   srcImage;
+    VkImageLayout             srcImageLayout;
+    VkImage                   dstImage;
+    VkImageLayout             dstImageLayout;
+    deUint32                  regionCount;
+    const VkImageBlit2KHR*    pRegions;
+    VkFilter                  filter;
+} VkBlitImageInfo2KHR;
+
+typedef struct VkImageResolve2KHR {
+    VkStructureType             sType;
+    const void*                 pNext;
+    VkImageSubresourceLayers    srcSubresource;
+    VkOffset3D                  srcOffset;
+    VkImageSubresourceLayers    dstSubresource;
+    VkOffset3D                  dstOffset;
+    VkExtent3D                  extent;
+} VkImageResolve2KHR;
+
+typedef struct VkResolveImageInfo2KHR {
+    VkStructureType              sType;
+    const void*                  pNext;
+    VkImage                      srcImage;
+    VkImageLayout                srcImageLayout;
+    VkImage                      dstImage;
+    VkImageLayout                dstImageLayout;
+    deUint32                     regionCount;
+    const VkImageResolve2KHR*    pRegions;
+} VkResolveImageInfo2KHR;
+
+typedef void (VKAPI_PTR *PFN_vkCmdCopyBuffer2KHR)(VkCommandBuffer commandBuffer, const VkCopyBufferInfo2KHR* pCopyBufferInfo);
+typedef void (VKAPI_PTR *PFN_vkCmdCopyImage2KHR)(VkCommandBuffer commandBuffer, const VkCopyImageInfo2KHR* pCopyImageInfo);
+typedef void (VKAPI_PTR *PFN_vkCmdCopyBufferToImage2KHR)(VkCommandBuffer commandBuffer, const VkCopyBufferToImageInfo2KHR* pCopyBufferToImageInfo);
+typedef void (VKAPI_PTR *PFN_vkCmdCopyImageToBuffer2KHR)(VkCommandBuffer commandBuffer, const VkCopyImageToBufferInfo2KHR* pCopyImageToBufferInfo);
+typedef void (VKAPI_PTR *PFN_vkCmdBlitImage2KHR)(VkCommandBuffer commandBuffer, const VkBlitImageInfo2KHR* pBlitImageInfo);
+typedef void (VKAPI_PTR *PFN_vkCmdResolveImage2KHR)(VkCommandBuffer commandBuffer, const VkResolveImageInfo2KHR* pResolveImageInfo);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkCmdCopyBuffer2KHR(
+    VkCommandBuffer                             commandBuffer,
+    const VkCopyBufferInfo2KHR*                 pCopyBufferInfo);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdCopyImage2KHR(
+    VkCommandBuffer                             commandBuffer,
+    const VkCopyImageInfo2KHR*                  pCopyImageInfo);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdCopyBufferToImage2KHR(
+    VkCommandBuffer                             commandBuffer,
+    const VkCopyBufferToImageInfo2KHR*          pCopyBufferToImageInfo);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdCopyImageToBuffer2KHR(
+    VkCommandBuffer                             commandBuffer,
+    const VkCopyImageToBufferInfo2KHR*          pCopyImageToBufferInfo);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdBlitImage2KHR(
+    VkCommandBuffer                             commandBuffer,
+    const VkBlitImageInfo2KHR*                  pBlitImageInfo);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdResolveImage2KHR(
+    VkCommandBuffer                             commandBuffer,
+    const VkResolveImageInfo2KHR*               pResolveImageInfo);
+#endif
+
+
+#define VK_KHR_sc_pipeline_cache_functionality 1
+#define VK_KHR_SC_PIPELINE_CACHE_FUNCTIONALITY_SPEC_VERSION 1
+#define VK_KHR_SC_PIPELINE_CACHE_FUNCTIONALITY_EXTENSION_NAME "VK_KHR_sc_pipeline_cache_functionality"
+
+
+#define VK_EXT_depth_range_unrestricted 1
+#define VK_EXT_DEPTH_RANGE_UNRESTRICTED_SPEC_VERSION 1
+#define VK_EXT_DEPTH_RANGE_UNRESTRICTED_EXTENSION_NAME "VK_EXT_depth_range_unrestricted"
+
+
+#define VK_EXT_texture_compression_astc_hdr 1
+#define VK_EXT_TEXTURE_COMPRESSION_ASTC_HDR_SPEC_VERSION 1
+#define VK_EXT_TEXTURE_COMPRESSION_ASTC_HDR_EXTENSION_NAME "VK_EXT_texture_compression_astc_hdr"
+typedef struct VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           textureCompressionASTC_HDR;
+} VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT;
+
+
+
+#define VK_EXT_astc_decode_mode 1
+#define VK_EXT_ASTC_DECODE_MODE_SPEC_VERSION 1
+#define VK_EXT_ASTC_DECODE_MODE_EXTENSION_NAME "VK_EXT_astc_decode_mode"
+typedef struct VkImageViewASTCDecodeModeEXT {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkFormat           decodeMode;
+} VkImageViewASTCDecodeModeEXT;
+
+typedef struct VkPhysicalDeviceASTCDecodeFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           decodeModeSharedExponent;
+} VkPhysicalDeviceASTCDecodeFeaturesEXT;
+
+
+
+#define VK_EXT_direct_mode_display 1
+#define VK_EXT_DIRECT_MODE_DISPLAY_SPEC_VERSION 1
+#define VK_EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME "VK_EXT_direct_mode_display"
+typedef VkResult (VKAPI_PTR *PFN_vkReleaseDisplayEXT)(VkPhysicalDevice physicalDevice, VkDisplayKHR display);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkReleaseDisplayEXT(
+    VkPhysicalDevice                            physicalDevice,
+    VkDisplayKHR                                display);
+#endif
+
+
+#define VK_EXT_display_surface_counter 1
+#define VK_EXT_DISPLAY_SURFACE_COUNTER_SPEC_VERSION 1
+#define VK_EXT_DISPLAY_SURFACE_COUNTER_EXTENSION_NAME "VK_EXT_display_surface_counter"
+
+typedef enum VkSurfaceCounterFlagBitsEXT {
+    VK_SURFACE_COUNTER_VBLANK_BIT_EXT = 0x00000001,
+    VK_SURFACE_COUNTER_VBLANK_EXT = VK_SURFACE_COUNTER_VBLANK_BIT_EXT,
+    VK_SURFACE_COUNTER_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkSurfaceCounterFlagBitsEXT;
+typedef VkFlags VkSurfaceCounterFlagsEXT;
+typedef struct VkSurfaceCapabilities2EXT {
+    VkStructureType                  sType;
+    void*                            pNext;
+    deUint32                         minImageCount;
+    deUint32                         maxImageCount;
+    VkExtent2D                       currentExtent;
+    VkExtent2D                       minImageExtent;
+    VkExtent2D                       maxImageExtent;
+    deUint32                         maxImageArrayLayers;
+    VkSurfaceTransformFlagsKHR       supportedTransforms;
+    VkSurfaceTransformFlagBitsKHR    currentTransform;
+    VkCompositeAlphaFlagsKHR         supportedCompositeAlpha;
+    VkImageUsageFlags                supportedUsageFlags;
+    VkSurfaceCounterFlagsEXT         supportedSurfaceCounters;
+} VkSurfaceCapabilities2EXT;
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceCapabilities2EXT)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, VkSurfaceCapabilities2EXT* pSurfaceCapabilities);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceCapabilities2EXT(
+    VkPhysicalDevice                            physicalDevice,
+    VkSurfaceKHR                                surface,
+    VkSurfaceCapabilities2EXT*                  pSurfaceCapabilities);
+#endif
+
+
+#define VK_EXT_display_control 1
+#define VK_EXT_DISPLAY_CONTROL_SPEC_VERSION 1
+#define VK_EXT_DISPLAY_CONTROL_EXTENSION_NAME "VK_EXT_display_control"
+
+typedef enum VkDisplayPowerStateEXT {
+    VK_DISPLAY_POWER_STATE_OFF_EXT = 0,
+    VK_DISPLAY_POWER_STATE_SUSPEND_EXT = 1,
+    VK_DISPLAY_POWER_STATE_ON_EXT = 2,
+    VK_DISPLAY_POWER_STATE_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkDisplayPowerStateEXT;
+
+typedef enum VkDeviceEventTypeEXT {
+    VK_DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT = 0,
+    VK_DEVICE_EVENT_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkDeviceEventTypeEXT;
+
+typedef enum VkDisplayEventTypeEXT {
+    VK_DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT = 0,
+    VK_DISPLAY_EVENT_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkDisplayEventTypeEXT;
+typedef struct VkDisplayPowerInfoEXT {
+    VkStructureType           sType;
+    const void*               pNext;
+    VkDisplayPowerStateEXT    powerState;
+} VkDisplayPowerInfoEXT;
+
+typedef struct VkDeviceEventInfoEXT {
+    VkStructureType         sType;
+    const void*             pNext;
+    VkDeviceEventTypeEXT    deviceEvent;
+} VkDeviceEventInfoEXT;
+
+typedef struct VkDisplayEventInfoEXT {
+    VkStructureType          sType;
+    const void*              pNext;
+    VkDisplayEventTypeEXT    displayEvent;
+} VkDisplayEventInfoEXT;
+
+typedef struct VkSwapchainCounterCreateInfoEXT {
+    VkStructureType             sType;
+    const void*                 pNext;
+    VkSurfaceCounterFlagsEXT    surfaceCounters;
+} VkSwapchainCounterCreateInfoEXT;
+
+typedef VkResult (VKAPI_PTR *PFN_vkDisplayPowerControlEXT)(VkDevice device, VkDisplayKHR display, const VkDisplayPowerInfoEXT* pDisplayPowerInfo);
+typedef VkResult (VKAPI_PTR *PFN_vkRegisterDeviceEventEXT)(VkDevice device, const VkDeviceEventInfoEXT* pDeviceEventInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence);
+typedef VkResult (VKAPI_PTR *PFN_vkRegisterDisplayEventEXT)(VkDevice device, VkDisplayKHR display, const VkDisplayEventInfoEXT* pDisplayEventInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence);
+typedef VkResult (VKAPI_PTR *PFN_vkGetSwapchainCounterEXT)(VkDevice device, VkSwapchainKHR swapchain, VkSurfaceCounterFlagBitsEXT counter, deUint64* pCounterValue);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkDisplayPowerControlEXT(
+    VkDevice                                    device,
+    VkDisplayKHR                                display,
+    const VkDisplayPowerInfoEXT*                pDisplayPowerInfo);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkRegisterDeviceEventEXT(
+    VkDevice                                    device,
+    const VkDeviceEventInfoEXT*                 pDeviceEventInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkFence*                                    pFence);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkRegisterDisplayEventEXT(
+    VkDevice                                    device,
+    VkDisplayKHR                                display,
+    const VkDisplayEventInfoEXT*                pDisplayEventInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkFence*                                    pFence);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainCounterEXT(
+    VkDevice                                    device,
+    VkSwapchainKHR                              swapchain,
+    VkSurfaceCounterFlagBitsEXT                 counter,
+    deUint64*                                   pCounterValue);
+#endif
+
+
+#define VK_EXT_discard_rectangles 1
+#define VK_EXT_DISCARD_RECTANGLES_SPEC_VERSION 1
+#define VK_EXT_DISCARD_RECTANGLES_EXTENSION_NAME "VK_EXT_discard_rectangles"
+
+typedef enum VkDiscardRectangleModeEXT {
+    VK_DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT = 0,
+    VK_DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT = 1,
+    VK_DISCARD_RECTANGLE_MODE_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkDiscardRectangleModeEXT;
+typedef VkFlags VkPipelineDiscardRectangleStateCreateFlagsEXT;
+typedef struct VkPhysicalDeviceDiscardRectanglePropertiesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    deUint32           maxDiscardRectangles;
+} VkPhysicalDeviceDiscardRectanglePropertiesEXT;
+
+typedef struct VkPipelineDiscardRectangleStateCreateInfoEXT {
+    VkStructureType                                  sType;
+    const void*                                      pNext;
+    VkPipelineDiscardRectangleStateCreateFlagsEXT    flags;
+    VkDiscardRectangleModeEXT                        discardRectangleMode;
+    deUint32                                         discardRectangleCount;
+    const VkRect2D*                                  pDiscardRectangles;
+} VkPipelineDiscardRectangleStateCreateInfoEXT;
+
+typedef void (VKAPI_PTR *PFN_vkCmdSetDiscardRectangleEXT)(VkCommandBuffer commandBuffer, deUint32 firstDiscardRectangle, deUint32 discardRectangleCount, const VkRect2D* pDiscardRectangles);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkCmdSetDiscardRectangleEXT(
+    VkCommandBuffer                             commandBuffer,
+    deUint32                                    firstDiscardRectangle,
+    deUint32                                    discardRectangleCount,
+    const VkRect2D*                             pDiscardRectangles);
+#endif
+
+
+#define VK_EXT_conservative_rasterization 1
+#define VK_EXT_CONSERVATIVE_RASTERIZATION_SPEC_VERSION 1
+#define VK_EXT_CONSERVATIVE_RASTERIZATION_EXTENSION_NAME "VK_EXT_conservative_rasterization"
+
+typedef enum VkConservativeRasterizationModeEXT {
+    VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT = 0,
+    VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT = 1,
+    VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT = 2,
+    VK_CONSERVATIVE_RASTERIZATION_MODE_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkConservativeRasterizationModeEXT;
+typedef VkFlags VkPipelineRasterizationConservativeStateCreateFlagsEXT;
+typedef struct VkPhysicalDeviceConservativeRasterizationPropertiesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    float              primitiveOverestimationSize;
+    float              maxExtraPrimitiveOverestimationSize;
+    float              extraPrimitiveOverestimationSizeGranularity;
+    VkBool32           primitiveUnderestimation;
+    VkBool32           conservativePointAndLineRasterization;
+    VkBool32           degenerateTrianglesRasterized;
+    VkBool32           degenerateLinesRasterized;
+    VkBool32           fullyCoveredFragmentShaderInputVariable;
+    VkBool32           conservativeRasterizationPostDepthCoverage;
+} VkPhysicalDeviceConservativeRasterizationPropertiesEXT;
+
+typedef struct VkPipelineRasterizationConservativeStateCreateInfoEXT {
+    VkStructureType                                           sType;
+    const void*                                               pNext;
+    VkPipelineRasterizationConservativeStateCreateFlagsEXT    flags;
+    VkConservativeRasterizationModeEXT                        conservativeRasterizationMode;
+    float                                                     extraPrimitiveOverestimationSize;
+} VkPipelineRasterizationConservativeStateCreateInfoEXT;
+
+
+
+#define VK_EXT_depth_clip_enable 1
+#define VK_EXT_DEPTH_CLIP_ENABLE_SPEC_VERSION 1
+#define VK_EXT_DEPTH_CLIP_ENABLE_EXTENSION_NAME "VK_EXT_depth_clip_enable"
+typedef VkFlags VkPipelineRasterizationDepthClipStateCreateFlagsEXT;
+typedef struct VkPhysicalDeviceDepthClipEnableFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           depthClipEnable;
+} VkPhysicalDeviceDepthClipEnableFeaturesEXT;
+
+typedef struct VkPipelineRasterizationDepthClipStateCreateInfoEXT {
+    VkStructureType                                        sType;
+    const void*                                            pNext;
+    VkPipelineRasterizationDepthClipStateCreateFlagsEXT    flags;
+    VkBool32                                               depthClipEnable;
+} VkPipelineRasterizationDepthClipStateCreateInfoEXT;
+
+
+
+#define VK_EXT_swapchain_colorspace 1
+#define VK_EXT_SWAPCHAIN_COLOR_SPACE_SPEC_VERSION 4
+#define VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME "VK_EXT_swapchain_colorspace"
+
+
+#define VK_EXT_hdr_metadata 1
+#define VK_EXT_HDR_METADATA_SPEC_VERSION  2
+#define VK_EXT_HDR_METADATA_EXTENSION_NAME "VK_EXT_hdr_metadata"
+typedef struct VkXYColorEXT {
+    float    x;
+    float    y;
+} VkXYColorEXT;
+
+typedef struct VkHdrMetadataEXT {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkXYColorEXT       displayPrimaryRed;
+    VkXYColorEXT       displayPrimaryGreen;
+    VkXYColorEXT       displayPrimaryBlue;
+    VkXYColorEXT       whitePoint;
+    float              maxLuminance;
+    float              minLuminance;
+    float              maxContentLightLevel;
+    float              maxFrameAverageLightLevel;
+} VkHdrMetadataEXT;
+
+typedef void (VKAPI_PTR *PFN_vkSetHdrMetadataEXT)(VkDevice device, deUint32 swapchainCount, const VkSwapchainKHR* pSwapchains, const VkHdrMetadataEXT* pMetadata);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkSetHdrMetadataEXT(
+    VkDevice                                    device,
+    deUint32                                    swapchainCount,
+    const VkSwapchainKHR*                       pSwapchains,
+    const VkHdrMetadataEXT*                     pMetadata);
+#endif
+
+
+#define VK_EXT_external_memory_dma_buf 1
+#define VK_EXT_EXTERNAL_MEMORY_DMA_BUF_SPEC_VERSION 1
+#define VK_EXT_EXTERNAL_MEMORY_DMA_BUF_EXTENSION_NAME "VK_EXT_external_memory_dma_buf"
+
+
+#define VK_EXT_queue_family_foreign 1
+#define VK_EXT_QUEUE_FAMILY_FOREIGN_SPEC_VERSION 1
+#define VK_EXT_QUEUE_FAMILY_FOREIGN_EXTENSION_NAME "VK_EXT_queue_family_foreign"
+#define VK_QUEUE_FAMILY_FOREIGN_EXT       (~0U-2)
+
+
+#define VK_EXT_shader_stencil_export 1
+#define VK_EXT_SHADER_STENCIL_EXPORT_SPEC_VERSION 1
+#define VK_EXT_SHADER_STENCIL_EXPORT_EXTENSION_NAME "VK_EXT_shader_stencil_export"
+
+
+#define VK_EXT_sample_locations 1
+#define VK_EXT_SAMPLE_LOCATIONS_SPEC_VERSION 1
+#define VK_EXT_SAMPLE_LOCATIONS_EXTENSION_NAME "VK_EXT_sample_locations"
+typedef struct VkSampleLocationEXT {
+    float    x;
+    float    y;
+} VkSampleLocationEXT;
+
+typedef struct VkSampleLocationsInfoEXT {
+    VkStructureType               sType;
+    const void*                   pNext;
+    VkSampleCountFlagBits         sampleLocationsPerPixel;
+    VkExtent2D                    sampleLocationGridSize;
+    deUint32                      sampleLocationsCount;
+    const VkSampleLocationEXT*    pSampleLocations;
+} VkSampleLocationsInfoEXT;
+
+typedef struct VkAttachmentSampleLocationsEXT {
+    deUint32                    attachmentIndex;
+    VkSampleLocationsInfoEXT    sampleLocationsInfo;
+} VkAttachmentSampleLocationsEXT;
+
+typedef struct VkSubpassSampleLocationsEXT {
+    deUint32                    subpassIndex;
+    VkSampleLocationsInfoEXT    sampleLocationsInfo;
+} VkSubpassSampleLocationsEXT;
+
+typedef struct VkRenderPassSampleLocationsBeginInfoEXT {
+    VkStructureType                          sType;
+    const void*                              pNext;
+    deUint32                                 attachmentInitialSampleLocationsCount;
+    const VkAttachmentSampleLocationsEXT*    pAttachmentInitialSampleLocations;
+    deUint32                                 postSubpassSampleLocationsCount;
+    const VkSubpassSampleLocationsEXT*       pPostSubpassSampleLocations;
+} VkRenderPassSampleLocationsBeginInfoEXT;
+
+typedef struct VkPipelineSampleLocationsStateCreateInfoEXT {
+    VkStructureType             sType;
+    const void*                 pNext;
+    VkBool32                    sampleLocationsEnable;
+    VkSampleLocationsInfoEXT    sampleLocationsInfo;
+} VkPipelineSampleLocationsStateCreateInfoEXT;
+
+typedef struct VkPhysicalDeviceSampleLocationsPropertiesEXT {
+    VkStructureType       sType;
+    void*                 pNext;
+    VkSampleCountFlags    sampleLocationSampleCounts;
+    VkExtent2D            maxSampleLocationGridSize;
+    float                 sampleLocationCoordinateRange[2];
+    deUint32              sampleLocationSubPixelBits;
+    VkBool32              variableSampleLocations;
+} VkPhysicalDeviceSampleLocationsPropertiesEXT;
+
+typedef struct VkMultisamplePropertiesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkExtent2D         maxSampleLocationGridSize;
+} VkMultisamplePropertiesEXT;
+
+typedef void (VKAPI_PTR *PFN_vkCmdSetSampleLocationsEXT)(VkCommandBuffer commandBuffer, const VkSampleLocationsInfoEXT* pSampleLocationsInfo);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceMultisamplePropertiesEXT)(VkPhysicalDevice physicalDevice, VkSampleCountFlagBits samples, VkMultisamplePropertiesEXT* pMultisampleProperties);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkCmdSetSampleLocationsEXT(
+    VkCommandBuffer                             commandBuffer,
+    const VkSampleLocationsInfoEXT*             pSampleLocationsInfo);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMultisamplePropertiesEXT(
+    VkPhysicalDevice                            physicalDevice,
+    VkSampleCountFlagBits                       samples,
+    VkMultisamplePropertiesEXT*                 pMultisampleProperties);
+#endif
+
+
+#define VK_EXT_blend_operation_advanced 1
+#define VK_EXT_BLEND_OPERATION_ADVANCED_SPEC_VERSION 2
+#define VK_EXT_BLEND_OPERATION_ADVANCED_EXTENSION_NAME "VK_EXT_blend_operation_advanced"
+
+typedef enum VkBlendOverlapEXT {
+    VK_BLEND_OVERLAP_UNCORRELATED_EXT = 0,
+    VK_BLEND_OVERLAP_DISJOINT_EXT = 1,
+    VK_BLEND_OVERLAP_CONJOINT_EXT = 2,
+    VK_BLEND_OVERLAP_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkBlendOverlapEXT;
+typedef struct VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           advancedBlendCoherentOperations;
+} VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT;
+
+typedef struct VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    deUint32           advancedBlendMaxColorAttachments;
+    VkBool32           advancedBlendIndependentBlend;
+    VkBool32           advancedBlendNonPremultipliedSrcColor;
+    VkBool32           advancedBlendNonPremultipliedDstColor;
+    VkBool32           advancedBlendCorrelatedOverlap;
+    VkBool32           advancedBlendAllOperations;
+} VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT;
+
+typedef struct VkPipelineColorBlendAdvancedStateCreateInfoEXT {
+    VkStructureType      sType;
+    const void*          pNext;
+    VkBool32             srcPremultiplied;
+    VkBool32             dstPremultiplied;
+    VkBlendOverlapEXT    blendOverlap;
+} VkPipelineColorBlendAdvancedStateCreateInfoEXT;
+
+
+
+#define VK_EXT_post_depth_coverage 1
+#define VK_EXT_POST_DEPTH_COVERAGE_SPEC_VERSION 1
+#define VK_EXT_POST_DEPTH_COVERAGE_EXTENSION_NAME "VK_EXT_post_depth_coverage"
+
+
+#define VK_EXT_image_drm_format_modifier 1
+#define VK_EXT_IMAGE_DRM_FORMAT_MODIFIER_SPEC_VERSION 1
+#define VK_EXT_IMAGE_DRM_FORMAT_MODIFIER_EXTENSION_NAME "VK_EXT_image_drm_format_modifier"
+typedef struct VkDrmFormatModifierPropertiesEXT {
+    deUint64                drmFormatModifier;
+    deUint32                drmFormatModifierPlaneCount;
+    VkFormatFeatureFlags    drmFormatModifierTilingFeatures;
+} VkDrmFormatModifierPropertiesEXT;
+
+typedef struct VkDrmFormatModifierPropertiesListEXT {
+    VkStructureType                      sType;
+    void*                                pNext;
+    deUint32                             drmFormatModifierCount;
+    VkDrmFormatModifierPropertiesEXT*    pDrmFormatModifierProperties;
+} VkDrmFormatModifierPropertiesListEXT;
+
+typedef struct VkPhysicalDeviceImageDrmFormatModifierInfoEXT {
+    VkStructureType    sType;
+    const void*        pNext;
+    deUint64           drmFormatModifier;
+    VkSharingMode      sharingMode;
+    deUint32           queueFamilyIndexCount;
+    const deUint32*    pQueueFamilyIndices;
+} VkPhysicalDeviceImageDrmFormatModifierInfoEXT;
+
+typedef struct VkImageDrmFormatModifierListCreateInfoEXT {
+    VkStructureType    sType;
+    const void*        pNext;
+    deUint32           drmFormatModifierCount;
+    const deUint64*    pDrmFormatModifiers;
+} VkImageDrmFormatModifierListCreateInfoEXT;
+
+typedef struct VkImageDrmFormatModifierExplicitCreateInfoEXT {
+    VkStructureType               sType;
+    const void*                   pNext;
+    deUint64                      drmFormatModifier;
+    deUint32                      drmFormatModifierPlaneCount;
+    const VkSubresourceLayout*    pPlaneLayouts;
+} VkImageDrmFormatModifierExplicitCreateInfoEXT;
+
+typedef struct VkImageDrmFormatModifierPropertiesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    deUint64           drmFormatModifier;
+} VkImageDrmFormatModifierPropertiesEXT;
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetImageDrmFormatModifierPropertiesEXT)(VkDevice device, VkImage image, VkImageDrmFormatModifierPropertiesEXT* pProperties);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkGetImageDrmFormatModifierPropertiesEXT(
+    VkDevice                                    device,
+    VkImage                                     image,
+    VkImageDrmFormatModifierPropertiesEXT*      pProperties);
+#endif
+
+
+#define VK_EXT_filter_cubic 1
+#define VK_EXT_FILTER_CUBIC_SPEC_VERSION  3
+#define VK_EXT_FILTER_CUBIC_EXTENSION_NAME "VK_EXT_filter_cubic"
+typedef struct VkPhysicalDeviceImageViewImageFormatInfoEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkImageViewType    imageViewType;
+} VkPhysicalDeviceImageViewImageFormatInfoEXT;
+
+typedef struct VkFilterCubicImageViewImageFormatPropertiesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           filterCubic;
+    VkBool32           filterCubicMinmax;
+} VkFilterCubicImageViewImageFormatPropertiesEXT;
+
+
+
+#define VK_EXT_global_priority 1
+#define VK_EXT_GLOBAL_PRIORITY_SPEC_VERSION 2
+#define VK_EXT_GLOBAL_PRIORITY_EXTENSION_NAME "VK_EXT_global_priority"
+
+typedef enum VkQueueGlobalPriorityEXT {
+    VK_QUEUE_GLOBAL_PRIORITY_LOW_EXT = 128,
+    VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT = 256,
+    VK_QUEUE_GLOBAL_PRIORITY_HIGH_EXT = 512,
+    VK_QUEUE_GLOBAL_PRIORITY_REALTIME_EXT = 1024,
+    VK_QUEUE_GLOBAL_PRIORITY_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkQueueGlobalPriorityEXT;
+typedef struct VkDeviceQueueGlobalPriorityCreateInfoEXT {
+    VkStructureType             sType;
+    const void*                 pNext;
+    VkQueueGlobalPriorityEXT    globalPriority;
+} VkDeviceQueueGlobalPriorityCreateInfoEXT;
+
+
+
+#define VK_EXT_external_memory_host 1
+#define VK_EXT_EXTERNAL_MEMORY_HOST_SPEC_VERSION 1
+#define VK_EXT_EXTERNAL_MEMORY_HOST_EXTENSION_NAME "VK_EXT_external_memory_host"
+typedef struct VkImportMemoryHostPointerInfoEXT {
+    VkStructureType                       sType;
+    const void*                           pNext;
+    VkExternalMemoryHandleTypeFlagBits    handleType;
+    void*                                 pHostPointer;
+} VkImportMemoryHostPointerInfoEXT;
+
+typedef struct VkMemoryHostPointerPropertiesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    deUint32           memoryTypeBits;
+} VkMemoryHostPointerPropertiesEXT;
+
+typedef struct VkPhysicalDeviceExternalMemoryHostPropertiesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkDeviceSize       minImportedHostPointerAlignment;
+} VkPhysicalDeviceExternalMemoryHostPropertiesEXT;
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryHostPointerPropertiesEXT)(VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, const void* pHostPointer, VkMemoryHostPointerPropertiesEXT* pMemoryHostPointerProperties);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryHostPointerPropertiesEXT(
+    VkDevice                                    device,
+    VkExternalMemoryHandleTypeFlagBits          handleType,
+    const void*                                 pHostPointer,
+    VkMemoryHostPointerPropertiesEXT*           pMemoryHostPointerProperties);
+#endif
+
+
+#define VK_EXT_calibrated_timestamps 1
+#define VK_EXT_CALIBRATED_TIMESTAMPS_SPEC_VERSION 1
+#define VK_EXT_CALIBRATED_TIMESTAMPS_EXTENSION_NAME "VK_EXT_calibrated_timestamps"
+
+typedef enum VkTimeDomainEXT {
+    VK_TIME_DOMAIN_DEVICE_EXT = 0,
+    VK_TIME_DOMAIN_CLOCK_MONOTONIC_EXT = 1,
+    VK_TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT = 2,
+    VK_TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT = 3,
+    VK_TIME_DOMAIN_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkTimeDomainEXT;
+typedef struct VkCalibratedTimestampInfoEXT {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkTimeDomainEXT    timeDomain;
+} VkCalibratedTimestampInfoEXT;
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT)(VkPhysicalDevice physicalDevice, deUint32* pTimeDomainCount, VkTimeDomainEXT* pTimeDomains);
+typedef VkResult (VKAPI_PTR *PFN_vkGetCalibratedTimestampsEXT)(VkDevice device, deUint32 timestampCount, const VkCalibratedTimestampInfoEXT* pTimestampInfos, deUint64* pTimestamps, deUint64* pMaxDeviation);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceCalibrateableTimeDomainsEXT(
+    VkPhysicalDevice                            physicalDevice,
+    deUint32*                                   pTimeDomainCount,
+    VkTimeDomainEXT*                            pTimeDomains);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetCalibratedTimestampsEXT(
+    VkDevice                                    device,
+    deUint32                                    timestampCount,
+    const VkCalibratedTimestampInfoEXT*         pTimestampInfos,
+    deUint64*                                   pTimestamps,
+    deUint64*                                   pMaxDeviation);
+#endif
+
+
+#define VK_EXT_vertex_attribute_divisor 1
+#define VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_SPEC_VERSION 3
+#define VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME "VK_EXT_vertex_attribute_divisor"
+typedef struct VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    deUint32           maxVertexAttribDivisor;
+} VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT;
+
+typedef struct VkVertexInputBindingDivisorDescriptionEXT {
+    deUint32    binding;
+    deUint32    divisor;
+} VkVertexInputBindingDivisorDescriptionEXT;
+
+typedef struct VkPipelineVertexInputDivisorStateCreateInfoEXT {
+    VkStructureType                                     sType;
+    const void*                                         pNext;
+    deUint32                                            vertexBindingDivisorCount;
+    const VkVertexInputBindingDivisorDescriptionEXT*    pVertexBindingDivisors;
+} VkPipelineVertexInputDivisorStateCreateInfoEXT;
+
+typedef struct VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           vertexAttributeInstanceRateDivisor;
+    VkBool32           vertexAttributeInstanceRateZeroDivisor;
+} VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT;
+
+
+
+#define VK_EXT_pci_bus_info 1
+#define VK_EXT_PCI_BUS_INFO_SPEC_VERSION  2
+#define VK_EXT_PCI_BUS_INFO_EXTENSION_NAME "VK_EXT_pci_bus_info"
+typedef struct VkPhysicalDevicePCIBusInfoPropertiesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    deUint32           pciDomain;
+    deUint32           pciBus;
+    deUint32           pciDevice;
+    deUint32           pciFunction;
+} VkPhysicalDevicePCIBusInfoPropertiesEXT;
+
+
+
+#define VK_EXT_subgroup_size_control 1
+#define VK_EXT_SUBGROUP_SIZE_CONTROL_SPEC_VERSION 2
+#define VK_EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME "VK_EXT_subgroup_size_control"
+typedef struct VkPhysicalDeviceSubgroupSizeControlFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           subgroupSizeControl;
+    VkBool32           computeFullSubgroups;
+} VkPhysicalDeviceSubgroupSizeControlFeaturesEXT;
+
+typedef struct VkPhysicalDeviceSubgroupSizeControlPropertiesEXT {
+    VkStructureType       sType;
+    void*                 pNext;
+    deUint32              minSubgroupSize;
+    deUint32              maxSubgroupSize;
+    deUint32              maxComputeWorkgroupSubgroups;
+    VkShaderStageFlags    requiredSubgroupSizeStages;
+} VkPhysicalDeviceSubgroupSizeControlPropertiesEXT;
+
+typedef struct VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    deUint32           requiredSubgroupSize;
+} VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT;
+
+
+
+#define VK_EXT_shader_image_atomic_int64 1
+#define VK_EXT_SHADER_IMAGE_ATOMIC_INT64_SPEC_VERSION 1
+#define VK_EXT_SHADER_IMAGE_ATOMIC_INT64_EXTENSION_NAME "VK_EXT_shader_image_atomic_int64"
+typedef struct VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           shaderImageInt64Atomics;
+    VkBool32           sparseImageInt64Atomics;
+} VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT;
+
+
+
+#define VK_EXT_memory_budget 1
+#define VK_EXT_MEMORY_BUDGET_SPEC_VERSION 1
+#define VK_EXT_MEMORY_BUDGET_EXTENSION_NAME "VK_EXT_memory_budget"
+typedef struct VkPhysicalDeviceMemoryBudgetPropertiesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkDeviceSize       heapBudget[VK_MAX_MEMORY_HEAPS];
+    VkDeviceSize       heapUsage[VK_MAX_MEMORY_HEAPS];
+} VkPhysicalDeviceMemoryBudgetPropertiesEXT;
+
+
+
+#define VK_EXT_fragment_shader_interlock 1
+#define VK_EXT_FRAGMENT_SHADER_INTERLOCK_SPEC_VERSION 1
+#define VK_EXT_FRAGMENT_SHADER_INTERLOCK_EXTENSION_NAME "VK_EXT_fragment_shader_interlock"
+typedef struct VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           fragmentShaderSampleInterlock;
+    VkBool32           fragmentShaderPixelInterlock;
+    VkBool32           fragmentShaderShadingRateInterlock;
+} VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT;
+
+
+
+#define VK_EXT_ycbcr_image_arrays 1
+#define VK_EXT_YCBCR_IMAGE_ARRAYS_SPEC_VERSION 1
+#define VK_EXT_YCBCR_IMAGE_ARRAYS_EXTENSION_NAME "VK_EXT_ycbcr_image_arrays"
+typedef struct VkPhysicalDeviceYcbcrImageArraysFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           ycbcrImageArrays;
+} VkPhysicalDeviceYcbcrImageArraysFeaturesEXT;
+
+
+
+#define VK_EXT_headless_surface 1
+#define VK_EXT_HEADLESS_SURFACE_SPEC_VERSION 1
+#define VK_EXT_HEADLESS_SURFACE_EXTENSION_NAME "VK_EXT_headless_surface"
+typedef VkFlags VkHeadlessSurfaceCreateFlagsEXT;
+typedef struct VkHeadlessSurfaceCreateInfoEXT {
+    VkStructureType                    sType;
+    const void*                        pNext;
+    VkHeadlessSurfaceCreateFlagsEXT    flags;
+} VkHeadlessSurfaceCreateInfoEXT;
+
+typedef VkResult (VKAPI_PTR *PFN_vkCreateHeadlessSurfaceEXT)(VkInstance instance, const VkHeadlessSurfaceCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateHeadlessSurfaceEXT(
+    VkInstance                                  instance,
+    const VkHeadlessSurfaceCreateInfoEXT*       pCreateInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkSurfaceKHR*                               pSurface);
+#endif
+
+
+#define VK_EXT_line_rasterization 1
+#define VK_EXT_LINE_RASTERIZATION_SPEC_VERSION 1
+#define VK_EXT_LINE_RASTERIZATION_EXTENSION_NAME "VK_EXT_line_rasterization"
+
+typedef enum VkLineRasterizationModeEXT {
+    VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT = 0,
+    VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT = 1,
+    VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT = 2,
+    VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT = 3,
+    VK_LINE_RASTERIZATION_MODE_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkLineRasterizationModeEXT;
+typedef struct VkPhysicalDeviceLineRasterizationFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           rectangularLines;
+    VkBool32           bresenhamLines;
+    VkBool32           smoothLines;
+    VkBool32           stippledRectangularLines;
+    VkBool32           stippledBresenhamLines;
+    VkBool32           stippledSmoothLines;
+} VkPhysicalDeviceLineRasterizationFeaturesEXT;
+
+typedef struct VkPhysicalDeviceLineRasterizationPropertiesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    deUint32           lineSubPixelPrecisionBits;
+} VkPhysicalDeviceLineRasterizationPropertiesEXT;
+
+typedef struct VkPipelineRasterizationLineStateCreateInfoEXT {
+    VkStructureType               sType;
+    const void*                   pNext;
+    VkLineRasterizationModeEXT    lineRasterizationMode;
+    VkBool32                      stippledLineEnable;
+    deUint32                      lineStippleFactor;
+    deUint16                      lineStipplePattern;
+} VkPipelineRasterizationLineStateCreateInfoEXT;
+
+typedef void (VKAPI_PTR *PFN_vkCmdSetLineStippleEXT)(VkCommandBuffer commandBuffer, deUint32 lineStippleFactor, deUint16 lineStipplePattern);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkCmdSetLineStippleEXT(
+    VkCommandBuffer                             commandBuffer,
+    deUint32                                    lineStippleFactor,
+    deUint16                                    lineStipplePattern);
+#endif
+
+
+#define VK_EXT_shader_atomic_float 1
+#define VK_EXT_SHADER_ATOMIC_FLOAT_SPEC_VERSION 1
+#define VK_EXT_SHADER_ATOMIC_FLOAT_EXTENSION_NAME "VK_EXT_shader_atomic_float"
+typedef struct VkPhysicalDeviceShaderAtomicFloatFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           shaderBufferFloat32Atomics;
+    VkBool32           shaderBufferFloat32AtomicAdd;
+    VkBool32           shaderBufferFloat64Atomics;
+    VkBool32           shaderBufferFloat64AtomicAdd;
+    VkBool32           shaderSharedFloat32Atomics;
+    VkBool32           shaderSharedFloat32AtomicAdd;
+    VkBool32           shaderSharedFloat64Atomics;
+    VkBool32           shaderSharedFloat64AtomicAdd;
+    VkBool32           shaderImageFloat32Atomics;
+    VkBool32           shaderImageFloat32AtomicAdd;
+    VkBool32           sparseImageFloat32Atomics;
+    VkBool32           sparseImageFloat32AtomicAdd;
+} VkPhysicalDeviceShaderAtomicFloatFeaturesEXT;
+
+
+
+#define VK_EXT_index_type_uint8 1
+#define VK_EXT_INDEX_TYPE_UINT8_SPEC_VERSION 1
+#define VK_EXT_INDEX_TYPE_UINT8_EXTENSION_NAME "VK_EXT_index_type_uint8"
+typedef struct VkPhysicalDeviceIndexTypeUint8FeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           indexTypeUint8;
+} VkPhysicalDeviceIndexTypeUint8FeaturesEXT;
+
+
+
+#define VK_EXT_extended_dynamic_state 1
+#define VK_EXT_EXTENDED_DYNAMIC_STATE_SPEC_VERSION 1
+#define VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME "VK_EXT_extended_dynamic_state"
+typedef struct VkPhysicalDeviceExtendedDynamicStateFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           extendedDynamicState;
+} VkPhysicalDeviceExtendedDynamicStateFeaturesEXT;
+
+typedef void (VKAPI_PTR *PFN_vkCmdSetCullModeEXT)(VkCommandBuffer commandBuffer, VkCullModeFlags cullMode);
+typedef void (VKAPI_PTR *PFN_vkCmdSetFrontFaceEXT)(VkCommandBuffer commandBuffer, VkFrontFace frontFace);
+typedef void (VKAPI_PTR *PFN_vkCmdSetPrimitiveTopologyEXT)(VkCommandBuffer commandBuffer, VkPrimitiveTopology primitiveTopology);
+typedef void (VKAPI_PTR *PFN_vkCmdSetViewportWithCountEXT)(VkCommandBuffer commandBuffer, deUint32 viewportCount, const VkViewport* pViewports);
+typedef void (VKAPI_PTR *PFN_vkCmdSetScissorWithCountEXT)(VkCommandBuffer commandBuffer, deUint32 scissorCount, const VkRect2D* pScissors);
+typedef void (VKAPI_PTR *PFN_vkCmdBindVertexBuffers2EXT)(VkCommandBuffer commandBuffer, deUint32 firstBinding, deUint32 bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets, const VkDeviceSize* pSizes, const VkDeviceSize* pStrides);
+typedef void (VKAPI_PTR *PFN_vkCmdSetDepthTestEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 depthTestEnable);
+typedef void (VKAPI_PTR *PFN_vkCmdSetDepthWriteEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 depthWriteEnable);
+typedef void (VKAPI_PTR *PFN_vkCmdSetDepthCompareOpEXT)(VkCommandBuffer commandBuffer, VkCompareOp depthCompareOp);
+typedef void (VKAPI_PTR *PFN_vkCmdSetDepthBoundsTestEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 depthBoundsTestEnable);
+typedef void (VKAPI_PTR *PFN_vkCmdSetStencilTestEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 stencilTestEnable);
+typedef void (VKAPI_PTR *PFN_vkCmdSetStencilOpEXT)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, VkStencilOp failOp, VkStencilOp passOp, VkStencilOp depthFailOp, VkCompareOp compareOp);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkCmdSetCullModeEXT(
+    VkCommandBuffer                             commandBuffer,
+    VkCullModeFlags                             cullMode);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetFrontFaceEXT(
+    VkCommandBuffer                             commandBuffer,
+    VkFrontFace                                 frontFace);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetPrimitiveTopologyEXT(
+    VkCommandBuffer                             commandBuffer,
+    VkPrimitiveTopology                         primitiveTopology);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetViewportWithCountEXT(
+    VkCommandBuffer                             commandBuffer,
+    deUint32                                    viewportCount,
+    const VkViewport*                           pViewports);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetScissorWithCountEXT(
+    VkCommandBuffer                             commandBuffer,
+    deUint32                                    scissorCount,
+    const VkRect2D*                             pScissors);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdBindVertexBuffers2EXT(
+    VkCommandBuffer                             commandBuffer,
+    deUint32                                    firstBinding,
+    deUint32                                    bindingCount,
+    const VkBuffer*                             pBuffers,
+    const VkDeviceSize*                         pOffsets,
+    const VkDeviceSize*                         pSizes,
+    const VkDeviceSize*                         pStrides);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthTestEnableEXT(
+    VkCommandBuffer                             commandBuffer,
+    VkBool32                                    depthTestEnable);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthWriteEnableEXT(
+    VkCommandBuffer                             commandBuffer,
+    VkBool32                                    depthWriteEnable);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthCompareOpEXT(
+    VkCommandBuffer                             commandBuffer,
+    VkCompareOp                                 depthCompareOp);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBoundsTestEnableEXT(
+    VkCommandBuffer                             commandBuffer,
+    VkBool32                                    depthBoundsTestEnable);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilTestEnableEXT(
+    VkCommandBuffer                             commandBuffer,
+    VkBool32                                    stencilTestEnable);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilOpEXT(
+    VkCommandBuffer                             commandBuffer,
+    VkStencilFaceFlags                          faceMask,
+    VkStencilOp                                 failOp,
+    VkStencilOp                                 passOp,
+    VkStencilOp                                 depthFailOp,
+    VkCompareOp                                 compareOp);
+#endif
+
+
+#define VK_EXT_shader_demote_to_helper_invocation 1
+#define VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_SPEC_VERSION 1
+#define VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME "VK_EXT_shader_demote_to_helper_invocation"
+typedef struct VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           shaderDemoteToHelperInvocation;
+} VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT;
+
+
+
+#define VK_EXT_texel_buffer_alignment 1
+#define VK_EXT_TEXEL_BUFFER_ALIGNMENT_SPEC_VERSION 1
+#define VK_EXT_TEXEL_BUFFER_ALIGNMENT_EXTENSION_NAME "VK_EXT_texel_buffer_alignment"
+typedef struct VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           texelBufferAlignment;
+} VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT;
+
+typedef struct VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkDeviceSize       storageTexelBufferOffsetAlignmentBytes;
+    VkBool32           storageTexelBufferOffsetSingleTexelAlignment;
+    VkDeviceSize       uniformTexelBufferOffsetAlignmentBytes;
+    VkBool32           uniformTexelBufferOffsetSingleTexelAlignment;
+} VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT;
+
+
+
+#define VK_EXT_robustness2 1
+#define VK_EXT_ROBUSTNESS_2_SPEC_VERSION  1
+#define VK_EXT_ROBUSTNESS_2_EXTENSION_NAME "VK_EXT_robustness2"
+typedef struct VkPhysicalDeviceRobustness2FeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           robustBufferAccess2;
+    VkBool32           robustImageAccess2;
+    VkBool32           nullDescriptor;
+} VkPhysicalDeviceRobustness2FeaturesEXT;
+
+typedef struct VkPhysicalDeviceRobustness2PropertiesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkDeviceSize       robustStorageBufferAccessSizeAlignment;
+    VkDeviceSize       robustUniformBufferAccessSizeAlignment;
+} VkPhysicalDeviceRobustness2PropertiesEXT;
+
+
+
+#define VK_EXT_custom_border_color 1
+#define VK_EXT_CUSTOM_BORDER_COLOR_SPEC_VERSION 12
+#define VK_EXT_CUSTOM_BORDER_COLOR_EXTENSION_NAME "VK_EXT_custom_border_color"
+typedef struct VkSamplerCustomBorderColorCreateInfoEXT {
+    VkStructureType      sType;
+    const void*          pNext;
+    VkClearColorValue    customBorderColor;
+    VkFormat             format;
+} VkSamplerCustomBorderColorCreateInfoEXT;
+
+typedef struct VkPhysicalDeviceCustomBorderColorPropertiesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    deUint32           maxCustomBorderColorSamplers;
+} VkPhysicalDeviceCustomBorderColorPropertiesEXT;
+
+typedef struct VkPhysicalDeviceCustomBorderColorFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           customBorderColors;
+    VkBool32           customBorderColorWithoutFormat;
+} VkPhysicalDeviceCustomBorderColorFeaturesEXT;
+
+
+
+#define VK_EXT_image_robustness 1
+#define VK_EXT_IMAGE_ROBUSTNESS_SPEC_VERSION 1
+#define VK_EXT_IMAGE_ROBUSTNESS_EXTENSION_NAME "VK_EXT_image_robustness"
+typedef struct VkPhysicalDeviceImageRobustnessFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           robustImageAccess;
+} VkPhysicalDeviceImageRobustnessFeaturesEXT;
+
+
+
+#define VK_EXT_4444_formats 1
+#define VK_EXT_4444_FORMATS_SPEC_VERSION  1
+#define VK_EXT_4444_FORMATS_EXTENSION_NAME "VK_EXT_4444_formats"
+typedef struct VkPhysicalDevice4444FormatsFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           formatA4R4G4B4;
+    VkBool32           formatA4B4G4R4;
+} VkPhysicalDevice4444FormatsFeaturesEXT;
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
index 4032289..5899d2f 100644 (file)
@@ -286,6 +286,8 @@ void DescriptorSetUpdateBuilder::update (const DeviceInterface& vk, VkDevice dev
        vk.updateDescriptorSets(device, (deUint32)writes.size(), writePtr, (deUint32)m_copies.size(), copyPtr);
 }
 
+#ifndef CTS_USES_VULKANSC
+
 void DescriptorSetUpdateBuilder::updateWithPush (const DeviceInterface& vk, VkCommandBuffer cmd, VkPipelineBindPoint bindPoint, VkPipelineLayout pipelineLayout, deUint32 setIdx, deUint32 descriptorIdx, deUint32 numDescriptors) const
 {
        // Write all descriptors or just a subset?
@@ -313,6 +315,8 @@ void DescriptorSetUpdateBuilder::updateWithPush (const DeviceInterface& vk, VkCo
        vk.cmdPushDescriptorSetKHR(cmd, bindPoint, pipelineLayout, setIdx, count, writePtr);
 }
 
+#endif // CTS_USES_VULKANSC
+
 void DescriptorSetUpdateBuilder::clear(void)
 {
        m_writeDescriptorInfos.clear();
index ec7f921..510e0ee 100644 (file)
@@ -204,6 +204,7 @@ public:
                return write(destSet, destLocation.m_binding, destLocation.m_arrayElement, 1u, descriptorType, DE_NULL, DE_NULL, pTexelBufferView);
        }
 
+#ifndef CTS_USES_VULKANSC
        inline DescriptorSetUpdateBuilder&      writeSingle                                     (VkDescriptorSet                                                                                destSet,
                                                                                                                                         const Location&                                                                                destLocation,
                                                                                                                                         VkDescriptorType                                                                               descriptorType,
@@ -211,6 +212,7 @@ public:
        {
                return write(destSet, destLocation.m_binding, destLocation.m_arrayElement, 1u, descriptorType, DE_NULL, DE_NULL, DE_NULL, pAccelerationStructure);
        }
+#endif // CTS_USES_VULKANSC
 
        inline DescriptorSetUpdateBuilder&      writeArray                                      (VkDescriptorSet                                destSet,
                                                                                                                                         const Location&                                destLocation,
@@ -239,6 +241,7 @@ public:
                return write(destSet, destLocation.m_binding, destLocation.m_arrayElement, numDescriptors, descriptorType, DE_NULL, DE_NULL, pTexelBufferView);
        }
 
+#ifndef CTS_USES_VULKANSC
        inline DescriptorSetUpdateBuilder&      writeArray                                      (VkDescriptorSet                                                                                destSet,
                                                                                                                                         const Location&                                                                                destLocation,
                                                                                                                                         VkDescriptorType                                                                               descriptorType,
@@ -247,6 +250,7 @@ public:
        {
                return write(destSet, destLocation.m_binding, destLocation.m_arrayElement, numDescriptors, descriptorType, DE_NULL, DE_NULL, DE_NULL, pAccelerationStructure);
        }
+#endif // CTS_USES_VULKANSC
 
        inline DescriptorSetUpdateBuilder&      copySingle                                      (VkDescriptorSet        srcSet,
                                                                                                                                         const Location&        srcLocation,
index fbc78e2..8b91a43 100644 (file)
@@ -30,6 +30,8 @@
 namespace vk
 {
 
+#ifndef CTS_USES_VULKANSC
+
 namespace
 {
 
@@ -169,10 +171,17 @@ DebugReportRecorder::~DebugReportRecorder (void)
 {
 }
 
+#endif // CTS_USES_VULKANSC
+
 bool isDebugReportSupported (const PlatformInterface& vkp)
 {
+#ifndef CTS_USES_VULKANSC
        return isExtensionSupported(enumerateInstanceExtensionProperties(vkp, DE_NULL),
                                                                RequiredExtension("VK_EXT_debug_report"));
+#else // CTS_USES_VULKANSC
+       DE_UNREF(vkp);
+       return false;
+#endif // CTS_USES_VULKANSC
 }
 
 } // vk
index 52c3315..07d6ca4 100644 (file)
@@ -32,6 +32,8 @@
 namespace vk
 {
 
+#ifndef CTS_USES_VULKANSC
+
 struct DebugReportMessage
 {
        VkDebugReportFlagsEXT           flags;
@@ -101,6 +103,8 @@ private:
        const bool                                                              m_print_errors;
 };
 
+#endif // CTS_USES_VULKANSC
+
 bool   isDebugReportSupported          (const PlatformInterface& vkp);
 
 } // vk
index 2055e10..0d0a620 100644 (file)
@@ -95,9 +95,10 @@ void checkWsiResult (VkResult result, const char* msg, const char* file, int lin
 {
        if (result == VK_SUBOPTIMAL_KHR)
                return;
-
+#ifndef CTS_USES_VULKANSC
        if (result == VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT)
                return;
+#endif // CTS_USES_VULKANSC
 
        checkResult(result, msg, file, line);
 }
index 9bd4711..630530b 100644 (file)
@@ -162,6 +162,8 @@ typedef VKAPI_ATTR void             (VKAPI_CALL* PFN_vkInternalFreeNotification)            (void*
                                                                                                                                                                 VkInternalAllocationType       allocationType,
                                                                                                                                                                 VkSystemAllocationScope        allocationScope);
 
+#ifndef CTS_USES_VULKANSC
+
 typedef VKAPI_ATTR VkBool32    (VKAPI_CALL* PFN_vkDebugReportCallbackEXT)                      (VkDebugReportFlagsEXT          flags,
                                                                                                                                                                 VkDebugReportObjectTypeEXT     objectType,
                                                                                                                                                                 deUint64                                       object,
@@ -175,9 +177,19 @@ typedef VKAPI_ATTR VkBool32 (VKAPI_CALL *PFN_vkDebugUtilsMessengerCallbackEXT)     (
                                                                                                                                                                 VkDebugUtilsMessageTypeFlagsEXT                                        messageTypes,
                                                                                                                                                                 const struct VkDebugUtilsMessengerCallbackDataEXT*     pCallbackData,
                                                                                                                                                                 void*                                                                                          pUserData);
+
+#endif // CTS_USES_VULKANSC
+
 typedef VKAPI_ATTR void                (VKAPI_CALL* PFN_vkDeviceMemoryReportCallbackEXT)       (const struct VkDeviceMemoryReportCallbackDataEXT*      pCallbackData,
                                                                                                                                                                 void*                                                                                          pUserData);
 
+#ifdef CTS_USES_VULKANSC
+struct VkFaultData;
+typedef VKAPI_ATTR void                (VKAPI_CALL *PFN_vkFaultCallbackFunction)                       (VkBool32                                                                                       incompleteFaultData,
+                                                                                                                                                                deUint32                                                                                       faultCount,
+                                                                                                                                                                VkFaultData*                                                                           pFaultData);
+#endif // CTS_USES_VULKANSC
+
 #include "vkStructTypes.inl"
 
 extern "C"
index 3e51299..00d8ec2 100644 (file)
@@ -34,9 +34,11 @@ DeviceFeatures::DeviceFeatures       (const InstanceInterface&                       vki,
 {
        VkPhysicalDeviceRobustness2FeaturesEXT*                 robustness2Features                     = nullptr;
        VkPhysicalDeviceImageRobustnessFeaturesEXT*             imageRobustnessFeatures         = nullptr;
-       VkPhysicalDeviceFragmentShadingRateFeaturesKHR* fragmentShadingRateFeatures     = nullptr;
+#ifndef CTS_USES_VULKANSC
+       VkPhysicalDeviceFragmentShadingRateFeaturesKHR* fragmentShadingRateFeatures = nullptr;
        VkPhysicalDeviceShadingRateImageFeaturesNV*             shadingRateImageFeatures        = nullptr;
        VkPhysicalDeviceFragmentDensityMapFeaturesEXT*  fragmentDensityMapFeatures      = nullptr;
+#endif // CTS_USES_VULKANSC
 
        m_coreFeatures2         = initVulkanStructure();
        m_vulkan11Features      = initVulkanStructure();
@@ -87,13 +89,14 @@ DeviceFeatures::DeviceFeatures      (const InstanceInterface&                       vki,
                                                robustness2Features = reinterpret_cast<VkPhysicalDeviceRobustness2FeaturesEXT*>(rawStructPtr);
                                        else if (structType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT)
                                                imageRobustnessFeatures = reinterpret_cast<VkPhysicalDeviceImageRobustnessFeaturesEXT*>(rawStructPtr);
+#ifndef CTS_USES_VULKANSC
                                        else if (structType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_FEATURES_KHR)
                                                fragmentShadingRateFeatures = reinterpret_cast<VkPhysicalDeviceFragmentShadingRateFeaturesKHR*>(rawStructPtr);
                                        else if (structType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV)
                                                shadingRateImageFeatures = reinterpret_cast<VkPhysicalDeviceShadingRateImageFeaturesNV*>(rawStructPtr);
                                        else if (structType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT)
                                                fragmentDensityMapFeatures = reinterpret_cast<VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>(rawStructPtr);
-
+#endif // CTS_USES_VULKANSC
                                        // add to chain
                                        *nextPtr        = rawStructPtr;
                                        nextPtr         = p->getFeatureTypeNext();
@@ -134,6 +137,7 @@ DeviceFeatures::DeviceFeatures      (const InstanceInterface&                       vki,
        }
        m_coreFeatures2.features.robustBufferAccess = false;
 
+#ifndef CTS_USES_VULKANSC
        // Disable VK_EXT_fragment_density_map and VK_NV_shading_rate_image features
        // that must: not be enabled if KHR fragment shading rate features are enabled.
        if (fragmentShadingRateFeatures &&
@@ -146,10 +150,12 @@ DeviceFeatures::DeviceFeatures    (const InstanceInterface&                       vki,
                if (fragmentDensityMapFeatures)
                        fragmentDensityMapFeatures->fragmentDensityMap = false;
        }
+#endif // CTS_USES_VULKANSC
 }
 
 bool DeviceFeatures::verifyFeatureAddCriteria (const FeatureStructCreationData& item, const std::vector<VkExtensionProperties>& properties)
 {
+#ifndef CTS_USES_VULKANSC
        if (deStringEqual(item.name, VK_KHR_VULKAN_MEMORY_MODEL_EXTENSION_NAME))
        {
                for (const auto& property : properties)
@@ -158,6 +164,10 @@ bool DeviceFeatures::verifyFeatureAddCriteria (const FeatureStructCreationData&
                                return (property.specVersion == item.specVersion);
                }
        }
+#else // CTS_USES_VULKANSC
+       DE_UNREF(item);
+       DE_UNREF(properties);
+#endif // CTS_USES_VULKANSC
 
        return true;
 }
index 3ddeb4b..54b44cd 100644 (file)
@@ -206,7 +206,9 @@ VK_NULL_DEFINE_DEVICE_OBJ(Event);
 VK_NULL_DEFINE_DEVICE_OBJ(QueryPool);
 VK_NULL_DEFINE_DEVICE_OBJ(BufferView);
 VK_NULL_DEFINE_DEVICE_OBJ(ImageView);
+#ifndef CTS_USES_VULKANSC
 VK_NULL_DEFINE_DEVICE_OBJ(ShaderModule);
+#endif // CTS_USES_VULKANSC
 VK_NULL_DEFINE_DEVICE_OBJ(PipelineCache);
 VK_NULL_DEFINE_DEVICE_OBJ(PipelineLayout);
 VK_NULL_DEFINE_DEVICE_OBJ(DescriptorSetLayout);
@@ -228,19 +230,25 @@ private:
 class SurfaceKHR
 {
 public:
+#ifndef CTS_USES_VULKANSC
                                                                                SurfaceKHR              (VkInstance, const VkXlibSurfaceCreateInfoKHR*)         {}
                                                                                SurfaceKHR              (VkInstance, const VkXcbSurfaceCreateInfoKHR*)          {}
                                                                                SurfaceKHR              (VkInstance, const VkWaylandSurfaceCreateInfoKHR*)      {}
                                                                                SurfaceKHR              (VkInstance, const VkAndroidSurfaceCreateInfoKHR*)      {}
                                                                                SurfaceKHR              (VkInstance, const VkWin32SurfaceCreateInfoKHR*)        {}
+#endif // CTS_USES_VULKANSC
                                                                                SurfaceKHR              (VkInstance, const VkDisplaySurfaceCreateInfoKHR*)      {}
+#ifndef CTS_USES_VULKANSC
                                                                                SurfaceKHR              (VkInstance, const VkViSurfaceCreateInfoNN*)            {}
                                                                                SurfaceKHR              (VkInstance, const VkIOSSurfaceCreateInfoMVK*)          {}
                                                                                SurfaceKHR              (VkInstance, const VkMacOSSurfaceCreateInfoMVK*)        {}
                                                                                SurfaceKHR              (VkInstance, const VkImagePipeSurfaceCreateInfoFUCHSIA*)        {}
+#endif // CTS_USES_VULKANSC
                                                                                SurfaceKHR              (VkInstance, const VkHeadlessSurfaceCreateInfoEXT*)     {}
+#ifndef CTS_USES_VULKANSC
                                                                                SurfaceKHR              (VkInstance, const VkStreamDescriptorSurfaceCreateInfoGGP*)     {}
                                                                                SurfaceKHR              (VkInstance, const VkMetalSurfaceCreateInfoEXT*)        {}
+#endif // CTS_USES_VULKANSC
                                                                                ~SurfaceKHR             (void)                                                                                          {}
 };
 
@@ -251,12 +259,14 @@ public:
                                                                                ~DisplayModeKHR (void) {}
 };
 
+#ifndef CTS_USES_VULKANSC
 class DebugReportCallbackEXT
 {
 public:
                                                                                DebugReportCallbackEXT  (VkInstance, const VkDebugReportCallbackCreateInfoEXT*) {}
                                                                                ~DebugReportCallbackEXT (void) {}
 };
+#endif // CTS_USES_VULKANSC
 
 class Device
 {
@@ -275,8 +285,10 @@ class Pipeline
 public:
        Pipeline (VkDevice, const VkGraphicsPipelineCreateInfo*) {}
        Pipeline (VkDevice, const VkComputePipelineCreateInfo*) {}
+#ifndef CTS_USES_VULKANSC
        Pipeline (VkDevice, const VkRayTracingPipelineCreateInfoNV*) {}
        Pipeline (VkDevice, const VkRayTracingPipelineCreateInfoKHR*) {}
+#endif // CTS_USES_VULKANSC
 };
 
 class RenderPass
@@ -510,6 +522,8 @@ private:
 };
 #endif // defined(USE_ANDROID_O_HARDWARE_BUFFER)
 
+#ifndef CTS_USES_VULKANSC
+
 class IndirectCommandsLayoutNV
 {
 public:
@@ -538,6 +552,8 @@ public:
                                                {}
 };
 
+#endif // CTS_USES_VULKANSC
+
 class DeferredOperationKHR
 {
 public:
@@ -545,6 +561,8 @@ public:
                                                {}
 };
 
+#ifndef CTS_USES_VULKANSC
+
 class ValidationCacheEXT
 {
 public:
@@ -552,6 +570,8 @@ public:
                                                {}
 };
 
+#endif // CTS_USES_VULKANSC
+
 class CommandBuffer
 {
 public:
@@ -559,6 +579,8 @@ public:
                                                {}
 };
 
+#ifndef CTS_USES_VULKANSC
+
 class DescriptorUpdateTemplate
 {
 public:
@@ -573,6 +595,8 @@ public:
                                                {}
 };
 
+#endif // CTS_USES_VULKANSC
+
 class CommandPool
 {
 public:
@@ -768,6 +792,8 @@ VKAPI_ATTR VkResult VKAPI_CALL createComputePipelines (VkDevice device, VkPipeli
        }
 }
 
+#ifndef CTS_USES_VULKANSC
+
 VKAPI_ATTR VkResult VKAPI_CALL createRayTracingPipelinesNV (VkDevice device, VkPipelineCache, deUint32 count, const VkRayTracingPipelineCreateInfoKHR* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines)
 {
        deUint32 allocNdx;
@@ -820,6 +846,8 @@ VKAPI_ATTR VkResult VKAPI_CALL createRayTracingPipelinesKHR (VkDevice device, Vk
        }
 }
 
+#endif // CTS_USES_VULKANSC
+
 VKAPI_ATTR VkResult VKAPI_CALL enumeratePhysicalDevices (VkInstance, deUint32* pPhysicalDeviceCount, VkPhysicalDevice* pDevices)
 {
        if (pDevices && *pPhysicalDeviceCount >= 1u)
@@ -1234,6 +1262,7 @@ VKAPI_ATTR void VKAPI_CALL getImageMemoryRequirements (VkDevice, VkImage imageHa
 
 VKAPI_ATTR VkResult VKAPI_CALL allocateMemory (VkDevice device, const VkMemoryAllocateInfo* pAllocateInfo, const VkAllocationCallbacks* pAllocator, VkDeviceMemory* pMemory)
 {
+#ifndef CTS_USES_VULKANSC
        const VkExportMemoryAllocateInfo* const                                 exportInfo      = findStructure<VkExportMemoryAllocateInfo>(pAllocateInfo->pNext);
        const VkImportAndroidHardwareBufferInfoANDROID* const   importInfo      = findStructure<VkImportAndroidHardwareBufferInfoANDROID>(pAllocateInfo->pNext);
 
@@ -1250,6 +1279,9 @@ VKAPI_ATTR VkResult VKAPI_CALL allocateMemory (VkDevice device, const VkMemoryAl
        {
                VK_NULL_RETURN((*pMemory = allocateNonDispHandle<PrivateDeviceMemory, DeviceMemory, VkDeviceMemory>(device, pAllocateInfo, pAllocator)));
        }
+#else // CTS_USES_VULKANSC
+       VK_NULL_RETURN((*pMemory = allocateNonDispHandle<PrivateDeviceMemory, DeviceMemory, VkDeviceMemory>(device, pAllocateInfo, pAllocator)));
+#endif // CTS_USES_VULKANSC
 }
 
 VKAPI_ATTR VkResult VKAPI_CALL mapMemory (VkDevice, VkDeviceMemory memHandle, VkDeviceSize offset, VkDeviceSize size, VkMemoryMapFlags flags, void** ppData)
@@ -1273,6 +1305,8 @@ VKAPI_ATTR void VKAPI_CALL unmapMemory (VkDevice device, VkDeviceMemory memHandl
        memory->unmap();
 }
 
+#ifndef CTS_USES_VULKANSC
+
 VKAPI_ATTR VkResult VKAPI_CALL getMemoryAndroidHardwareBufferANDROID (VkDevice device, const VkMemoryGetAndroidHardwareBufferInfoANDROID* pInfo, pt::AndroidHardwareBufferPtr* pBuffer)
 {
        DE_UNREF(device);
@@ -1292,6 +1326,8 @@ VKAPI_ATTR VkResult VKAPI_CALL getMemoryAndroidHardwareBufferANDROID (VkDevice d
        return VK_SUCCESS;
 }
 
+#endif // CTS_USES_VULKANSC
+
 VKAPI_ATTR VkResult VKAPI_CALL allocateDescriptorSets (VkDevice, const VkDescriptorSetAllocateInfo* pAllocateInfo, VkDescriptorSet* pDescriptorSets)
 {
        DescriptorPool* const   poolImpl        = reinterpret_cast<DescriptorPool*>((deUintptr)pAllocateInfo->descriptorPool.getInternal());
@@ -1389,16 +1425,19 @@ VKAPI_ATTR void VKAPI_CALL getPhysicalDeviceExternalBufferPropertiesKHR (VkPhysi
        pExternalBufferProperties->externalMemoryProperties.exportFromImportedHandleTypes = 0;
        pExternalBufferProperties->externalMemoryProperties.compatibleHandleTypes = 0;
 
+#ifndef CTS_USES_VULKANSC
        if (pExternalBufferInfo->handleType == VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID)
        {
                pExternalBufferProperties->externalMemoryProperties.externalMemoryFeatures = VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT | VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT;
                pExternalBufferProperties->externalMemoryProperties.exportFromImportedHandleTypes = VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID;
                pExternalBufferProperties->externalMemoryProperties.compatibleHandleTypes = VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID;
        }
+#endif // CTS_USES_VULKANSC
 }
 
 VKAPI_ATTR VkResult VKAPI_CALL getPhysicalDeviceImageFormatProperties2KHR (VkPhysicalDevice physicalDevice, const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo, VkImageFormatProperties2* pImageFormatProperties)
 {
+#ifndef CTS_USES_VULKANSC
        const VkPhysicalDeviceExternalImageFormatInfo* const    externalInfo            = findStructure<VkPhysicalDeviceExternalImageFormatInfo>(pImageFormatInfo->pNext);
        VkExternalImageFormatProperties*        const                           externalProperties      = findStructure<VkExternalImageFormatProperties>(pImageFormatProperties->pNext);
        VkResult                                                                                                result;
@@ -1452,6 +1491,9 @@ VKAPI_ATTR VkResult VKAPI_CALL getPhysicalDeviceImageFormatProperties2KHR (VkPhy
        }
 
        return VK_SUCCESS;
+#else // CTS_USES_VULKANSC
+       return getPhysicalDeviceImageFormatProperties(physicalDevice, pImageFormatInfo->format, pImageFormatInfo->type, pImageFormatInfo->tiling, pImageFormatInfo->usage, pImageFormatInfo->flags, &pImageFormatProperties->imageFormatProperties);
+#endif // CTS_USES_VULKANSC
 }
 
 // \note getInstanceProcAddr is a little bit special:
index 6444570..bbe6d6b 100644 (file)
@@ -686,6 +686,7 @@ bool validateProgram (const ProgramBinary& program, std::ostream* dst, const Spi
 
 Move<VkShaderModule> createShaderModule (const DeviceInterface& deviceInterface, VkDevice device, const ProgramBinary& binary, VkShaderModuleCreateFlags flags)
 {
+#ifndef CTS_USES_VULKANSC
        if (binary.getFormat() == PROGRAM_FORMAT_SPIRV)
        {
                const struct VkShaderModuleCreateInfo           shaderModuleInfo        =
@@ -701,6 +702,9 @@ Move<VkShaderModule> createShaderModule (const DeviceInterface& deviceInterface,
        }
        else
                TCU_THROW(NotSupportedError, "Unsupported program format");
+#else // CTS_USES_VULKANSC
+       TCU_THROW(NotSupportedError, "Vulkan SC does not have vkCreateShaderModule() defined");
+#endif // CTS_USES_VULKANSC
 }
 
 glu::ShaderType getGluShaderType (VkShaderStageFlagBits shaderStage)
@@ -729,12 +733,21 @@ VkShaderStageFlagBits getVkShaderStage (glu::ShaderType shaderType)
                VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT,
                VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT,
                VK_SHADER_STAGE_COMPUTE_BIT,
+#ifndef CTS_USES_VULKANSC
                VK_SHADER_STAGE_RAYGEN_BIT_NV,
                VK_SHADER_STAGE_ANY_HIT_BIT_NV,
                VK_SHADER_STAGE_CLOSEST_HIT_BIT_NV,
                VK_SHADER_STAGE_MISS_BIT_NV,
                VK_SHADER_STAGE_INTERSECTION_BIT_NV,
                VK_SHADER_STAGE_CALLABLE_BIT_NV,
+#else // CTS_USES_VULKANSC
+               (VkShaderStageFlagBits)64u,
+               (VkShaderStageFlagBits)128u,
+               (VkShaderStageFlagBits)256u,
+               (VkShaderStageFlagBits)512u,
+               (VkShaderStageFlagBits)1024u,
+               (VkShaderStageFlagBits)2048u
+#endif // CTS_USES_VULKANSC
        };
 
        return de::getSizedArrayElement<glu::SHADERTYPE_LAST>(s_shaderStages, shaderType);
index fe43469..de2f77c 100644 (file)
@@ -213,6 +213,10 @@ ProgramBinary*                     assembleProgram         (const vk::SpirVAsmSource& program, SpirVProgr
 void                                   disassembleProgram      (const ProgramBinary& program, std::ostream* dst);
 bool                                   validateProgram         (const ProgramBinary& program, std::ostream* dst, const SpirvValidatorOptions&);
 
+#ifdef CTS_USES_VULKANSC
+       typedef deUint32 VkShaderModuleCreateFlags;
+#endif // CTS_USES_VULKANSC
+
 Move<VkShaderModule>   createShaderModule      (const DeviceInterface& deviceInterface, VkDevice device, const ProgramBinary& binary, VkShaderModuleCreateFlags flags);
 
 glu::ShaderType                        getGluShaderType        (VkShaderStageFlagBits shaderStage);
index 4110e0f..727dc1f 100644 (file)
@@ -36,6 +36,9 @@
 
 namespace vk
 {
+
+#ifndef CTS_USES_VULKANSC
+
 struct DeferredThreadParams
 {
        const DeviceInterface&  vk;
@@ -2582,4 +2585,13 @@ void cmdTraceRaysIndirect (const DeviceInterface&                                        vk,
                                                                   indirectDeviceAddress);
 }
 
+#else
+
+deUint32 rayTracingDefineAnything()
+{
+       return 0;
+}
+
+#endif // CTS_USES_VULKANSC
+
 } // vk
index 876657d..46c7169 100644 (file)
@@ -37,6 +37,9 @@
 
 namespace vk
 {
+
+#ifndef CTS_USES_VULKANSC
+
 const VkTransformMatrixKHR identityMatrix3x4 = { { { 1.0f, 0.0f, 0.0f, 0.0f }, { 0.0f, 1.0f, 0.0f, 0.0f }, { 0.0f, 0.0f, 1.0f, 0.0f } } };
 
 template<typename T>
@@ -787,6 +790,13 @@ void cmdTraceRaysIndirect  (const DeviceInterface&                                 vk,
                                                         const VkStridedDeviceAddressRegionKHR* hitShaderBindingTableRegion,
                                                         const VkStridedDeviceAddressRegionKHR* callableShaderBindingTableRegion,
                                                         VkDeviceAddress                                                indirectDeviceAddress);
+
+#else
+
+deUint32 rayTracingDefineAnything();
+
+#endif // CTS_USES_VULKANSC
+
 } // vk
 
 #endif // _VKRAYTRACINGUTIL_HPP
index 6967f14..f43e728 100644 (file)
@@ -158,6 +158,8 @@ private:
        const VkAllocationCallbacks*    m_allocator;
 };
 
+#ifndef CTS_USES_VULKANSC
+
 template<>
 class Deleter<VkDebugReportCallbackEXT>
 {
@@ -204,6 +206,8 @@ private:
        const VkAllocationCallbacks*    m_allocator;
 };
 
+#endif // CTS_USES_VULKANSC
+
 template<>
 class Deleter<VkDescriptorSet>
 {
index fd295e0..52c5bd2 100644 (file)
@@ -50,6 +50,8 @@ Move<VkPipeline> createComputePipeline (const DeviceInterface&                                vk,
        return Move<VkPipeline>(check<VkPipeline>(object), Deleter<VkPipeline>(vk, device, pAllocator));
 }
 
+#ifndef CTS_USES_VULKANSC
+
 Move<VkPipeline> createRayTracingPipelineNV (const DeviceInterface&                                            vk,
                                                                                         VkDevice                                                                       device,
                                                                                         VkPipelineCache                                                        pipelineCache,
@@ -73,6 +75,8 @@ Move<VkPipeline> createRayTracingPipelineKHR (const DeviceInterface&                                  vk,
        return Move<VkPipeline>(check<VkPipeline>(object), Deleter<VkPipeline>(vk, device, pAllocator));
 }
 
+#endif // CTS_USES_VULKANSC
+
 Move<VkCommandBuffer> allocateCommandBuffer (const DeviceInterface& vk, VkDevice device, const VkCommandBufferAllocateInfo* pAllocateInfo)
 {
        VkCommandBuffer object = 0;
@@ -199,4 +203,47 @@ Move<VkEvent> createEvent (const DeviceInterface&          vk,
        return createEvent(vk, device, &createInfo, pAllocateInfo);
 }
 
+#ifdef CTS_USES_VULKANSC
+
+// stubs for functions removed in Vulkan SC
+
+template<>
+void Deleter<VkDeviceMemory>::operator() (VkDeviceMemory obj) const
+{
+       DE_UNREF(obj);
+}
+
+template<>
+void Deleter<VkShaderModule>::operator() (VkShaderModule obj) const
+{
+       DE_UNREF(obj);
+}
+
+template<>
+void Deleter<VkQueryPool>::operator() (VkQueryPool obj) const
+{
+       DE_UNREF(obj);
+}
+
+template<>
+void Deleter<VkDescriptorPool>::operator() (VkDescriptorPool obj) const
+{
+       DE_UNREF(obj);
+}
+
+template<>
+void Deleter<VkCommandPool>::operator() (VkCommandPool obj) const
+{
+       DE_UNREF(obj);
+}
+
+template<>
+void Deleter<VkSwapchainKHR>::operator() (VkSwapchainKHR obj) const
+{
+       DE_UNREF(obj);
+}
+
+#endif // CTS_USES_VULKANSC
+
+
 } // vk
index 90a24e6..1020295 100644 (file)
@@ -41,6 +41,7 @@ Move<VkPipeline>              createComputePipeline   (const DeviceInterface&                                 vk,
                                                                                                 VkPipelineCache                                                pipelineCache,
                                                                                                 const VkComputePipelineCreateInfo*             pCreateInfo,
                                                                                                 const VkAllocationCallbacks*                   pAllocator = DE_NULL);
+#ifndef CTS_USES_VULKANSC
 Move<VkPipeline>               createRayTracingPipelineNV(const DeviceInterface&                                       vk,
                                                                                                 VkDevice                                                               device,
                                                                                                 VkPipelineCache                                                pipelineCache,
@@ -52,6 +53,8 @@ Move<VkPipeline>              createRayTracingPipelineKHR     (const DeviceInterface&                                 vk,
                                                                                                 VkPipelineCache                                                        pipelineCache,
                                                                                                 const VkRayTracingPipelineCreateInfoKHR*       pCreateInfo,
                                                                                                 const VkAllocationCallbacks*                           pAllocator = DE_NULL);
+#endif // CTS_USES_VULKANSC
+
 Move<VkCommandBuffer>  allocateCommandBuffer   (const DeviceInterface& vk, VkDevice device, const VkCommandBufferAllocateInfo* pAllocateInfo);
 Move<VkDescriptorSet>  allocateDescriptorSet   (const DeviceInterface& vk, VkDevice device, const VkDescriptorSetAllocateInfo* pAllocateInfo);
 
index ac5dafd..7d64789 100644 (file)
@@ -159,6 +159,17 @@ VkResult createSurface (const InstanceInterface&           vki,
        // Update this function if you add more WSI implementations
        DE_STATIC_ASSERT(TYPE_LAST == 6);
 
+#ifdef CTS_USES_VULKANSC
+       DE_UNREF(vki);
+       DE_UNREF(instance);
+       DE_UNREF(wsiType);
+       DE_UNREF(nativeDisplay);
+       DE_UNREF(nativeWindow);
+       DE_UNREF(pAllocator);
+       DE_UNREF(pSurface);
+
+       TCU_THROW(NotSupportedError, "Vulkan SC does not support createSurface");
+#else // CTS_USES_VULKANSC
        switch (wsiType)
        {
                case TYPE_XLIB:
@@ -257,6 +268,8 @@ VkResult createSurface (const InstanceInterface&            vki,
                        DE_FATAL("Unknown WSI type");
                        return VK_ERROR_SURFACE_LOST_KHR;
        }
+#endif // CTS_USES_VULKANSC
+       return VK_ERROR_SURFACE_LOST_KHR;
 }
 
 Move<VkSurfaceKHR> createSurface (const InstanceInterface&             vki,
@@ -289,6 +302,14 @@ VkBool32 getPhysicalDevicePresentationSupport (const InstanceInterface&    vki,
                                                                                           Type                                         wsiType,
                                                                                           const Display&                       nativeDisplay)
 {
+#ifdef CTS_USES_VULKANSC
+       DE_UNREF(vki);
+       DE_UNREF(physicalDevice);
+       DE_UNREF(queueFamilyIndex);
+       DE_UNREF(wsiType);
+       DE_UNREF(nativeDisplay);
+       TCU_THROW(NotSupportedError, "Vulkan SC does not support getPhysicalDevicePresentationSupport");
+#else // CTS_USES_VULKANSC
        switch (wsiType)
        {
                case TYPE_XLIB:
@@ -330,6 +351,7 @@ VkBool32 getPhysicalDevicePresentationSupport (const InstanceInterface&     vki,
                        DE_FATAL("Unknown WSI type");
                        return 0;
        }
+#endif // CTS_USES_VULKANSC
        return 1;
 }
 
index c1236df..a436b6c 100644 (file)
@@ -157,13 +157,65 @@ set(DEQP_VK_LIBS
        deqp-vk-fragment-shading-rate
        )
 
+set(DEQP_VKSC_LIBS
+       tcutil
+       vkscutil
+       glutil
+       deqp-vksc-api
+#      deqp-vksc-pipeline
+#      deqp-vksc-binding-model
+#      deqp-vksc-spirv-assembly
+#      deqp-vksc-shaderrender
+#      deqp-vksc-shaderexecutor
+#      deqp-vksc-memory
+#      deqp-vksc-ubo
+#      deqp-vksc-dynamic-state
+#      deqp-vksc-ssbo
+#      deqp-vksc-query-pool
+#      deqp-vksc-conditional-rendering
+#      deqp-vksc-draw
+#      deqp-vksc-device-group
+#      deqp-vksc-compute
+#      deqp-vksc-image
+#      deqp-vksc-wsi
+#      deqp-vksc-sparse-resources
+#      deqp-vksc-tessellation
+#      deqp-vksc-rasterization
+#      deqp-vksc-synchronization
+#      deqp-vksc-clipping
+#      deqp-vksc-fragment-ops
+#      deqp-vksc-texture
+#      deqp-vksc-geometry
+#      deqp-vksc-robustness
+#      deqp-vksc-render-pass
+#      deqp-vksc-multiview
+#      deqp-vksc-subgroups
+#      deqp-vksc-ycbcr
+#      deqp-vksc-protected-memory
+#      deqp-vksc-memory-model
+#      deqp-vksc-amber
+#      deqp-vksc-imageless-framebuffer
+#      deqp-vksc-transform-feedback
+#      deqp-vksc-descriptor-indexing
+#      deqp-vksc-fragment-shader-interlock
+#      deqp-vksc-modifiers
+#      deqp-vksc-ray-tracing
+#      deqp-vksc-ray-query
+#      deqp-vksc-postmortem
+       )
+
+
 if (DE_COMPILER_IS_MSC AND (DE_PTR_SIZE EQUAL 4))
        set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /LARGEADDRESSAWARE")
 endif ()
 
 PCH(DEQP_VK_SRCS pch.cpp)
 
-add_deqp_module(deqp-vk "${DEQP_VK_SRCS}" "${DEQP_VK_LIBS}" vktTestPackageEntry.cpp)
+add_deqp_module(deqp-vk "${DEQP_VK_SRCS}" "${DEQP_VK_LIBS}" "tcutil-platform" vktTestPackageEntry.cpp )
+
+add_deqp_module(deqp-vksc "${DEQP_VK_SRCS}" "${DEQP_VKSC_LIBS}" "tcutil-sc-platform" vktTestPackageEntrySC.cpp)
+target_include_directories(deqp-vksc-package BEFORE PUBLIC ${CMAKE_SOURCE_DIR}/external/vulkancts/framework/vulkan/generated/vulkansc)
+target_include_directories(deqp-vksc BEFORE PUBLIC ${CMAKE_SOURCE_DIR}/external/vulkancts/framework/vulkan/generated/vulkansc)
 
 add_data_dir(deqp-vk ../../data/vulkan vulkan)
 
index 59e3ce0..938c399 100644 (file)
@@ -19,8 +19,6 @@ set(DEQP_VK_AMBER_LIBS
        libamber
        )
 
-add_definitions(-DAMBER_CTS_VULKAN_HEADER=1)
-
 if (DE_COMPILER_IS_GCC OR DE_COMPILER_IS_CLANG)
        set(CMAKE_CXX_FLAGS     "${CMAKE_CXX_FLAGS} -Wno-unknown-pragmas")
        set_source_files_properties(
@@ -30,8 +28,10 @@ elseif (DE_COMPILER_IS_MSC)
        set(CMAKE_CXX_FLAGS     "${CMAKE_CXX_FLAGS} /wd4068")
 endif ()
 
-include_directories("../../../../amber/src/include")
 add_library(deqp-vk-amber STATIC ${DEQP_VK_AMBER_SRCS})
+target_include_directories(deqp-vk-amber PUBLIC ${PROJECT_SOURCE_DIR}/external/amber/src/include)
+target_include_directories(deqp-vk-amber PUBLIC ${PROJECT_SOURCE_DIR}/external/vulkancts/framework/vulkan ${PROJECT_SOURCE_DIR}/external/vulkancts/framework/vulkan/generated/vulkan)
+target_compile_definitions(deqp-vk-amber PUBLIC AMBER_CTS_VULKAN_HEADER=1)
 target_link_libraries(deqp-vk-amber ${DEQP_VK_AMBER_LIBS})
 
 add_custom_target(deqp-vk-amber-data)
index 1a6b782..4814ea3 100644 (file)
@@ -5,11 +5,14 @@ include_directories(
        ../util
        )
 
-set(DEQP_VK_API_SRCS
+set(DEQP_VK_VKSC_API_SRCS
        vktApiVersionCheck.cpp
        vktApiVersionCheck.hpp
        vktApiTests.cpp
        vktApiTests.hpp
+       )
+
+set(DEQP_VK_API_SRCS
        vktApiSmokeTests.cpp
        vktApiSmokeTests.hpp
        vktApiDeviceInitializationTests.cpp
@@ -64,13 +67,11 @@ set(DEQP_VK_API_SRCS
     vktApiToolingInfoTests.hpp
        )
 
-set(DEQP_VK_API_LIBS
-       deqp-vk-util
-       tcutil
-       vkutil
-       )
-
 PCH(DEQP_VK_API_SRCS ../pch.cpp)
 
-add_library(deqp-vk-api STATIC ${DEQP_VK_API_SRCS})
-target_link_libraries(deqp-vk-api ${DEQP_VK_API_LIBS})
+add_library(deqp-vk-api STATIC ${DEQP_VK_VKSC_API_SRCS} ${DEQP_VK_API_SRCS})
+target_link_libraries(deqp-vk-api PUBLIC deqp-vk-util tcutil vkutil)
+
+add_library(deqp-vksc-api STATIC ${DEQP_VK_VKSC_API_SRCS})
+target_include_directories(deqp-vksc-api BEFORE PUBLIC ${CMAKE_SOURCE_DIR}/external/vulkancts/framework/vulkan/generated/vulkansc)
+target_link_libraries(deqp-vksc-api PUBLIC deqp-vksc-util tcutil vkscutil)
index 717aa14..9de9ddb 100644 (file)
@@ -2075,6 +2075,8 @@ tcu::TestStatus enumerateInstanceExtensions (Context& context)
                checkInstanceExtensions(results, extensionNames);
                CheckEnumerateInstanceExtensionPropertiesIncompleteResult()(context, results, properties.size());
 
+#ifndef CTS_USES_VULKANSC
+
                for (const auto& version : releasedApiVersions)
                {
                        deUint32 versionMajor, versionMinor;
@@ -2090,6 +2092,9 @@ tcu::TestStatus enumerateInstanceExtensions (Context& context)
                                break;
                        }
                }
+
+#endif // CTS_USES_VULKANSC
+
        }
 
        {
@@ -2199,6 +2204,8 @@ tcu::TestStatus enumerateDeviceExtensions (Context& context)
                checkDeviceExtensions(results, deviceExtensionNames);
                CheckEnumerateDeviceExtensionPropertiesIncompleteResult()(context, results, deviceExtensionProperties.size());
 
+#ifndef CTS_USES_VULKANSC
+
                for (const auto& version : releasedApiVersions)
                {
                        deUint32 versionMajor, versionMinor;
@@ -2215,6 +2222,9 @@ tcu::TestStatus enumerateDeviceExtensions (Context& context)
                                break;
                        }
                }
+
+#endif // CTS_USES_VULKANSC
+
        }
 
        {
index 41abc7d..234dcda 100644 (file)
@@ -24,6 +24,7 @@
 #include "vktApiTests.hpp"
 
 #include "vktTestGroupUtil.hpp"
+#ifndef CTS_USES_VULKANSC
 #include "vktApiSmokeTests.hpp"
 #include "vktApiDeviceInitializationTests.hpp"
 #include "vktApiDriverPropertiesTests.hpp"
 #include "vktApiGranularityTests.hpp"
 #include "vktApiGetMemoryCommitment.hpp"
 #include "vktApiExternalMemoryTests.hpp"
+#endif // CTS_USES_VULKANSC
 #include "vktApiVersionCheck.hpp"
+#ifndef CTS_USES_VULKANSC
 #include "vktApiMaintenance3Check.hpp"
 #include "vktApiDescriptorSetTests.hpp"
 #include "vktApiPipelineTests.hpp"
 #include "vktApiMemoryRequirementInvarianceTests.hpp"
 #include "vktApiToolingInfoTests.hpp"
+#endif // CTS_USES_VULKANSC
 
 namespace vkt
 {
@@ -57,6 +61,7 @@ namespace api
 namespace
 {
 
+#ifndef CTS_USES_VULKANSC
 void createBufferViewTests (tcu::TestCaseGroup* bufferViewTests)
 {
        tcu::TestContext&       testCtx         = bufferViewTests->getTestContext();
@@ -64,12 +69,14 @@ void createBufferViewTests (tcu::TestCaseGroup* bufferViewTests)
        bufferViewTests->addChild(createBufferViewCreateTests   (testCtx));
        bufferViewTests->addChild(createBufferViewAccessTests   (testCtx));
 }
+#endif // CTS_USES_VULKANSC
 
 void createApiTests (tcu::TestCaseGroup* apiTests)
 {
        tcu::TestContext&       testCtx         = apiTests->getTestContext();
 
        apiTests->addChild(createVersionSanityCheckTests                        (testCtx));
+#ifndef CTS_USES_VULKANSC
        apiTests->addChild(createDriverPropertiesTests                          (testCtx));
        apiTests->addChild(createSmokeTests                                                     (testCtx));
        apiTests->addChild(api::createFeatureInfoTests                          (testCtx));
@@ -92,6 +99,7 @@ void createApiTests (tcu::TestCaseGroup* apiTests)
        apiTests->addChild(createPipelineTests                                          (testCtx));
        apiTests->addChild(createMemoryRequirementInvarianceTests       (testCtx));
        apiTests->addChild(createToolingInfoTests                                       (testCtx));
+#endif // CTS_USES_VULKANSC
 }
 
 } // anonymous
index 1c288d9..4d61253 100644 (file)
@@ -9,10 +9,9 @@ set(DEQP_VK_UTIL_SRCS
        vktExternalMemoryUtil.hpp
 )
 
-set(DEQP_VK_UTIL_LIBS
-       tcutil
-       vkutil
-)
-
 add_library(deqp-vk-util STATIC ${DEQP_VK_UTIL_SRCS})
-target_link_libraries(deqp-vk-util ${DEQP_VK_UTIL_LIBS})
+target_link_libraries(deqp-vk-util PUBLIC tcutil vkutil)
+
+add_library(deqp-vksc-util STATIC ${DEQP_VK_UTIL_SRCS})
+target_include_directories(deqp-vksc-util BEFORE PUBLIC ${CMAKE_SOURCE_DIR}/external/vulkancts/framework/vulkan/generated/vulkansc)
+target_link_libraries(deqp-vksc-util PUBLIC tcutil vkscutil)
index 9bdb8be..1646a8e 100644 (file)
@@ -23,6 +23,8 @@
 
 #include "vkQueryUtil.hpp"
 
+#ifndef CTS_USES_VULKANSC
+
 #if (DE_OS == DE_OS_ANDROID) || (DE_OS == DE_OS_UNIX)
 #      include <unistd.h>
 #      include <fcntl.h>
@@ -1625,3 +1627,5 @@ vk::VkPhysicalDeviceExternalMemoryHostPropertiesEXT getPhysicalDeviceExternalMem
 
 } // ExternalMemoryUtil
 } // vkt
+
+#endif // CTS_USES_VULKANSC
index 1e7a7b6..a4b1fab 100644 (file)
 #include "deMemory.h"
 #include "deInt32.h"
 
+#ifndef CTS_USES_VULKANSC
+
 namespace vkt
 {
+
 namespace ExternalMemoryUtil
 {
 
+
 class NativeHandle
 {
 public:
@@ -360,6 +364,9 @@ vk::VkPhysicalDeviceExternalMemoryHostPropertiesEXT getPhysicalDeviceExternalMem
                                                                                                                                                                                                  vk::VkPhysicalDevice                  physicalDevice);
 
 } // ExternalMemoryUtil
+
 } // vkt
 
+#endif // CTS_USES_VULKANSC
+
 #endif // _VKTEXTERNALMEMORYUTIL_HPP
index be3c330..1432721 100644 (file)
@@ -35,7 +35,9 @@ using std::string;
 using vk::Move;
 using vk::VkInstance;
 using vk::InstanceDriver;
+#ifndef CTS_USES_VULKANSC
 using vk::DebugReportRecorder;
+#endif // CTS_USES_VULKANSC
 
 namespace vkt
 {
@@ -92,15 +94,23 @@ CustomInstance::CustomInstance (Context& context, Move<VkInstance> instance, boo
        : m_context             (&context)
        , m_instance    (instance)
        , m_driver              (new InstanceDriver(context.getPlatformInterface(), *m_instance))
+#ifndef CTS_USES_VULKANSC
        , m_recorder    (enableDebugReportRecorder ? (new DebugReportRecorder(*m_driver, *m_instance, printValidationErrors)) : nullptr)
+#endif // CTS_USES_VULKANSC
 {
+#ifdef CTS_USES_VULKANSC
+       DE_UNREF(enableDebugReportRecorder);
+       DE_UNREF(printValidationErrors);
+#endif // CTS_USES_VULKANSC
 }
 
 CustomInstance::CustomInstance ()
        : m_context             (nullptr)
        , m_instance    ()
        , m_driver              (nullptr)
+#ifndef CTS_USES_VULKANSC
        , m_recorder    (nullptr)
+#endif // CTS_USES_VULKANSC
 {
 }
 
@@ -128,7 +138,9 @@ void CustomInstance::swap (CustomInstance& other)
        std::swap(m_context, other.m_context);
        Move<VkInstance> aux = m_instance; m_instance = other.m_instance; other.m_instance = aux;
        m_driver.swap(other.m_driver);
+#ifndef CTS_USES_VULKANSC
        m_recorder.swap(other.m_recorder);
+#endif // CTS_USES_VULKANSC
 }
 
 CustomInstance::operator VkInstance () const
@@ -143,8 +155,10 @@ const vk::InstanceDriver& CustomInstance::getDriver() const
 
 void CustomInstance::collectMessages ()
 {
+#ifndef CTS_USES_VULKANSC
        if (m_recorder)
                collectAndReportDebugMessages(*m_recorder, *m_context);
+#endif // CTS_USES_VULKANSC
 }
 
 UncheckedInstance::UncheckedInstance ()
@@ -152,7 +166,9 @@ UncheckedInstance::UncheckedInstance ()
        , m_allocator   (nullptr)
        , m_instance    (DE_NULL)
        , m_driver              (nullptr)
+#ifndef CTS_USES_VULKANSC
        , m_recorder    (nullptr)
+#endif // CTS_USES_VULKANSC
 {
 }
 
@@ -161,18 +177,28 @@ UncheckedInstance::UncheckedInstance (Context& context, vk::VkInstance instance,
        , m_allocator   (pAllocator)
        , m_instance    (instance)
        , m_driver              ((m_instance != DE_NULL) ? new InstanceDriver(context.getPlatformInterface(), m_instance) : nullptr)
+#ifndef CTS_USES_VULKANSC
        , m_recorder    ((enableDebugReportRecorder && m_instance != DE_NULL) ? (new DebugReportRecorder(*m_driver, m_instance, printValidationErrors)) : nullptr)
+#endif // CTS_USES_VULKANSC
 {
+#ifdef CTS_USES_VULKANSC
+       DE_UNREF(enableDebugReportRecorder);
+       DE_UNREF(printValidationErrors);
+#endif // CTS_USES_VULKANSC
 }
 
 UncheckedInstance::~UncheckedInstance ()
 {
+#ifndef CTS_USES_VULKANSC
        if (m_recorder)
                collectAndReportDebugMessages(*m_recorder, *m_context);
+#endif // CTS_USES_VULKANSC
 
        if (m_instance != DE_NULL)
        {
+#ifndef CTS_USES_VULKANSC
                m_recorder.reset(nullptr);
+#endif // CTS_USES_VULKANSC
                m_driver->destroyInstance(m_instance, m_allocator);
        }
 }
@@ -183,7 +209,9 @@ void UncheckedInstance::swap (UncheckedInstance& other)
        std::swap(m_allocator, other.m_allocator);
        vk::VkInstance aux = m_instance; m_instance = other.m_instance; other.m_instance = aux;
        m_driver.swap(other.m_driver);
+#ifndef CTS_USES_VULKANSC
        m_recorder.swap(other.m_recorder);
+#endif // CTS_USES_VULKANSC
 }
 
 UncheckedInstance::UncheckedInstance (UncheckedInstance&& other)
index 12fa914..a89ea54 100644 (file)
@@ -67,7 +67,9 @@ private:
        Context*                                                                        m_context;
        vk::Move<vk::VkInstance>                                        m_instance;
        std::unique_ptr<vk::InstanceDriver>                     m_driver;
+#ifndef CTS_USES_VULKANSC
        std::unique_ptr<vk::DebugReportRecorder>        m_recorder;
+#endif // CTS_USES_VULKANSC
 };
 
 class UncheckedInstance
@@ -89,7 +91,9 @@ private:
        const vk::VkAllocationCallbacks*                        m_allocator;
        vk::VkInstance                                                          m_instance;
        std::unique_ptr<vk::InstanceDriver>                     m_driver;
+#ifndef CTS_USES_VULKANSC
        std::unique_ptr<vk::DebugReportRecorder>        m_recorder;
+#endif // CTS_USES_VULKANSC
 };
 
 // Custom instances.
index 9b1c962..ed741de 100644 (file)
@@ -330,11 +330,15 @@ public:
        deUint32                                                                                                                getSparseQueueFamilyIndex                               (void) const { return m_sparseQueueFamilyIndex;                                                         }
        VkQueue                                                                                                                 getSparseQueue                                                  (void) const;
 
+#ifndef CTS_USES_VULKANSC
        bool                                                                                                                    hasDebugReportRecorder                                  (void) const { return m_debugReportRecorder.get() != nullptr;                           }
        vk::DebugReportRecorder&                                                                                getDebugReportRecorder                                  (void) const { return *m_debugReportRecorder.get();                                                     }
+#endif // CTS_USES_VULKANSC
 
 private:
+#ifndef CTS_USES_VULKANSC
        using DebugReportRecorderPtr            = de::UniquePtr<vk::DebugReportRecorder>;
+#endif // CTS_USES_VULKANSC
 
        const deUint32                                          m_maximumFrameworkVulkanVersion;
        const deUint32                                          m_availableInstanceVersion;
@@ -346,8 +350,9 @@ private:
        const vector<string>                            m_instanceExtensions;
        const Unique<VkInstance>                        m_instance;
        const InstanceDriver                            m_instanceInterface;
+#ifndef CTS_USES_VULKANSC
        const DebugReportRecorderPtr            m_debugReportRecorder;
-
+#endif // CTS_USES_VULKANSC
        const VkPhysicalDevice                          m_physicalDevice;
        const deUint32                                          m_deviceVersion;
 
@@ -370,6 +375,7 @@ deUint32 sanitizeApiVersion(deUint32 v)
        return VK_MAKE_VERSION( VK_VERSION_MAJOR(v), VK_VERSION_MINOR(v), 0 );
 }
 
+#ifndef CTS_USES_VULKANSC
 de::MovePtr<vk::DebugReportRecorder> createDebugReportRecorder (const vk::PlatformInterface& vkp, const vk::InstanceInterface& vki, vk::VkInstance instance, bool printValidationErrors)
 {
        if (isDebugReportSupported(vkp))
@@ -377,7 +383,7 @@ de::MovePtr<vk::DebugReportRecorder> createDebugReportRecorder (const vk::Platfo
        else
                TCU_THROW(NotSupportedError, "VK_EXT_debug_report is not supported");
 }
-
+#endif // CTS_USES_VULKANSC
 } // anonymous
 
 DefaultDevice::DefaultDevice (const PlatformInterface& vkPlatform, const tcu::CommandLine& cmdLine)
@@ -391,12 +397,14 @@ DefaultDevice::DefaultDevice (const PlatformInterface& vkPlatform, const tcu::Co
        , m_instance                                            (createInstance(vkPlatform, m_usedApiVersion, m_instanceExtensions, cmdLine))
 
        , m_instanceInterface                           (vkPlatform, *m_instance)
+#ifndef CTS_USES_VULKANSC
        , m_debugReportRecorder                         (cmdLine.isValidationEnabled()
                                                                                 ? createDebugReportRecorder(vkPlatform,
                                                                                                                                         m_instanceInterface,
                                                                                                                                         *m_instance,
                                                                                                                                         cmdLine.printValidationErrors())
                                                                                 : de::MovePtr<vk::DebugReportRecorder>(DE_NULL))
+#endif // CTS_USES_VULKANSC
        , m_physicalDevice                                      (chooseDevice(m_instanceInterface, *m_instance, cmdLine))
        , m_deviceVersion                                       (getPhysicalDeviceProperties(m_instanceInterface, m_physicalDevice).apiVersion)
 
@@ -685,6 +693,8 @@ bool Context::isBufferDeviceAddressSupported(void) const
                   isDeviceFunctionalitySupported("VK_EXT_buffer_device_address");
 }
 
+#ifndef CTS_USES_VULKANSC
+
 bool Context::hasDebugReportRecorder () const
 {
        return m_device->hasDebugReportRecorder();
@@ -695,6 +705,8 @@ vk::DebugReportRecorder& Context::getDebugReportRecorder () const
        return m_device->getDebugReportRecorder();
 }
 
+#endif // CTS_USES_VULKANSC
+
 // TestCase
 
 void TestCase::initPrograms (SourceCollections&) const
@@ -709,6 +721,8 @@ void TestCase::delayedInit (void)
 {
 }
 
+#ifndef CTS_USES_VULKANSC
+
 void collectAndReportDebugMessages(vk::DebugReportRecorder &debugReportRecorder, Context& context)
 {
        using DebugMessages = vk::DebugReportRecorder::MessageList;
@@ -741,4 +755,6 @@ void collectAndReportDebugMessages(vk::DebugReportRecorder &debugReportRecorder,
        }
 }
 
+#endif // CTS_USES_VULKANSC
+
 } // vkt
index c155450..d3007bf 100644 (file)
@@ -110,8 +110,10 @@ public:
        bool                                                                            resultSetOnValidation                   () const                { return m_resultSetOnValidation;       }
        void                                                                            resultSetOnValidation                   (bool value)    { m_resultSetOnValidation = value;      }
 
+#ifndef CTS_USES_VULKANSC
        bool                                                                            hasDebugReportRecorder                  () const;
        vk::DebugReportRecorder&                                        getDebugReportRecorder                  () const;
+#endif // CTS_USES_VULKANSC
 
 protected:
        tcu::TestContext&                                                       m_testCtx;
@@ -171,8 +173,12 @@ inline TestCase::TestCase (tcu::TestContext& testCtx, tcu::TestNodeType type, co
 {
 }
 
+#ifndef CTS_USES_VULKANSC
+
 void collectAndReportDebugMessages(vk::DebugReportRecorder &debugReportRecorder, Context& context);
 
+#endif // CTS_USES_VULKANSC
+
 } // vkt
 
 #endif // _VKTTESTCASE_HPP
index 057c300..b5fd62b 100644 (file)
 
 #include "vktTestGroupUtil.hpp"
 
-namespace vkt
-{
-
-TestGroupHelper0::TestGroupHelper0 (tcu::TestContext&  testCtx,
-                                                                       const std::string&      name,
-                                                                       const std::string&      description,
-                                                                       CreateChildrenFunc      createChildren,
-                                                                       CleanupGroupFunc        cleanupGroup)
-       : tcu::TestCaseGroup    (testCtx, name.c_str(), description.c_str())
-       , m_createChildren              (createChildren)
-       , m_cleanupGroup                (cleanupGroup)
-{
-}
-
-TestGroupHelper0::~TestGroupHelper0 (void)
-{
-}
-
-void TestGroupHelper0::init (void)
-{
-       m_createChildren(this);
-}
-
-void TestGroupHelper0::deinit(void)
-{
-       if (m_cleanupGroup)
-               m_cleanupGroup(this);
-}
-
-} // vkt
+DE_EMPTY_CPP_FILE
index c2a3400..a16563d 100644 (file)
@@ -39,11 +39,27 @@ public:
                                                                                                         const std::string&             name,
                                                                                                         const std::string&             description,
                                                                                                         CreateChildrenFunc             createChildren,
-                                                                                                        CleanupGroupFunc               cleanupGroup);
-                                                               ~TestGroupHelper0       (void);
-
-       void                                            init                            (void);
-       void                                            deinit                          (void);
+                                                                                                        CleanupGroupFunc               cleanupGroup)
+                                                                       : tcu::TestCaseGroup(testCtx, name.c_str(), description.c_str())
+                                                                       , m_createChildren(createChildren)
+                                                                       , m_cleanupGroup(cleanupGroup)
+                                                               {
+                                                               }
+
+                                                               ~TestGroupHelper0       (void)
+                                                               {
+                                                               }
+
+       void                                            init                            (void)
+                                                               {
+                                                                       m_createChildren(this);
+                                                               }
+
+       void                                            deinit                          (void)
+                                                               {
+                                                                       if (m_cleanupGroup)
+                                                                               m_cleanupGroup(this);
+                                                               }
 
 private:
        const CreateChildrenFunc        m_createChildren;
index 67cdb27..880ab55 100644 (file)
@@ -348,8 +348,10 @@ void TestCaseExecutor::deinit (tcu::TestCase*)
        if (m_renderDoc) m_renderDoc->endFrame(m_context.getInstance());
 
        // Collect and report any debug messages
+#ifndef CTS_USES_VULKANSC
        if (m_context.hasDebugReportRecorder())
                collectAndReportDebugMessages(m_context.getDebugReportRecorder(), m_context);
+#endif // CTS_USES_VULKANSC
 }
 
 tcu::TestNode::IterateResult TestCaseExecutor::iterate (tcu::TestCase*)
@@ -385,6 +387,8 @@ bool TestCaseExecutor::spirvVersionSupported (vk::SpirvVersion spirvVersion)
 
 // GLSL shader tests
 
+#ifndef CTS_USES_VULKANSC
+
 void createGlslTests (tcu::TestCaseGroup* glslTests)
 {
        tcu::TestContext&       testCtx         = glslTests->getTestContext();
@@ -459,6 +463,8 @@ void createGlslTests (tcu::TestCaseGroup* glslTests)
        glslTests->addChild(cts_amber::createCombinedOperationsGroup            (testCtx));
 }
 
+#endif // CTS_USES_VULKANSC
+
 // TestPackage
 
 BaseTestPackage::BaseTestPackage (tcu::TestContext& testCtx, const char* name, const char* desc)
@@ -470,6 +476,8 @@ BaseTestPackage::~BaseTestPackage (void)
 {
 }
 
+#ifdef CTS_USES_VULKAN
+
 TestPackage::TestPackage (tcu::TestContext& testCtx)
        : BaseTestPackage(testCtx, "dEQP-VK", "dEQP Vulkan Tests")
 {
@@ -488,11 +496,28 @@ ExperimentalTestPackage::~ExperimentalTestPackage (void)
 {
 }
 
+#endif
+
+#ifdef CTS_USES_VULKANSC
+
+TestPackageSC::TestPackageSC (tcu::TestContext& testCtx)
+       : BaseTestPackage(testCtx, "dEQP-VKSC", "dEQP Vulkan SC Tests")
+{
+}
+
+TestPackageSC::~TestPackageSC (void)
+{
+}
+
+#endif // CTS_USES_VULKANSC
+
 tcu::TestCaseExecutor* BaseTestPackage::createExecutor (void) const
 {
        return new TestCaseExecutor(m_testCtx);
 }
 
+#ifdef CTS_USES_VULKAN
+
 void TestPackage::init (void)
 {
        addChild(createTestGroup                                        (m_testCtx, "info", "Build and Device Info Tests", createInfoTests));
@@ -544,4 +569,55 @@ void ExperimentalTestPackage::init (void)
        addChild(postmortem::createTests                        (m_testCtx));
 }
 
+#endif
+
+#ifdef CTS_USES_VULKANSC
+
+void TestPackageSC::init (void)
+{
+//     addChild(createTestGroup                                        (m_testCtx, "info", "Build and Device Info Tests", createInfoTests));
+       addChild(api::createTests                                       (m_testCtx));
+//     addChild(memory::createTests                            (m_testCtx));
+//     addChild(pipeline::createTests                          (m_testCtx));
+//     addChild(BindingModel::createTests                      (m_testCtx));
+//     addChild(SpirVAssembly::createTests                     (m_testCtx));
+//     addChild(createTestGroup                                        (m_testCtx, "glsl", "GLSL shader execution tests", createGlslTests));
+//     addChild(createRenderPassTests                          (m_testCtx));
+//     addChild(createRenderPass2Tests                         (m_testCtx));
+//     addChild(ubo::createTests                                       (m_testCtx));
+//     addChild(DynamicState::createTests                      (m_testCtx));
+//     addChild(ssbo::createTests                                      (m_testCtx));
+//     addChild(QueryPool::createTests                         (m_testCtx));
+//     addChild(Draw::createTests                                      (m_testCtx));
+//     addChild(compute::createTests                           (m_testCtx));
+//     addChild(image::createTests                                     (m_testCtx));
+//     addChild(wsi::createTests                                       (m_testCtx));
+//     addChild(synchronization::createTests           (m_testCtx));
+//     addChild(sparse::createTests                            (m_testCtx));
+//     addChild(tessellation::createTests                      (m_testCtx));
+//     addChild(rasterization::createTests                     (m_testCtx));
+//     addChild(clipping::createTests                          (m_testCtx));
+//     addChild(FragmentOperations::createTests        (m_testCtx));
+//     addChild(texture::createTests                           (m_testCtx));
+//     addChild(geometry::createTests                          (m_testCtx));
+//     addChild(robustness::createTests                        (m_testCtx));
+//     addChild(MultiView::createTests                         (m_testCtx));
+//     addChild(subgroups::createTests                         (m_testCtx));
+//     addChild(ycbcr::createTests                                     (m_testCtx));
+//     addChild(ProtectedMem::createTests                      (m_testCtx));
+//     addChild(DeviceGroup::createTests                       (m_testCtx));
+//     addChild(MemoryModel::createTests                       (m_testCtx));
+//     addChild(conditional::createTests                       (m_testCtx));
+//     addChild(cts_amber::createGraphicsFuzzTests     (m_testCtx));
+//     addChild(imageless::createTests                         (m_testCtx));
+//     addChild(TransformFeedback::createTests         (m_testCtx));
+//     addChild(DescriptorIndexing::createTests        (m_testCtx));
+//     addChild(FragmentShaderInterlock::createTests(m_testCtx));
+//     addChild(modifiers::createTests                         (m_testCtx));
+//     addChild(RayTracing::createTests                        (m_testCtx));
+//     addChild(RayQuery::createTests                          (m_testCtx));
+}
+
+#endif // CTS_USES_VULKANSC
+
 } // vkt
index 4469f6b..15c2f28 100644 (file)
@@ -40,6 +40,8 @@ public:
        tcu::TestCaseExecutor*          createExecutor          (void) const;
 };
 
+#ifdef CTS_USES_VULKAN
+
 class TestPackage : public BaseTestPackage
 {
 public:
@@ -58,6 +60,21 @@ public:
        virtual void                            init                                     (void);
 };
 
+#endif
+
+#ifdef CTS_USES_VULKANSC
+
+class TestPackageSC : public BaseTestPackage
+{
+public:
+                                                               TestPackageSC           (tcu::TestContext& testCtx);
+       virtual                                         ~TestPackageSC          (void);
+
+       virtual void                            init                            (void);
+};
+
+#endif // CTS_USES_VULKANSC
+
 } // vkt
 
 #endif // _VKTTESTPACKAGE_HPP
diff --git a/external/vulkancts/modules/vulkan/vktTestPackageEntrySC.cpp b/external/vulkancts/modules/vulkan/vktTestPackageEntrySC.cpp
new file mode 100644 (file)
index 0000000..81c78bb
--- /dev/null
@@ -0,0 +1,33 @@
+/*-------------------------------------------------------------------------
+ * Vulkan Conformance Tests
+ * ------------------------
+ *
+ * Copyright (c) 2015 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ *//*!
+ * \file
+ * \brief Vulkan Test Package Entry Point.
+ *//*--------------------------------------------------------------------*/
+
+#include "vktTestPackage.hpp"
+
+// Register package to test executor.
+
+static tcu::TestPackage* createTestPackageSC (tcu::TestContext& testCtx)
+{
+       return new vkt::TestPackageSC(testCtx);
+}
+
+tcu::TestPackageDescriptor g_vktPackageDescriptor("dEQP-VKSC", createTestPackageSC);
index be4eece..e305d98 100644 (file)
@@ -36,4 +36,8 @@
                <option name="deqp-package" value="dEQP-VK"/>
                <option name="deqp-caselist-file" value="vk-fraction-mandatory-tests.txt"/>
        </test>
+       <test class="com.drawelements.deqp.runner.DeqpTestRunner">
+               <option name="deqp-package" value="dEQP-VKSC"/>
+               <option name="deqp-caselist-file" value="vksc-default.txt"/>
+       </test>
 </configuration>
diff --git a/external/vulkancts/mustpass/master/src/master_sc.txt b/external/vulkancts/mustpass/master/src/master_sc.txt
new file mode 100644 (file)
index 0000000..0b1e7ff
--- /dev/null
@@ -0,0 +1 @@
+dEQP-VKSC.*
diff --git a/external/vulkancts/mustpass/master/vksc-default.txt b/external/vulkancts/mustpass/master/vksc-default.txt
new file mode 100644 (file)
index 0000000..264d26d
--- /dev/null
@@ -0,0 +1,2 @@
+dEQP-VKSC.api.version_check.version
+dEQP-VKSC.api.version_check.entry_points
index e928ad1..c431ea1 100644 (file)
@@ -47,6 +47,7 @@ COPYRIGHT_DECLARATION = """
 MUSTPASS_PATH          = os.path.join(DEQP_DIR, "external", "vulkancts", "mustpass")
 PROJECT                                = Project(path = MUSTPASS_PATH, copyright = COPYRIGHT_DECLARATION)
 VULKAN_MODULE          = getModuleByName("dEQP-VK")
+VULKAN_SC_MODULE       = getModuleByName("dEQP-VKSC")
 BUILD_CONFIG           = getBuildConfig(DEFAULT_BUILD_DIR, DEFAULT_TARGET, "Debug")
 
 # master
@@ -62,8 +63,14 @@ VULKAN_MASTER_PKG    = Package(module = VULKAN_MODULE, configurations = [
                                                filters         = [include("fraction-mandatory-tests.txt")]),
         ])
 
+VULKAN_SC_MASTER_PKG   = Package(module = VULKAN_SC_MODULE, configurations = [
+                 # Master
+                 Configuration(name            = "default",
+                                               filters         = [include("master_sc.txt"),]),
+        ])
+
 MUSTPASS_LISTS         = [
-                 Mustpass(project = PROJECT,   version = "master",     packages = [VULKAN_MASTER_PKG]),
+                 Mustpass(project = PROJECT,   version = "master",     packages = [VULKAN_MASTER_PKG, VULKAN_SC_MASTER_PKG]),
        ]
 
 if __name__ == "__main__":
index 07a9843..f4e84b0 100644 (file)
@@ -34,7 +34,7 @@ VK_SOURCE                                             = khr_util.registry_cache.RegistrySource(
                                                                        "xml/vk.xml",
                                                                        "cee0f4b12acde766e64d0d038b03458c74bb67f1",
                                                                        "eb31286278b1ecf55ae817198a4238f82ea8fe028aa0631e2c1b09747f10ebb4")
-VK_INL_FILE                                            = os.path.join(os.path.dirname(__file__), "..", "framework", "vulkan", "vkApiExtensionDependencyInfo.inl")
+VK_INL_FILE                                            = os.path.join(os.path.dirname(__file__), "..", "framework", "vulkan", "generated", "vulkan", "vkApiExtensionDependencyInfo.inl")
 VK_INL_HEADER                                  = khr_util.format.genInlHeader("Khronos Vulkan API description (vk.xml)", VK_SOURCE.getRevision())
 
 def VK_MAKE_VERSION(major, minor, patch):
index 569d157..eb9b088 100755 (executable)
@@ -24,6 +24,7 @@ import os
 import re
 import sys
 import copy
+import argparse
 from itertools import chain
 from collections import OrderedDict
 
@@ -33,7 +34,8 @@ from build.common import DEQP_DIR
 from khr_util.format import indentLines, writeInlFile
 
 VULKAN_H_DIR   = os.path.join(os.path.dirname(__file__), "src")
-VULKAN_DIR             = os.path.join(os.path.dirname(__file__), "..", "framework", "vulkan")
+VULKAN_DIR             = { "" :        os.path.join(os.path.dirname(__file__), "..", "framework", "vulkan", "generated", "vulkan"),
+                                       "SC" :  os.path.join(os.path.dirname(__file__), "..", "framework", "vulkan", "generated", "vulkansc") }
 
 INL_HEADER = """\
 /* WARNING: This is auto-generated file. Do not modify, since changes will
@@ -153,6 +155,8 @@ def prefixName (prefix, name):
        name = name.replace("VULKAN_11_PROPERTIES", "VULKAN_1_1_PROPERTIES")
        name = name.replace("VULKAN_12_FEATURES", "VULKAN_1_2_FEATURES")
        name = name.replace("VULKAN_12_PROPERTIES", "VULKAN_1_2_PROPERTIES")
+       name = name.replace("VULKAN_SC_10_FEATURES", "VULKAN_SC_1_0_FEATURES")
+       name = name.replace("VULKAN_SC_10_PROPERTIES", "VULKAN_SC_1_0_PROPERTIES")
        name = name.replace("INT_8_", "INT8_")
        name = name.replace("AABBNV", "AABB_NV")
 
@@ -160,13 +164,16 @@ def prefixName (prefix, name):
 
 class Version:
        def __init__ (self, versionTuple):
-               self.major = versionTuple[0]
-               self.minor = versionTuple[1]
-               self.patch = versionTuple[2]
+               self.api   = versionTuple[0]
+               self.major = versionTuple[1]
+               self.minor = versionTuple[2]
+               self.patch = versionTuple[3]
 
        def getInHex (self):
                if self.patch == 0:
-                       return "VK_API_VERSION_%d_%d" % (self.major, self.minor)
+                       if self.api == None:
+                               return "VK_API_VERSION_%d_%d" % (self.major, self.minor)
+                       return "VK%s_API_VERSION_%d_%d" % (self.api, self.major, self.minor)
                return '0x%Xu' % (hash(self))
 
        def isStandardVersion (self):
@@ -185,10 +192,13 @@ class Version:
                return 'VERSION_%d_%d_%d' % (self.major, self.minor, self.patch)
 
        def __hash__ (self):
-               return (self.major << 22) | (self.minor << 12) | self.patch
+               apiNumber = 0;
+               if self.api == 'SC':
+                       apiNumber = 1 << 25;
+               return (apiNumber) | (self.major << 22) | (self.minor << 12) | self.patch
 
        def __eq__ (self, other):
-               return self.major == other.major and self.minor == other.minor and self.patch == other.patch
+               return self.api == other.api and self.major == other.major and self.minor == other.minor and self.patch == other.patch
 
        def __str__ (self):
                return self.getBestRepresentation()
@@ -492,7 +502,7 @@ def parseCompositeTypesByVersion (src, versionsData):
        # we cant assign apiVersion to found structures
        extPtrn         = r'#define\s+[A-Z0-9_]+_EXTENSION_NAME\s+"([^"]+)"'
        versionEnd      = re.search(extPtrn, src)
-       versions        = [Version((v[2], v[3], 0)) for v in versionsData]
+       versions        = [Version((v[2], v[3], v[4], 0)) for v in versionsData]
        versions.append(None)
 
        # construct list of locations where version definitions start, and add the end of the file to it
@@ -521,7 +531,7 @@ def parseVersions (src):
        # 2. starting point off version specific definitions in vulkan.h.in
        # 3. major version number
        # 4. minor version number
-       return [(m.group()[:-2], m.start(), int(m.group(1)), int(m.group(2))) for m in re.finditer('VK_VERSION_([1-9])_([0-9]) 1', src)]
+       return [(m.group()[:-2], m.start(), m.group(1), int(m.group(2)), int(m.group(3))) for m in re.finditer('VK(SC)?_VERSION_([1-9])_([0-9]) 1', src)]
 
 def parseHandles (src):
        matches = re.findall(r'VK_DEFINE(_NON_DISPATCHABLE|)_HANDLE\((' + IDENT_PTRN + r')\)[ \t]*[\n\r]', src)
@@ -724,7 +734,7 @@ def parseBitfieldNames (src):
 
 def parseAPI (src):
        versionsData = parseVersions(src)
-       versions     = [Version((v[2], v[3], 0)) for v in versionsData]
+       versions     = [Version((v[2], v[3], v[4], 0)) for v in versionsData]
        definitions      = [Definition("deUint32", v.getInHex(), parsePreprocDefinedValue(src, v.getInHex())) for v in versions]
        definitions.extend([Definition(type, name, parsePreprocDefinedValue(src, name)) for name, type in DEFINITIONS])
 
@@ -1460,7 +1470,7 @@ def writeTypeUtil (api, filename):
 
        writeInlFile(filename, INL_HEADER, gen())
 
-def writeDriverIds(filename):
+def writeDriverIds(apiName, filename):
 
        driverIdsString = []
        driverIdsString.append("static const struct\n"
@@ -1470,7 +1480,10 @@ def writeDriverIds(filename):
                                         "} driverIds [] =\n"
                                         "{")
 
-       vulkanCore = readFile(os.path.join(VULKAN_H_DIR, "vulkan_core.h"))
+       vulkanHeaderFile = {"" :        "vulkan_core.h",
+                                               "SC" :  "vulkan_sc_core.h" }
+
+       vulkanCore = readFile(os.path.join(VULKAN_H_DIR, vulkanHeaderFile[apiName]))
 
        items = re.search(r'(?:typedef\s+enum\s+VkDriverId\s*{)((.*\n)*)(?:}\s*VkDriverId\s*;)', vulkanCore).group(1).split(',')
        driverItems = dict()
@@ -1509,21 +1522,25 @@ def writeSupportedExtenions(api, filename):
                                result.append('         dst.push_back("' + extension.name + '");')
                        result.append(" }")
 
+               if  not map:
+                       result.append(" DE_UNREF(coreVersion);")
+
                return result
 
        instanceMap             = {}
        deviceMap               = {}
        versionSet              = set()
+       apiTuple                = [None]
 
        for ext in api.extensions:
                if ext.versionInCore != None:
                        if ext.versionInCore[0] == 'INSTANCE':
-                               list = instanceMap.get(Version(ext.versionInCore[1:]))
-                               instanceMap[Version(ext.versionInCore[1:])] = list + [ext] if list else [ext]
+                               list = instanceMap.get(Version(apiTuple + ext.versionInCore[1:]))
+                               instanceMap[Version(apiTuple + ext.versionInCore[1:])] = list + [ext] if list else [ext]
                        else:
-                               list = deviceMap.get(Version(ext.versionInCore[1:]))
-                               deviceMap[Version(ext.versionInCore[1:])] = list + [ext] if list else [ext]
-                       versionSet.add(Version(ext.versionInCore[1:]))
+                               list = deviceMap.get(Version(apiTuple + ext.versionInCore[1:]))
+                               deviceMap[Version(apiTuple + ext.versionInCore[1:])] = list + [ext] if list else [ext]
+                       versionSet.add(Version(apiTuple + ext.versionInCore[1:]))
 
        lines = addVersionDefines(versionSet) + [
        "",
@@ -1656,6 +1673,12 @@ def writeCoreFunctionalities(api, filename):
        writeInlFile(filename, INL_HEADER, lines)
 
 def writeDeviceFeatures2(api, filename):
+       def structInAPI(name):
+               for c in api.compositeTypes:
+                       if c.name == name:
+                               return True
+               return False
+
        # list of structures that should be tested with getPhysicalDeviceFeatures2
        # this is not posible to determine from vulkan_core.h, if new feature structures
        # are added they should be manualy added to this list
@@ -1708,7 +1731,8 @@ def writeDeviceFeatures2(api, filename):
        # helper extension class used in algorith below
        class StructureFoundContinueToNextOne(Exception):
                pass
-       testedStructureDetail = [StructureDetail(struct) for struct in testedStructures]
+       existingStructures = list(filter(structInAPI, testedStructures)) # remove features not found in API ( important for Vulkan SC )
+       testedStructureDetail = [StructureDetail(struct) for struct in existingStructures]
        # iterate over all searched structures and find extensions that enable them
        for structureDetail in testedStructureDetail:
                try:
@@ -2185,7 +2209,12 @@ def splitWithQuotation(line):
                result.append(s.replace('"', ''))
        return result
 
-def writeMandatoryFeatures(filename):
+def writeMandatoryFeatures(api, filename):
+       def structInAPI(name):
+               for c in api.compositeTypes:
+                       if c.name == name:
+                               return True
+               return False
        stream = []
        pattern = r'\s*([\w]+)\s+FEATURES\s+\((.*)\)\s+REQUIREMENTS\s+\((.*)\)'
        mandatoryFeatures = readFile(os.path.join(VULKAN_H_DIR, "mandatory_features.txt"))
@@ -2217,8 +2246,9 @@ def writeMandatoryFeatures(filename):
                                   '\tvoid** nextPtr = &coreFeatures.pNext;',
                                   ''])
 
-       listStruct = sorted(dictStructs.items(), key=lambda tup: tup[0]) # sort to have same results for py2 and py3
-       for k, v in listStruct:
+       listStruct      = sorted(dictStructs.items(), key=lambda tup: tup[0]) # sort to have same results for py2 and py3
+       apiStruct       = list( filter(lambda x : structInAPI(x[0]), listStruct)) # remove items not defined in current API ( important for Vulkan SC )
+       for k, v in apiStruct:
                if (v[1].startswith("ApiVersion")):
                        cond = '\tif (context.contextSupports(vk::' + v[1] + '))'
                else:
@@ -2249,6 +2279,8 @@ def writeMandatoryFeatures(filename):
                                   ''])
 
        for v in dictData:
+               if not structInAPI(v[0]): # remove items not defined in current API ( important for Vulkan SC )
+                       continue
                structType = v[0];
                structName = 'coreFeatures.features';
                if v[0] != 'VkPhysicalDeviceFeatures' :
@@ -2300,13 +2332,32 @@ def writeExtensionList(filename, patternPart):
        stream.append('};\n')
        writeInlFile(filename, INL_HEADER, stream)
 
+def parseCmdLineArgs():
+       parser = argparse.ArgumentParser(description = "Generate Vulkan INL files",
+                                                                        formatter_class=argparse.ArgumentDefaultsHelpFormatter)
+       parser.add_argument("-a",
+                                               "--api",
+                                               dest="api",
+                                               default="",
+                                               help="Choose between Vulkan and Vulkan SC")
+       return parser.parse_args()
+
 if __name__ == "__main__":
-       # Read all .h files, with vulkan_core.h first
-       files                   = os.listdir(VULKAN_H_DIR)
-       files                   = [f for f in files if f.endswith(".h")]
-       files.sort()
-       files.remove("vulkan_core.h")
-       files.insert(0, "vulkan_core.h")
+       args = parseCmdLineArgs()
+
+       files = []
+       if args.api=='':
+               # Read all .h files, with vulkan_core.h first, skip vulkan_sc_core.h
+               files                   = os.listdir(VULKAN_H_DIR)
+               files                   = [f for f in files if f.endswith(".h")]
+               files.sort()
+               files.remove("vulkan_core.h")
+               files.remove("vulkan_sc_core.h")
+               files.insert(0, "vulkan_core.h")
+       elif args.api=='SC':
+               # Read only vulkan_sc_core.h
+               files.insert(0, "vulkan_sc_core.h")
+
        src                             = ""
        for file in files:
                src += readFile(os.path.join(VULKAN_H_DIR,file))
@@ -2317,50 +2368,50 @@ if __name__ == "__main__":
        deviceFuncs             = [Function.TYPE_DEVICE]
 
        dfd                                                                             = generateDeviceFeaturesDefs(src)
-       writeDeviceFeatures                                             (api, dfd, os.path.join(VULKAN_DIR, "vkDeviceFeatures.inl"))
-       writeDeviceFeaturesDefaultDeviceDefs    (dfd, os.path.join(VULKAN_DIR, "vkDeviceFeaturesForDefaultDeviceDefs.inl"))
-       writeDeviceFeaturesContextDecl                  (dfd, os.path.join(VULKAN_DIR, "vkDeviceFeaturesForContextDecl.inl"))
-       writeDeviceFeaturesContextDefs                  (dfd, os.path.join(VULKAN_DIR, "vkDeviceFeaturesForContextDefs.inl"))
+       writeDeviceFeatures                                             (api, dfd, os.path.join(VULKAN_DIR[args.api], "vkDeviceFeatures.inl"))
+       writeDeviceFeaturesDefaultDeviceDefs    (dfd, os.path.join(VULKAN_DIR[args.api], "vkDeviceFeaturesForDefaultDeviceDefs.inl"))
+       writeDeviceFeaturesContextDecl                  (dfd, os.path.join(VULKAN_DIR[args.api], "vkDeviceFeaturesForContextDecl.inl"))
+       writeDeviceFeaturesContextDefs                  (dfd, os.path.join(VULKAN_DIR[args.api], "vkDeviceFeaturesForContextDefs.inl"))
 
        dpd                                                                             = generateDevicePropertiesDefs(src)
-       writeDeviceProperties                                   (api, dpd, os.path.join(VULKAN_DIR, "vkDeviceProperties.inl"))
-
-       writeDevicePropertiesDefaultDeviceDefs  (dpd, os.path.join(VULKAN_DIR, "vkDevicePropertiesForDefaultDeviceDefs.inl"))
-       writeDevicePropertiesContextDecl                (dpd, os.path.join(VULKAN_DIR, "vkDevicePropertiesForContextDecl.inl"))
-       writeDevicePropertiesContextDefs                (dpd, os.path.join(VULKAN_DIR, "vkDevicePropertiesForContextDefs.inl"))
-
-       writeHandleType                                                 (api, os.path.join(VULKAN_DIR, "vkHandleType.inl"))
-       writeBasicTypes                                                 (api, os.path.join(VULKAN_DIR, "vkBasicTypes.inl"))
-       writeCompositeTypes                                             (api, os.path.join(VULKAN_DIR, "vkStructTypes.inl"))
-       writeInterfaceDecl                                              (api, os.path.join(VULKAN_DIR, "vkVirtualPlatformInterface.inl"),               platformFuncs,  False)
-       writeInterfaceDecl                                              (api, os.path.join(VULKAN_DIR, "vkVirtualInstanceInterface.inl"),               instanceFuncs,  False)
-       writeInterfaceDecl                                              (api, os.path.join(VULKAN_DIR, "vkVirtualDeviceInterface.inl"),                 deviceFuncs,    False)
-       writeInterfaceDecl                                              (api, os.path.join(VULKAN_DIR, "vkConcretePlatformInterface.inl"),              platformFuncs,  True)
-       writeInterfaceDecl                                              (api, os.path.join(VULKAN_DIR, "vkConcreteInstanceInterface.inl"),              instanceFuncs,  True)
-       writeInterfaceDecl                                              (api, os.path.join(VULKAN_DIR, "vkConcreteDeviceInterface.inl"),                deviceFuncs,    True)
-       writeFunctionPtrTypes                                   (api, os.path.join(VULKAN_DIR, "vkFunctionPointerTypes.inl"))
-       writeFunctionPointers                                   (api, os.path.join(VULKAN_DIR, "vkPlatformFunctionPointers.inl"),               platformFuncs)
-       writeFunctionPointers                                   (api, os.path.join(VULKAN_DIR, "vkInstanceFunctionPointers.inl"),               instanceFuncs)
-       writeFunctionPointers                                   (api, os.path.join(VULKAN_DIR, "vkDeviceFunctionPointers.inl"),                 deviceFuncs)
-       writeInitFunctionPointers                               (api, os.path.join(VULKAN_DIR, "vkInitPlatformFunctionPointers.inl"),   platformFuncs,  lambda f: f.name != "vkGetInstanceProcAddr")
-       writeInitFunctionPointers                               (api, os.path.join(VULKAN_DIR, "vkInitInstanceFunctionPointers.inl"),   instanceFuncs)
-       writeInitFunctionPointers                               (api, os.path.join(VULKAN_DIR, "vkInitDeviceFunctionPointers.inl"),             deviceFuncs)
-       writeFuncPtrInterfaceImpl                               (api, os.path.join(VULKAN_DIR, "vkPlatformDriverImpl.inl"),                             platformFuncs,  "PlatformDriver")
-       writeFuncPtrInterfaceImpl                               (api, os.path.join(VULKAN_DIR, "vkInstanceDriverImpl.inl"),                             instanceFuncs,  "InstanceDriver")
-       writeFuncPtrInterfaceImpl                               (api, os.path.join(VULKAN_DIR, "vkDeviceDriverImpl.inl"),                               deviceFuncs,    "DeviceDriver")
-       writeStrUtilProto                                               (api, os.path.join(VULKAN_DIR, "vkStrUtil.inl"))
-       writeStrUtilImpl                                                (api, os.path.join(VULKAN_DIR, "vkStrUtilImpl.inl"))
-       writeRefUtilProto                                               (api, os.path.join(VULKAN_DIR, "vkRefUtil.inl"))
-       writeRefUtilImpl                                                (api, os.path.join(VULKAN_DIR, "vkRefUtilImpl.inl"))
-       writeStructTraitsImpl                                   (api, os.path.join(VULKAN_DIR, "vkGetStructureTypeImpl.inl"))
-       writeNullDriverImpl                                             (api, os.path.join(VULKAN_DIR, "vkNullDriverImpl.inl"))
-       writeTypeUtil                                                   (api, os.path.join(VULKAN_DIR, "vkTypeUtil.inl"))
-       writeSupportedExtenions                                 (api, os.path.join(VULKAN_DIR, "vkSupportedExtensions.inl"))
-       writeCoreFunctionalities                                (api, os.path.join(VULKAN_DIR, "vkCoreFunctionalities.inl"))
-       writeExtensionFunctions                                 (api, os.path.join(VULKAN_DIR, "vkExtensionFunctions.inl"))
-       writeDeviceFeatures2                                    (api, os.path.join(VULKAN_DIR, "vkDeviceFeatures2.inl"))
-       writeMandatoryFeatures                                  (     os.path.join(VULKAN_DIR, "vkMandatoryFeatures.inl"))
-       writeExtensionList                                              (     os.path.join(VULKAN_DIR, "vkInstanceExtensions.inl"),                             'INSTANCE')
-       writeExtensionList                                              (     os.path.join(VULKAN_DIR, "vkDeviceExtensions.inl"),                               'DEVICE')
-       writeDriverIds                                                  (     os.path.join(VULKAN_DIR, "vkKnownDriverIds.inl"))
-       writeObjTypeImpl                                                (api, os.path.join(VULKAN_DIR, "vkObjTypeImpl.inl"))
+       writeDeviceProperties                                   (api, dpd, os.path.join(VULKAN_DIR[args.api], "vkDeviceProperties.inl"))
+
+       writeDevicePropertiesDefaultDeviceDefs  (dpd, os.path.join(VULKAN_DIR[args.api], "vkDevicePropertiesForDefaultDeviceDefs.inl"))
+       writeDevicePropertiesContextDecl                (dpd, os.path.join(VULKAN_DIR[args.api], "vkDevicePropertiesForContextDecl.inl"))
+       writeDevicePropertiesContextDefs                (dpd, os.path.join(VULKAN_DIR[args.api], "vkDevicePropertiesForContextDefs.inl"))
+
+       writeHandleType                                                 (api, os.path.join(VULKAN_DIR[args.api], "vkHandleType.inl"))
+       writeBasicTypes                                                 (api, os.path.join(VULKAN_DIR[args.api], "vkBasicTypes.inl"))
+       writeCompositeTypes                                             (api, os.path.join(VULKAN_DIR[args.api], "vkStructTypes.inl"))
+       writeInterfaceDecl                                              (api, os.path.join(VULKAN_DIR[args.api], "vkVirtualPlatformInterface.inl"),             platformFuncs,  False)
+       writeInterfaceDecl                                              (api, os.path.join(VULKAN_DIR[args.api], "vkVirtualInstanceInterface.inl"),             instanceFuncs,  False)
+       writeInterfaceDecl                                              (api, os.path.join(VULKAN_DIR[args.api], "vkVirtualDeviceInterface.inl"),                       deviceFuncs,    False)
+       writeInterfaceDecl                                              (api, os.path.join(VULKAN_DIR[args.api], "vkConcretePlatformInterface.inl"),            platformFuncs,  True)
+       writeInterfaceDecl                                              (api, os.path.join(VULKAN_DIR[args.api], "vkConcreteInstanceInterface.inl"),            instanceFuncs,  True)
+       writeInterfaceDecl                                              (api, os.path.join(VULKAN_DIR[args.api], "vkConcreteDeviceInterface.inl"),              deviceFuncs,    True)
+       writeFunctionPtrTypes                                   (api, os.path.join(VULKAN_DIR[args.api], "vkFunctionPointerTypes.inl"))
+       writeFunctionPointers                                   (api, os.path.join(VULKAN_DIR[args.api], "vkPlatformFunctionPointers.inl"),             platformFuncs)
+       writeFunctionPointers                                   (api, os.path.join(VULKAN_DIR[args.api], "vkInstanceFunctionPointers.inl"),             instanceFuncs)
+       writeFunctionPointers                                   (api, os.path.join(VULKAN_DIR[args.api], "vkDeviceFunctionPointers.inl"),                       deviceFuncs)
+       writeInitFunctionPointers                               (api, os.path.join(VULKAN_DIR[args.api], "vkInitPlatformFunctionPointers.inl"), platformFuncs,  lambda f: f.name != "vkGetInstanceProcAddr")
+       writeInitFunctionPointers                               (api, os.path.join(VULKAN_DIR[args.api], "vkInitInstanceFunctionPointers.inl"), instanceFuncs)
+       writeInitFunctionPointers                               (api, os.path.join(VULKAN_DIR[args.api], "vkInitDeviceFunctionPointers.inl"),           deviceFuncs)
+       writeFuncPtrInterfaceImpl                               (api, os.path.join(VULKAN_DIR[args.api], "vkPlatformDriverImpl.inl"),                           platformFuncs,  "PlatformDriver")
+       writeFuncPtrInterfaceImpl                               (api, os.path.join(VULKAN_DIR[args.api], "vkInstanceDriverImpl.inl"),                           instanceFuncs,  "InstanceDriver")
+       writeFuncPtrInterfaceImpl                               (api, os.path.join(VULKAN_DIR[args.api], "vkDeviceDriverImpl.inl"),                             deviceFuncs,    "DeviceDriver")
+       writeStrUtilProto                                               (api, os.path.join(VULKAN_DIR[args.api], "vkStrUtil.inl"))
+       writeStrUtilImpl                                                (api, os.path.join(VULKAN_DIR[args.api], "vkStrUtilImpl.inl"))
+       writeRefUtilProto                                               (api, os.path.join(VULKAN_DIR[args.api], "vkRefUtil.inl"))
+       writeRefUtilImpl                                                (api, os.path.join(VULKAN_DIR[args.api], "vkRefUtilImpl.inl"))
+       writeStructTraitsImpl                                   (api, os.path.join(VULKAN_DIR[args.api], "vkGetStructureTypeImpl.inl"))
+       writeNullDriverImpl                                             (api, os.path.join(VULKAN_DIR[args.api], "vkNullDriverImpl.inl"))
+       writeTypeUtil                                                   (api, os.path.join(VULKAN_DIR[args.api], "vkTypeUtil.inl"))
+       writeSupportedExtenions                                 (api, os.path.join(VULKAN_DIR[args.api], "vkSupportedExtensions.inl"))
+       writeCoreFunctionalities                                (api, os.path.join(VULKAN_DIR[args.api], "vkCoreFunctionalities.inl"))
+       writeExtensionFunctions                                 (api, os.path.join(VULKAN_DIR[args.api], "vkExtensionFunctions.inl"))
+       writeDeviceFeatures2                                    (api, os.path.join(VULKAN_DIR[args.api], "vkDeviceFeatures2.inl"))
+       writeMandatoryFeatures                                  (api, os.path.join(VULKAN_DIR[args.api], "vkMandatoryFeatures.inl"))
+       writeExtensionList                                              (     os.path.join(VULKAN_DIR[args.api], "vkInstanceExtensions.inl"),                           'INSTANCE')
+       writeExtensionList                                              (     os.path.join(VULKAN_DIR[args.api], "vkDeviceExtensions.inl"),                             'DEVICE')
+       writeDriverIds                                                  (args.api, os.path.join(VULKAN_DIR[args.api], "vkKnownDriverIds.inl"))
+       writeObjTypeImpl                                                (api, os.path.join(VULKAN_DIR[args.api], "vkObjTypeImpl.inl"))
index f1c3099..8d1666f 100644 (file)
 
 import os
 import sys
-
+import argparse
 
 sys.path.append(os.path.join(os.path.dirname(__file__), "..", "..", "..", "scripts"))
 
 from build.common import DEQP_DIR
 from khr_util.format import writeInlFile
 
-VULKAN_H       = os.path.join(os.path.dirname(__file__), "src", "vulkan_core.h")
-VULKAN_DIR     = os.path.join(os.path.dirname(__file__), "..", "framework", "vulkan")
+VK_API_NAMES                                   = { "" :        "Vulkan API",
+                                                                       "SC" :  "Vulkan SC API"}
+
+
+VULKAN_H       = { "" :        os.path.join(os.path.dirname(__file__), "src", "vulkan_core.h"),
+                               "SC" :  os.path.join(os.path.dirname(__file__), "src", "vulkan_sc_core.h") }
+VULKAN_DIR     = { "" :        os.path.join(os.path.dirname(__file__), "..", "framework", "vulkan"),
+                               "SC" :  os.path.join(os.path.dirname(__file__), "..", "framework", "vulkan", "generated", "vulkansc") }
 
 INL_HEADER = """\
 /* WARNING: This is auto-generated file. Do not modify, since changes will
@@ -64,6 +70,22 @@ def writeVulkanCHeader (src, filename):
                yield dst
        writeInlFile(filename, INL_HEADER, gen())
 
+def parseCmdLineArgs():
+       parser = argparse.ArgumentParser(description = "Generate Vulkan INL files",
+                                                                        formatter_class=argparse.ArgumentDefaultsHelpFormatter)
+       parser.add_argument("-a",
+                                               "--api",
+                                               dest="api",
+                                               default="",
+                                               help="Choose between Vulkan and Vulkan SC")
+       return parser.parse_args()
+
+def getApiName (args):
+       if len(args)<2:
+               return ''
+       return args[1]
+
 if __name__ == "__main__":
-       src                             = readFile(VULKAN_H)
-       writeVulkanCHeader                              (src, os.path.join(VULKAN_DIR, "vkVulkan_c.inl"))
+       args                                    = parseCmdLineArgs()
+       src                                             = readFile(VULKAN_H[args.api])
+       writeVulkanCHeader              (src, os.path.join(VULKAN_DIR[args.api], "vkVulkan_c.inl"))
index 49a0181..c73eee7 100644 (file)
@@ -9,42 +9,42 @@
 VkPhysicalDeviceFeatures                                                                       FEATURES ( robustBufferAccess )                                                                 REQUIREMENTS ()
 VkPhysicalDeviceFeatures                                                                       FEATURES ( shaderSampledImageArrayDynamicIndexing )                             REQUIREMENTS ( VK_EXT_descriptor_indexing )
 VkPhysicalDeviceFeatures                                                                       FEATURES ( shaderStorageBufferArrayDynamicIndexing )                    REQUIREMENTS ( VK_EXT_descriptor_indexing )
-VkPhysicalDevice8BitStorageFeaturesKHR                                         FEATURES ( storageBuffer8BitAccess )                                                    REQUIREMENTS ( VK_KHR_8bit_storage )
+VkPhysicalDevice8BitStorageFeatures                                                    FEATURES ( storageBuffer8BitAccess )                                                    REQUIREMENTS ( VK_KHR_8bit_storage )
 VkPhysicalDeviceVulkan11Features                                                       FEATURES ( multiview )                                                                                  REQUIREMENTS ( "ApiVersion(1, 2, 0)" )
 VkPhysicalDeviceMultiviewFeatures                                                      FEATURES ( multiview )                                                                                  REQUIREMENTS ( "ApiVersion(1, 1, 0)" )
 VkPhysicalDeviceMultiviewFeatures                                                      FEATURES ( multiview )                                                                                  REQUIREMENTS ( VK_KHR_multiview )
 VkPhysicalDeviceVariablePointersFeatures                                       FEATURES ( variablePointersStorageBuffer )                                              REQUIREMENTS ( VK_KHR_variable_pointers )
-VkPhysicalDeviceDescriptorIndexingFeaturesEXT                          FEATURES ( shaderUniformTexelBufferArrayDynamicIndexing )               REQUIREMENTS ( VK_EXT_descriptor_indexing )
-VkPhysicalDeviceDescriptorIndexingFeaturesEXT                          FEATURES ( shaderStorageTexelBufferArrayDynamicIndexing )               REQUIREMENTS ( VK_EXT_descriptor_indexing )
-VkPhysicalDeviceDescriptorIndexingFeaturesEXT                          FEATURES ( shaderSampledImageArrayNonUniformIndexing )                  REQUIREMENTS ( VK_EXT_descriptor_indexing )
-VkPhysicalDeviceDescriptorIndexingFeaturesEXT                          FEATURES ( shaderStorageBufferArrayNonUniformIndexing )                 REQUIREMENTS ( VK_EXT_descriptor_indexing )
-VkPhysicalDeviceDescriptorIndexingFeaturesEXT                          FEATURES ( shaderUniformTexelBufferArrayNonUniformIndexing )    REQUIREMENTS ( VK_EXT_descriptor_indexing )
-VkPhysicalDeviceDescriptorIndexingFeaturesEXT                          FEATURES ( descriptorBindingSampledImageUpdateAfterBind )               REQUIREMENTS ( VK_EXT_descriptor_indexing )
-VkPhysicalDeviceDescriptorIndexingFeaturesEXT                          FEATURES ( descriptorBindingStorageImageUpdateAfterBind )               REQUIREMENTS ( VK_EXT_descriptor_indexing )
-VkPhysicalDeviceDescriptorIndexingFeaturesEXT                          FEATURES ( descriptorBindingStorageBufferUpdateAfterBind )              REQUIREMENTS ( VK_EXT_descriptor_indexing )
-VkPhysicalDeviceDescriptorIndexingFeaturesEXT                          FEATURES ( descriptorBindingUniformTexelBufferUpdateAfterBind ) REQUIREMENTS ( VK_EXT_descriptor_indexing )
-VkPhysicalDeviceDescriptorIndexingFeaturesEXT                          FEATURES ( descriptorBindingStorageTexelBufferUpdateAfterBind ) REQUIREMENTS ( VK_EXT_descriptor_indexing )
-VkPhysicalDeviceDescriptorIndexingFeaturesEXT                          FEATURES ( descriptorBindingUpdateUnusedWhilePending )                  REQUIREMENTS ( VK_EXT_descriptor_indexing )
-VkPhysicalDeviceDescriptorIndexingFeaturesEXT                          FEATURES ( descriptorBindingPartiallyBound )                                    REQUIREMENTS ( VK_EXT_descriptor_indexing )
-VkPhysicalDeviceDescriptorIndexingFeaturesEXT                          FEATURES ( runtimeDescriptorArray )                                                             REQUIREMENTS ( VK_EXT_descriptor_indexing )
+VkPhysicalDeviceDescriptorIndexingFeatures                                     FEATURES ( shaderUniformTexelBufferArrayDynamicIndexing )               REQUIREMENTS ( VK_EXT_descriptor_indexing )
+VkPhysicalDeviceDescriptorIndexingFeatures                                     FEATURES ( shaderStorageTexelBufferArrayDynamicIndexing )               REQUIREMENTS ( VK_EXT_descriptor_indexing )
+VkPhysicalDeviceDescriptorIndexingFeatures                                     FEATURES ( shaderSampledImageArrayNonUniformIndexing )                  REQUIREMENTS ( VK_EXT_descriptor_indexing )
+VkPhysicalDeviceDescriptorIndexingFeatures                                     FEATURES ( shaderStorageBufferArrayNonUniformIndexing )                 REQUIREMENTS ( VK_EXT_descriptor_indexing )
+VkPhysicalDeviceDescriptorIndexingFeatures                                     FEATURES ( shaderUniformTexelBufferArrayNonUniformIndexing )    REQUIREMENTS ( VK_EXT_descriptor_indexing )
+VkPhysicalDeviceDescriptorIndexingFeatures                                     FEATURES ( descriptorBindingSampledImageUpdateAfterBind )               REQUIREMENTS ( VK_EXT_descriptor_indexing )
+VkPhysicalDeviceDescriptorIndexingFeatures                                     FEATURES ( descriptorBindingStorageImageUpdateAfterBind )               REQUIREMENTS ( VK_EXT_descriptor_indexing )
+VkPhysicalDeviceDescriptorIndexingFeatures                                     FEATURES ( descriptorBindingStorageBufferUpdateAfterBind )              REQUIREMENTS ( VK_EXT_descriptor_indexing )
+VkPhysicalDeviceDescriptorIndexingFeatures                                     FEATURES ( descriptorBindingUniformTexelBufferUpdateAfterBind ) REQUIREMENTS ( VK_EXT_descriptor_indexing )
+VkPhysicalDeviceDescriptorIndexingFeatures                                     FEATURES ( descriptorBindingStorageTexelBufferUpdateAfterBind ) REQUIREMENTS ( VK_EXT_descriptor_indexing )
+VkPhysicalDeviceDescriptorIndexingFeatures                                     FEATURES ( descriptorBindingUpdateUnusedWhilePending )                  REQUIREMENTS ( VK_EXT_descriptor_indexing )
+VkPhysicalDeviceDescriptorIndexingFeatures                                     FEATURES ( descriptorBindingPartiallyBound )                                    REQUIREMENTS ( VK_EXT_descriptor_indexing )
+VkPhysicalDeviceDescriptorIndexingFeatures                                     FEATURES ( runtimeDescriptorArray )                                                             REQUIREMENTS ( VK_EXT_descriptor_indexing )
 VkPhysicalDeviceInlineUniformBlockFeaturesEXT                          FEATURES ( inlineUniformBlock )                                                                 REQUIREMENTS ( VK_EXT_inline_uniform_block )
 VkPhysicalDeviceInlineUniformBlockFeaturesEXT                          FEATURES ( descriptorBindingInlineUniformBlockUpdateAfterBind ) REQUIREMENTS ( VK_EXT_inline_uniform_block VK_EXT_descriptor_indexing )
-VkPhysicalDeviceScalarBlockLayoutFeaturesEXT                           FEATURES ( scalarBlockLayout )                                                                  REQUIREMENTS ( VK_EXT_scalar_block_layout )
-VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR         FEATURES ( uniformBufferStandardLayout )                                                REQUIREMENTS ( VK_KHR_uniform_buffer_standard_layout )
+VkPhysicalDeviceScalarBlockLayoutFeatures                                      FEATURES ( scalarBlockLayout )                                                                  REQUIREMENTS ( VK_EXT_scalar_block_layout )
+VkPhysicalDeviceUniformBufferStandardLayoutFeatures                    FEATURES ( uniformBufferStandardLayout )                                                REQUIREMENTS ( VK_KHR_uniform_buffer_standard_layout )
 VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR                FEATURES ( pipelineExecutableInfo )                                                             REQUIREMENTS ( VK_KHR_pipeline_executable_properties )
 VkPhysicalDeviceSubgroupSizeControlFeaturesEXT                         FEATURES ( subgroupSizeControl )                                                                REQUIREMENTS ( VK_EXT_subgroup_size_control )
 VkPhysicalDeviceSubgroupSizeControlFeaturesEXT                         FEATURES ( computeFullSubgroups )                                                               REQUIREMENTS ( VK_EXT_subgroup_size_control )
 VkPhysicalDeviceVulkan12Features                                                       FEATURES ( subgroupBroadcastDynamicId )                                                 REQUIREMENTS ( "ApiVersion(1, 2, 0)" )
-VkPhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR         FEATURES ( shaderSubgroupExtendedTypes )                                                REQUIREMENTS ( VK_KHR_shader_subgroup_extended_types )
+VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures                    FEATURES ( shaderSubgroupExtendedTypes )                                                REQUIREMENTS ( VK_KHR_shader_subgroup_extended_types )
 VkPhysicalDeviceVulkan12Features                                                       FEATURES ( shaderSubgroupExtendedTypes )                                                REQUIREMENTS ( "ApiVersion(1, 2, 0)" )
-VkPhysicalDeviceImagelessFramebufferFeaturesKHR                        FEATURES ( imagelessFramebuffer )                                                               REQUIREMENTS ( VK_KHR_imageless_framebuffer )
+VkPhysicalDeviceImagelessFramebufferFeatures                           FEATURES ( imagelessFramebuffer )                                                               REQUIREMENTS ( VK_KHR_imageless_framebuffer )
 VkPhysicalDeviceVulkan12Features                                                       FEATURES ( imagelessFramebuffer )                                                               REQUIREMENTS ( "ApiVersion(1, 2, 0)" )
 VkPhysicalDeviceVulkan12Features                                                       FEATURES ( uniformBufferStandardLayout )                                                REQUIREMENTS ( "ApiVersion(1, 2, 0)" )
-VkPhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR         FEATURES ( separateDepthStencilLayouts )                                                REQUIREMENTS ( VK_KHR_separate_depth_stencil_layouts )
+VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures                    FEATURES ( separateDepthStencilLayouts )                                                REQUIREMENTS ( VK_KHR_separate_depth_stencil_layouts )
 VkPhysicalDeviceVulkan12Features                                                       FEATURES ( separateDepthStencilLayouts )                                                REQUIREMENTS ( "ApiVersion(1, 2, 0)" )
-VkPhysicalDeviceHostQueryResetFeaturesEXT                                      FEATURES ( hostQueryReset )                                                                             REQUIREMENTS ( VK_EXT_host_query_reset )
+VkPhysicalDeviceHostQueryResetFeatures                                         FEATURES ( hostQueryReset )                                                                             REQUIREMENTS ( VK_EXT_host_query_reset )
 VkPhysicalDeviceVulkan12Features                                                       FEATURES ( hostQueryReset )                                                                             REQUIREMENTS ( "ApiVersion(1, 2, 0)" )
-VkPhysicalDeviceTimelineSemaphoreFeaturesKHR                           FEATURES ( timelineSemaphore )                                                                  REQUIREMENTS ( VK_KHR_timeline_semaphore )
+VkPhysicalDeviceTimelineSemaphoreFeatures                                      FEATURES ( timelineSemaphore )                                                                  REQUIREMENTS ( VK_KHR_timeline_semaphore )
 VkPhysicalDeviceVulkan12Features                                                       FEATURES ( timelineSemaphore )                                                                  REQUIREMENTS ( "ApiVersion(1, 2, 0)" )
 VkPhysicalDeviceVulkan12Features                                                       FEATURES ( shaderUniformTexelBufferArrayDynamicIndexing )               REQUIREMENTS ( "ApiVersion(1, 2, 0)" physicalDeviceVulkan12Features.descriptorIndexing )
 VkPhysicalDeviceVulkan12Features                                                       FEATURES ( shaderStorageTexelBufferArrayDynamicIndexing )               REQUIREMENTS ( "ApiVersion(1, 2, 0)" physicalDeviceVulkan12Features.descriptorIndexing )
@@ -66,20 +66,20 @@ VkPhysicalDeviceYcbcrImageArraysFeaturesEXT                                 FEATURES ( ycbcrImageArrays )
 VkPhysicalDeviceIndexTypeUint8FeaturesEXT                                      FEATURES ( indexTypeUint8 )                                                                             REQUIREMENTS ( VK_EXT_index_type_uint8 )
 VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT      FEATURES ( shaderDemoteToHelperInvocation )                                             REQUIREMENTS ( VK_EXT_shader_demote_to_helper_invocation )
 VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT                                FEATURES ( texelBufferAlignment )                                                               REQUIREMENTS ( VK_EXT_texel_buffer_alignment )
-VkPhysicalDeviceVulkanMemoryModelFeaturesKHR                           FEATURES ( vulkanMemoryModel )                                                                  REQUIREMENTS ( VK_KHR_vulkan_memory_model )
-VkPhysicalDeviceBufferDeviceAddressFeaturesKHR                         FEATURES ( bufferDeviceAddress )                                                                REQUIREMENTS ( VK_KHR_buffer_device_address )
+VkPhysicalDeviceVulkanMemoryModelFeatures                                      FEATURES ( vulkanMemoryModel )                                                                  REQUIREMENTS ( VK_KHR_vulkan_memory_model )
+VkPhysicalDeviceBufferDeviceAddressFeatures                                    FEATURES ( bufferDeviceAddress )                                                                REQUIREMENTS ( VK_KHR_buffer_device_address )
 VkPhysicalDevicePerformanceQueryFeaturesKHR                                    FEATURES ( performanceCounterQueryPools )                                               REQUIREMENTS ( VK_KHR_performance_query )
 VkPhysicalDeviceTransformFeedbackFeaturesEXT                           FEATURES ( transformFeedback )                                                                  REQUIREMENTS ( VK_EXT_transform_feedback )
 VkPhysicalDeviceConditionalRenderingFeaturesEXT                                FEATURES ( conditionalRendering )                                                               REQUIREMENTS ( VK_EXT_conditional_rendering )
 VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT                      FEATURES ( vertexAttributeInstanceRateDivisor )                                 REQUIREMENTS ( VK_EXT_vertex_attribute_divisor )
 VkPhysicalDeviceFragmentDensityMapFeaturesEXT                          FEATURES ( fragmentDensityMap )                                                                 REQUIREMENTS ( VK_EXT_fragment_density_map )
 VkPhysicalDeviceShaderClockFeaturesKHR                                         FEATURES ( shaderSubgroupClock )                                                                REQUIREMENTS ( VK_KHR_shader_clock )
-VkPhysicalDeviceShaderAtomicInt64FeaturesKHR                           FEATURES ( shaderBufferInt64Atomics )                                                   REQUIREMENTS ( VK_KHR_shader_atomic_int64 )
-VkPhysicalDevice16BitStorageFeaturesKHR                                        FEATURES ( storageBuffer16BitAccess )                                                   REQUIREMENTS ( VK_KHR_16bit_storage )
+VkPhysicalDeviceShaderAtomicInt64Features                                      FEATURES ( shaderBufferInt64Atomics )                                                   REQUIREMENTS ( VK_KHR_shader_atomic_int64 )
+VkPhysicalDevice16BitStorageFeatures                                           FEATURES ( storageBuffer16BitAccess )                                                   REQUIREMENTS ( VK_KHR_16bit_storage )
 VkPhysicalDeviceShaderFloat16Int8Features                                      FEATURES ( shaderFloat16 shaderInt8 )                                                   REQUIREMENTS ( VK_KHR_shader_float16_int8 )
 VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT                     FEATURES ( fragmentShaderSampleInterlock fragmentShaderPixelInterlock fragmentShaderShadingRateInterlock )                                              REQUIREMENTS ( VK_EXT_fragment_shader_interlock )
 VkPhysicalDeviceLineRasterizationFeaturesEXT                           FEATURES ( rectangularLines bresenhamLines smoothLines stippledRectangularLines stippledBresenhamLines stippledSmoothLines )    REQUIREMENTS ( VK_EXT_line_rasterization )
-VkPhysicalDeviceSamplerYcbcrConversionFeaturesKHR                      FEATURES ( samplerYcbcrConversion )                                                             REQUIREMENTS ( VK_KHR_sampler_ycbcr_conversion )
+VkPhysicalDeviceSamplerYcbcrConversionFeatures                         FEATURES ( samplerYcbcrConversion )                                                             REQUIREMENTS ( VK_KHR_sampler_ycbcr_conversion )
 VkPhysicalDeviceVulkan12Features                                                       FEATURES ( drawIndirectCount )                                                                  REQUIREMENTS ( "ApiVersion(1, 2, 0)" VK_KHR_draw_indirect_count )
 VkPhysicalDeviceVulkan12Features                                                       FEATURES ( samplerMirrorClampToEdge )                                                   REQUIREMENTS ( "ApiVersion(1, 2, 0)" VK_KHR_sampler_mirror_clamp_to_edge )
 VkPhysicalDeviceVulkan12Features                                                       FEATURES ( samplerFilterMinmax )                                                                REQUIREMENTS ( "ApiVersion(1, 2, 0)" VK_EXT_sampler_filter_minmax )
diff --git a/external/vulkancts/scripts/src/vulkan_sc_core.h b/external/vulkancts/scripts/src/vulkan_sc_core.h
new file mode 100644 (file)
index 0000000..3b7f30d
--- /dev/null
@@ -0,0 +1,7161 @@
+#ifndef VULKAN_SC_CORE_H_
+#define VULKAN_SC_CORE_H_ 1
+
+/*
+** Copyright 2015-2021 The Khronos Group Inc.
+**
+** SPDX-License-Identifier: Apache-2.0
+*/
+
+/*
+** This header is generated from the Khronos Vulkan XML API Registry.
+**
+*/
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+
+#define VK_VERSION_1_0 1
+#include "vk_platform.h"
+
+#define VK_DEFINE_HANDLE(object) typedef struct object##_T* object;
+
+
+#if !defined(VK_DEFINE_NON_DISPATCHABLE_HANDLE)
+#if defined(__LP64__) || defined(_WIN64) || (defined(__x86_64__) && !defined(__ILP32__) ) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__)
+        #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef struct object##_T *object;
+#else
+        #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef uint64_t object;
+#endif
+#endif
+
+#define VK_MAKE_VERSION(major, minor, patch) \
+    ((((uint32_t)(major)) << 22) | (((uint32_t)(minor)) << 12) | ((uint32_t)(patch)))
+
+// DEPRECATED: This define has been removed. Specific version defines (e.g. VK_API_VERSION_1_0), or the VK_MAKE_VERSION macro, should be used instead.
+//#define VK_API_VERSION VK_MAKE_VERSION(1, 0, 0) // Patch version should always be set to 0
+
+// Vulkan 1.0 version number
+#define VK_API_VERSION_1_0 VK_MAKE_VERSION(1, 0, 0)// Patch version should always be set to 0
+
+// Version of this file
+#define VK_HEADER_VERSION 0
+
+// Complete version of this file
+#define VK_HEADER_VERSION_COMPLETE VK_MAKE_VERSION(1, 2, VK_HEADER_VERSION)
+
+#define VK_VERSION_MAJOR(version) ((uint32_t)(version) >> 22)
+#define VK_VERSION_MINOR(version) (((uint32_t)(version) >> 12) & 0x3ff)
+#define VK_VERSION_PATCH(version) ((uint32_t)(version) & 0xfff)
+
+#define VK_NULL_HANDLE 0
+
+typedef uint32_t VkBool32;
+typedef uint64_t VkDeviceAddress;
+typedef uint64_t VkDeviceSize;
+typedef uint32_t VkFlags;
+typedef uint32_t VkSampleMask;
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkBuffer)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkImage)
+VK_DEFINE_HANDLE(VkInstance)
+VK_DEFINE_HANDLE(VkPhysicalDevice)
+VK_DEFINE_HANDLE(VkDevice)
+VK_DEFINE_HANDLE(VkQueue)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSemaphore)
+VK_DEFINE_HANDLE(VkCommandBuffer)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkFence)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDeviceMemory)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkEvent)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkQueryPool)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkBufferView)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkImageView)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkShaderModule)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipelineCache)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipelineLayout)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipeline)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkRenderPass)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorSetLayout)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSampler)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorSet)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorPool)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkFramebuffer)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkCommandPool)
+#define VK_ATTACHMENT_UNUSED              (~0U)
+#define VK_FALSE                          0
+#define VK_LOD_CLAMP_NONE                 1000.0f
+#define VK_QUEUE_FAMILY_IGNORED           (~0U)
+#define VK_REMAINING_ARRAY_LAYERS         (~0U)
+#define VK_REMAINING_MIP_LEVELS           (~0U)
+#define VK_SUBPASS_EXTERNAL               (~0U)
+#define VK_TRUE                           1
+#define VK_WHOLE_SIZE                     (~0ULL)
+#define VK_MAX_MEMORY_TYPES               32
+#define VK_MAX_MEMORY_HEAPS               16
+#define VK_MAX_PHYSICAL_DEVICE_NAME_SIZE  256
+#define VK_UUID_SIZE                      16
+#define VK_MAX_EXTENSION_NAME_SIZE        256
+#define VK_MAX_DESCRIPTION_SIZE           256
+
+typedef enum VkResult {
+    VK_SUCCESS = 0,
+    VK_NOT_READY = 1,
+    VK_TIMEOUT = 2,
+    VK_EVENT_SET = 3,
+    VK_EVENT_RESET = 4,
+    VK_INCOMPLETE = 5,
+    VK_ERROR_OUT_OF_HOST_MEMORY = -1,
+    VK_ERROR_OUT_OF_DEVICE_MEMORY = -2,
+    VK_ERROR_INITIALIZATION_FAILED = -3,
+    VK_ERROR_DEVICE_LOST = -4,
+    VK_ERROR_MEMORY_MAP_FAILED = -5,
+    VK_ERROR_LAYER_NOT_PRESENT = -6,
+    VK_ERROR_EXTENSION_NOT_PRESENT = -7,
+    VK_ERROR_FEATURE_NOT_PRESENT = -8,
+    VK_ERROR_INCOMPATIBLE_DRIVER = -9,
+    VK_ERROR_TOO_MANY_OBJECTS = -10,
+    VK_ERROR_FORMAT_NOT_SUPPORTED = -11,
+    VK_ERROR_FRAGMENTED_POOL = -12,
+    VK_ERROR_UNKNOWN = -13,
+    VK_ERROR_OUT_OF_POOL_MEMORY = -1000069000,
+    VK_ERROR_INVALID_EXTERNAL_HANDLE = -1000072003,
+    VK_ERROR_FRAGMENTATION = -1000161000,
+    VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS = -1000257000,
+    VK_ERROR_INVALID_PIPELINE_CACHE_DATA = -1000349000,
+    VK_ERROR_NO_PIPELINE_MATCH = -1000349001,
+    VK_ERROR_SURFACE_LOST_KHR = -1000000000,
+    VK_ERROR_NATIVE_WINDOW_IN_USE_KHR = -1000000001,
+    VK_SUBOPTIMAL_KHR = 1000001003,
+    VK_ERROR_OUT_OF_DATE_KHR = -1000001004,
+    VK_ERROR_INCOMPATIBLE_DISPLAY_KHR = -1000003001,
+    VK_ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT = -1000158000,
+    VK_ERROR_NOT_PERMITTED_EXT = -1000174001,
+    VK_ERROR_INVALID_PIPELINE_CACHE_DATA_KHR = VK_ERROR_INVALID_PIPELINE_CACHE_DATA,
+    VK_ERROR_NO_PIPELINE_MATCH_KHR = VK_ERROR_NO_PIPELINE_MATCH,
+    VK_RESULT_MAX_ENUM = 0x7FFFFFFF
+} VkResult;
+
+typedef enum VkStructureType {
+    VK_STRUCTURE_TYPE_APPLICATION_INFO = 0,
+    VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO = 1,
+    VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO = 2,
+    VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO = 3,
+    VK_STRUCTURE_TYPE_SUBMIT_INFO = 4,
+    VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO = 5,
+    VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE = 6,
+    VK_STRUCTURE_TYPE_BIND_SPARSE_INFO = 7,
+    VK_STRUCTURE_TYPE_FENCE_CREATE_INFO = 8,
+    VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO = 9,
+    VK_STRUCTURE_TYPE_EVENT_CREATE_INFO = 10,
+    VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO = 11,
+    VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO = 12,
+    VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO = 13,
+    VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO = 14,
+    VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO = 15,
+    VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO = 16,
+    VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO = 17,
+    VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO = 18,
+    VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO = 19,
+    VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO = 20,
+    VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO = 21,
+    VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO = 22,
+    VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO = 23,
+    VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO = 24,
+    VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO = 25,
+    VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO = 26,
+    VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO = 27,
+    VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO = 28,
+    VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO = 29,
+    VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO = 30,
+    VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO = 31,
+    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO = 32,
+    VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO = 33,
+    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO = 34,
+    VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET = 35,
+    VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET = 36,
+    VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO = 37,
+    VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO = 38,
+    VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO = 39,
+    VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO = 40,
+    VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO = 41,
+    VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO = 42,
+    VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO = 43,
+    VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER = 44,
+    VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER = 45,
+    VK_STRUCTURE_TYPE_MEMORY_BARRIER = 46,
+    VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO = 47,
+    VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO = 48,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES = 1000094000,
+    VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO = 1000157000,
+    VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO = 1000157001,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES = 1000083000,
+    VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS = 1000127000,
+    VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO = 1000127001,
+    VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO = 1000060000,
+    VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO = 1000060003,
+    VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO = 1000060004,
+    VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO = 1000060005,
+    VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO = 1000060006,
+    VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO = 1000060013,
+    VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO = 1000060014,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES = 1000070000,
+    VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO = 1000070001,
+    VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2 = 1000146000,
+    VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2 = 1000146001,
+    VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2 = 1000146002,
+    VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2 = 1000146003,
+    VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2 = 1000146004,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2 = 1000059000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2 = 1000059001,
+    VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2 = 1000059002,
+    VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2 = 1000059003,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2 = 1000059004,
+    VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2 = 1000059005,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2 = 1000059006,
+    VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2 = 1000059007,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2 = 1000059008,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES = 1000117000,
+    VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO = 1000117001,
+    VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO = 1000117002,
+    VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO = 1000117003,
+    VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO = 1000053000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES = 1000053001,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES = 1000053002,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES = 1000120000,
+    VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO = 1000145000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES = 1000145001,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES = 1000145002,
+    VK_STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2 = 1000145003,
+    VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO = 1000156000,
+    VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO = 1000156001,
+    VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO = 1000156002,
+    VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO = 1000156003,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES = 1000156004,
+    VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES = 1000156005,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO = 1000071000,
+    VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES = 1000071001,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO = 1000071002,
+    VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES = 1000071003,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES = 1000071004,
+    VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO = 1000072000,
+    VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO = 1000072001,
+    VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO = 1000072002,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO = 1000112000,
+    VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES = 1000112001,
+    VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO = 1000113000,
+    VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO = 1000077000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO = 1000076000,
+    VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES = 1000076001,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES = 1000168000,
+    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT = 1000168001,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES = 1000063000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES = 49,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES = 50,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES = 51,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES = 52,
+    VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO = 1000147000,
+    VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2 = 1000109000,
+    VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2 = 1000109001,
+    VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2 = 1000109002,
+    VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2 = 1000109003,
+    VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2 = 1000109004,
+    VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO = 1000109005,
+    VK_STRUCTURE_TYPE_SUBPASS_END_INFO = 1000109006,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES = 1000177000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES = 1000196000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES = 1000180000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES = 1000082000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES = 1000197000,
+    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO = 1000161000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES = 1000161001,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES = 1000161002,
+    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO = 1000161003,
+    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT = 1000161004,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES = 1000199000,
+    VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE = 1000199001,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES = 1000221000,
+    VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO = 1000246000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES = 1000130000,
+    VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO = 1000130001,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES = 1000211000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES = 1000108000,
+    VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO = 1000108001,
+    VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO = 1000108002,
+    VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO = 1000108003,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES = 1000253000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES = 1000175000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES = 1000241000,
+    VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT = 1000241001,
+    VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT = 1000241002,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES = 1000261000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES = 1000207000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES = 1000207001,
+    VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO = 1000207002,
+    VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO = 1000207003,
+    VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO = 1000207004,
+    VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO = 1000207005,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES = 1000257000,
+    VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO = 1000244001,
+    VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO = 1000257002,
+    VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO = 1000257003,
+    VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO = 1000257004,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_SC_1_0_PROPERTIES = 1000357000,
+    VK_STRUCTURE_TYPE_DEVICE_MEMORY_RESERVATION_CREATE_INFO = 1000357001,
+    VK_STRUCTURE_TYPE_COMMAND_POOL_MEMORY_RESERVATION_CREATE_INFO = 1000357002,
+    VK_STRUCTURE_TYPE_COMMAND_POOL_MEMORY_CONSUMPTION = 1000357003,
+    VK_STRUCTURE_TYPE_PIPELINE_POOL_SIZE = 1000357004,
+    VK_STRUCTURE_TYPE_PIPELINE_POOL_ENTRY_SIZE_CREATE_INFO = 1000357005,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_SC_1_0_FEATURES = 1000357006,
+    VK_STRUCTURE_TYPE_FAULT_DATA = 1000298000,
+    VK_STRUCTURE_TYPE_FAULT_CALLBACK_INFO = 1000298001,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FAULT_HANDLING_PROPERTIES = 1000298002,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_IDENTIFIER_FEATURES = 1000334000,
+    VK_STRUCTURE_TYPE_PIPELINE_IDENTIFIER_INFO = 1000334001,
+    VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR = 1000001000,
+    VK_STRUCTURE_TYPE_PRESENT_INFO_KHR = 1000001001,
+    VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR = 1000060007,
+    VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR = 1000060008,
+    VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR = 1000060009,
+    VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR = 1000060010,
+    VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR = 1000060011,
+    VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR = 1000060012,
+    VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR = 1000002000,
+    VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR = 1000002001,
+    VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR = 1000003000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT = 1000066000,
+    VK_STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT = 1000067000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT = 1000067001,
+    VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR = 1000074000,
+    VK_STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR = 1000074001,
+    VK_STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR = 1000074002,
+    VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR = 1000079000,
+    VK_STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR = 1000079001,
+    VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR = 1000084000,
+    VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT = 1000090000,
+    VK_STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT = 1000091000,
+    VK_STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT = 1000091001,
+    VK_STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT = 1000091002,
+    VK_STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT = 1000091003,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT = 1000099000,
+    VK_STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT = 1000099001,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT = 1000101000,
+    VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT = 1000101001,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT = 1000102000,
+    VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT = 1000102001,
+    VK_STRUCTURE_TYPE_HDR_METADATA_EXT = 1000105000,
+    VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR = 1000111000,
+    VK_STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR = 1000115000,
+    VK_STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR = 1000115001,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR = 1000119000,
+    VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR = 1000119001,
+    VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR = 1000119002,
+    VK_STRUCTURE_TYPE_DISPLAY_PROPERTIES_2_KHR = 1000121000,
+    VK_STRUCTURE_TYPE_DISPLAY_PLANE_PROPERTIES_2_KHR = 1000121001,
+    VK_STRUCTURE_TYPE_DISPLAY_MODE_PROPERTIES_2_KHR = 1000121002,
+    VK_STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR = 1000121003,
+    VK_STRUCTURE_TYPE_DISPLAY_PLANE_CAPABILITIES_2_KHR = 1000121004,
+    VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT = 1000143000,
+    VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT = 1000143001,
+    VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT = 1000143002,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT = 1000143003,
+    VK_STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT = 1000143004,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT = 1000148000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT = 1000148001,
+    VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT = 1000148002,
+    VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT = 1000158000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT = 1000158002,
+    VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT = 1000158003,
+    VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT = 1000158004,
+    VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT = 1000158005,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT = 1000170000,
+    VK_STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT = 1000170001,
+    VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT = 1000174000,
+    VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT = 1000178000,
+    VK_STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT = 1000178001,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT = 1000178002,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR = 1000181000,
+    VK_STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT = 1000184000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT = 1000190000,
+    VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT = 1000190001,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT = 1000190002,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT = 1000212000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES_KHR = 1000215000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT = 1000225000,
+    VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT = 1000225001,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT = 1000225002,
+    VK_STRUCTURE_TYPE_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR = 1000226000,
+    VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_STATE_CREATE_INFO_KHR = 1000226001,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_PROPERTIES_KHR = 1000226002,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_FEATURES_KHR = 1000226003,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_KHR = 1000226004,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT = 1000234000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT = 1000237000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT = 1000251000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT = 1000252000,
+    VK_STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT = 1000256000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT = 1000259000,
+    VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT = 1000259001,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT = 1000259002,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT = 1000260000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT = 1000265000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT = 1000267000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT = 1000276000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT = 1000281000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT = 1000281001,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT = 1000286000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT = 1000286001,
+    VK_STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT = 1000287000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT = 1000287001,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT = 1000287002,
+    VK_STRUCTURE_TYPE_REFRESH_OBJECT_LIST_KHR = 1000299000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT = 1000335000,
+    VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2_KHR = 1000337000,
+    VK_STRUCTURE_TYPE_COPY_IMAGE_INFO_2_KHR = 1000337001,
+    VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2_KHR = 1000337002,
+    VK_STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2_KHR = 1000337003,
+    VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2_KHR = 1000337004,
+    VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2_KHR = 1000337005,
+    VK_STRUCTURE_TYPE_BUFFER_COPY_2_KHR = 1000337006,
+    VK_STRUCTURE_TYPE_IMAGE_COPY_2_KHR = 1000337007,
+    VK_STRUCTURE_TYPE_IMAGE_BLIT_2_KHR = 1000337008,
+    VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2_KHR = 1000337009,
+    VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2_KHR = 1000337010,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT = 1000340000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES,
+    VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES2_EXT = VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT,
+    VK_STRUCTURE_TYPE_FAULT_DATA_KHR = VK_STRUCTURE_TYPE_FAULT_DATA,
+    VK_STRUCTURE_TYPE_FAULT_CALLBACK_INFO_KHR = VK_STRUCTURE_TYPE_FAULT_CALLBACK_INFO,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FAULT_HANDLING_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FAULT_HANDLING_PROPERTIES,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_IDENTIFIER_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_IDENTIFIER_FEATURES,
+    VK_STRUCTURE_TYPE_PIPELINE_IDENTIFIER_INFO_KHR = VK_STRUCTURE_TYPE_PIPELINE_IDENTIFIER_INFO,
+    VK_STRUCTURE_TYPE_MAX_ENUM = 0x7FFFFFFF
+} VkStructureType;
+
+typedef enum VkImageLayout {
+    VK_IMAGE_LAYOUT_UNDEFINED = 0,
+    VK_IMAGE_LAYOUT_GENERAL = 1,
+    VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL = 2,
+    VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL = 3,
+    VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL = 4,
+    VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL = 5,
+    VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL = 6,
+    VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL = 7,
+    VK_IMAGE_LAYOUT_PREINITIALIZED = 8,
+    VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL = 1000117000,
+    VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL = 1000117001,
+    VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL = 1000241000,
+    VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL = 1000241001,
+    VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL = 1000241002,
+    VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL = 1000241003,
+    VK_IMAGE_LAYOUT_PRESENT_SRC_KHR = 1000001002,
+    VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR = 1000111000,
+    VK_IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV = 1000164003,
+    VK_IMAGE_LAYOUT_FRAGMENT_SHADING_RATE_ATTACHMENT_OPTIMAL_KHR = VK_IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV,
+    VK_IMAGE_LAYOUT_MAX_ENUM = 0x7FFFFFFF
+} VkImageLayout;
+
+typedef enum VkObjectType {
+    VK_OBJECT_TYPE_UNKNOWN = 0,
+    VK_OBJECT_TYPE_INSTANCE = 1,
+    VK_OBJECT_TYPE_PHYSICAL_DEVICE = 2,
+    VK_OBJECT_TYPE_DEVICE = 3,
+    VK_OBJECT_TYPE_QUEUE = 4,
+    VK_OBJECT_TYPE_SEMAPHORE = 5,
+    VK_OBJECT_TYPE_COMMAND_BUFFER = 6,
+    VK_OBJECT_TYPE_FENCE = 7,
+    VK_OBJECT_TYPE_DEVICE_MEMORY = 8,
+    VK_OBJECT_TYPE_BUFFER = 9,
+    VK_OBJECT_TYPE_IMAGE = 10,
+    VK_OBJECT_TYPE_EVENT = 11,
+    VK_OBJECT_TYPE_QUERY_POOL = 12,
+    VK_OBJECT_TYPE_BUFFER_VIEW = 13,
+    VK_OBJECT_TYPE_IMAGE_VIEW = 14,
+    VK_OBJECT_TYPE_SHADER_MODULE = 15,
+    VK_OBJECT_TYPE_PIPELINE_CACHE = 16,
+    VK_OBJECT_TYPE_PIPELINE_LAYOUT = 17,
+    VK_OBJECT_TYPE_RENDER_PASS = 18,
+    VK_OBJECT_TYPE_PIPELINE = 19,
+    VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT = 20,
+    VK_OBJECT_TYPE_SAMPLER = 21,
+    VK_OBJECT_TYPE_DESCRIPTOR_POOL = 22,
+    VK_OBJECT_TYPE_DESCRIPTOR_SET = 23,
+    VK_OBJECT_TYPE_FRAMEBUFFER = 24,
+    VK_OBJECT_TYPE_COMMAND_POOL = 25,
+    VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION = 1000156000,
+    VK_OBJECT_TYPE_SURFACE_KHR = 1000000000,
+    VK_OBJECT_TYPE_SWAPCHAIN_KHR = 1000001000,
+    VK_OBJECT_TYPE_DISPLAY_KHR = 1000002000,
+    VK_OBJECT_TYPE_DISPLAY_MODE_KHR = 1000002001,
+    VK_OBJECT_TYPE_MAX_ENUM = 0x7FFFFFFF
+} VkObjectType;
+
+typedef enum VkVendorId {
+    VK_VENDOR_ID_VIV = 0x10001,
+    VK_VENDOR_ID_VSI = 0x10002,
+    VK_VENDOR_ID_KAZAN = 0x10003,
+    VK_VENDOR_ID_CODEPLAY = 0x10004,
+    VK_VENDOR_ID_MESA = 0x10005,
+    VK_VENDOR_ID_POCL = 0x10006,
+    VK_VENDOR_ID_MAX_ENUM = 0x7FFFFFFF
+} VkVendorId;
+
+typedef enum VkPipelineCacheHeaderVersion {
+    VK_PIPELINE_CACHE_HEADER_VERSION_ONE = 1,
+    VK_PIPELINE_CACHE_HEADER_VERSION_MAX_ENUM = 0x7FFFFFFF
+} VkPipelineCacheHeaderVersion;
+
+typedef enum VkSystemAllocationScope {
+    VK_SYSTEM_ALLOCATION_SCOPE_COMMAND = 0,
+    VK_SYSTEM_ALLOCATION_SCOPE_OBJECT = 1,
+    VK_SYSTEM_ALLOCATION_SCOPE_CACHE = 2,
+    VK_SYSTEM_ALLOCATION_SCOPE_DEVICE = 3,
+    VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE = 4,
+    VK_SYSTEM_ALLOCATION_SCOPE_MAX_ENUM = 0x7FFFFFFF
+} VkSystemAllocationScope;
+
+typedef enum VkInternalAllocationType {
+    VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE = 0,
+    VK_INTERNAL_ALLOCATION_TYPE_MAX_ENUM = 0x7FFFFFFF
+} VkInternalAllocationType;
+
+typedef enum VkFormat {
+    VK_FORMAT_UNDEFINED = 0,
+    VK_FORMAT_R4G4_UNORM_PACK8 = 1,
+    VK_FORMAT_R4G4B4A4_UNORM_PACK16 = 2,
+    VK_FORMAT_B4G4R4A4_UNORM_PACK16 = 3,
+    VK_FORMAT_R5G6B5_UNORM_PACK16 = 4,
+    VK_FORMAT_B5G6R5_UNORM_PACK16 = 5,
+    VK_FORMAT_R5G5B5A1_UNORM_PACK16 = 6,
+    VK_FORMAT_B5G5R5A1_UNORM_PACK16 = 7,
+    VK_FORMAT_A1R5G5B5_UNORM_PACK16 = 8,
+    VK_FORMAT_R8_UNORM = 9,
+    VK_FORMAT_R8_SNORM = 10,
+    VK_FORMAT_R8_USCALED = 11,
+    VK_FORMAT_R8_SSCALED = 12,
+    VK_FORMAT_R8_UINT = 13,
+    VK_FORMAT_R8_SINT = 14,
+    VK_FORMAT_R8_SRGB = 15,
+    VK_FORMAT_R8G8_UNORM = 16,
+    VK_FORMAT_R8G8_SNORM = 17,
+    VK_FORMAT_R8G8_USCALED = 18,
+    VK_FORMAT_R8G8_SSCALED = 19,
+    VK_FORMAT_R8G8_UINT = 20,
+    VK_FORMAT_R8G8_SINT = 21,
+    VK_FORMAT_R8G8_SRGB = 22,
+    VK_FORMAT_R8G8B8_UNORM = 23,
+    VK_FORMAT_R8G8B8_SNORM = 24,
+    VK_FORMAT_R8G8B8_USCALED = 25,
+    VK_FORMAT_R8G8B8_SSCALED = 26,
+    VK_FORMAT_R8G8B8_UINT = 27,
+    VK_FORMAT_R8G8B8_SINT = 28,
+    VK_FORMAT_R8G8B8_SRGB = 29,
+    VK_FORMAT_B8G8R8_UNORM = 30,
+    VK_FORMAT_B8G8R8_SNORM = 31,
+    VK_FORMAT_B8G8R8_USCALED = 32,
+    VK_FORMAT_B8G8R8_SSCALED = 33,
+    VK_FORMAT_B8G8R8_UINT = 34,
+    VK_FORMAT_B8G8R8_SINT = 35,
+    VK_FORMAT_B8G8R8_SRGB = 36,
+    VK_FORMAT_R8G8B8A8_UNORM = 37,
+    VK_FORMAT_R8G8B8A8_SNORM = 38,
+    VK_FORMAT_R8G8B8A8_USCALED = 39,
+    VK_FORMAT_R8G8B8A8_SSCALED = 40,
+    VK_FORMAT_R8G8B8A8_UINT = 41,
+    VK_FORMAT_R8G8B8A8_SINT = 42,
+    VK_FORMAT_R8G8B8A8_SRGB = 43,
+    VK_FORMAT_B8G8R8A8_UNORM = 44,
+    VK_FORMAT_B8G8R8A8_SNORM = 45,
+    VK_FORMAT_B8G8R8A8_USCALED = 46,
+    VK_FORMAT_B8G8R8A8_SSCALED = 47,
+    VK_FORMAT_B8G8R8A8_UINT = 48,
+    VK_FORMAT_B8G8R8A8_SINT = 49,
+    VK_FORMAT_B8G8R8A8_SRGB = 50,
+    VK_FORMAT_A8B8G8R8_UNORM_PACK32 = 51,
+    VK_FORMAT_A8B8G8R8_SNORM_PACK32 = 52,
+    VK_FORMAT_A8B8G8R8_USCALED_PACK32 = 53,
+    VK_FORMAT_A8B8G8R8_SSCALED_PACK32 = 54,
+    VK_FORMAT_A8B8G8R8_UINT_PACK32 = 55,
+    VK_FORMAT_A8B8G8R8_SINT_PACK32 = 56,
+    VK_FORMAT_A8B8G8R8_SRGB_PACK32 = 57,
+    VK_FORMAT_A2R10G10B10_UNORM_PACK32 = 58,
+    VK_FORMAT_A2R10G10B10_SNORM_PACK32 = 59,
+    VK_FORMAT_A2R10G10B10_USCALED_PACK32 = 60,
+    VK_FORMAT_A2R10G10B10_SSCALED_PACK32 = 61,
+    VK_FORMAT_A2R10G10B10_UINT_PACK32 = 62,
+    VK_FORMAT_A2R10G10B10_SINT_PACK32 = 63,
+    VK_FORMAT_A2B10G10R10_UNORM_PACK32 = 64,
+    VK_FORMAT_A2B10G10R10_SNORM_PACK32 = 65,
+    VK_FORMAT_A2B10G10R10_USCALED_PACK32 = 66,
+    VK_FORMAT_A2B10G10R10_SSCALED_PACK32 = 67,
+    VK_FORMAT_A2B10G10R10_UINT_PACK32 = 68,
+    VK_FORMAT_A2B10G10R10_SINT_PACK32 = 69,
+    VK_FORMAT_R16_UNORM = 70,
+    VK_FORMAT_R16_SNORM = 71,
+    VK_FORMAT_R16_USCALED = 72,
+    VK_FORMAT_R16_SSCALED = 73,
+    VK_FORMAT_R16_UINT = 74,
+    VK_FORMAT_R16_SINT = 75,
+    VK_FORMAT_R16_SFLOAT = 76,
+    VK_FORMAT_R16G16_UNORM = 77,
+    VK_FORMAT_R16G16_SNORM = 78,
+    VK_FORMAT_R16G16_USCALED = 79,
+    VK_FORMAT_R16G16_SSCALED = 80,
+    VK_FORMAT_R16G16_UINT = 81,
+    VK_FORMAT_R16G16_SINT = 82,
+    VK_FORMAT_R16G16_SFLOAT = 83,
+    VK_FORMAT_R16G16B16_UNORM = 84,
+    VK_FORMAT_R16G16B16_SNORM = 85,
+    VK_FORMAT_R16G16B16_USCALED = 86,
+    VK_FORMAT_R16G16B16_SSCALED = 87,
+    VK_FORMAT_R16G16B16_UINT = 88,
+    VK_FORMAT_R16G16B16_SINT = 89,
+    VK_FORMAT_R16G16B16_SFLOAT = 90,
+    VK_FORMAT_R16G16B16A16_UNORM = 91,
+    VK_FORMAT_R16G16B16A16_SNORM = 92,
+    VK_FORMAT_R16G16B16A16_USCALED = 93,
+    VK_FORMAT_R16G16B16A16_SSCALED = 94,
+    VK_FORMAT_R16G16B16A16_UINT = 95,
+    VK_FORMAT_R16G16B16A16_SINT = 96,
+    VK_FORMAT_R16G16B16A16_SFLOAT = 97,
+    VK_FORMAT_R32_UINT = 98,
+    VK_FORMAT_R32_SINT = 99,
+    VK_FORMAT_R32_SFLOAT = 100,
+    VK_FORMAT_R32G32_UINT = 101,
+    VK_FORMAT_R32G32_SINT = 102,
+    VK_FORMAT_R32G32_SFLOAT = 103,
+    VK_FORMAT_R32G32B32_UINT = 104,
+    VK_FORMAT_R32G32B32_SINT = 105,
+    VK_FORMAT_R32G32B32_SFLOAT = 106,
+    VK_FORMAT_R32G32B32A32_UINT = 107,
+    VK_FORMAT_R32G32B32A32_SINT = 108,
+    VK_FORMAT_R32G32B32A32_SFLOAT = 109,
+    VK_FORMAT_R64_UINT = 110,
+    VK_FORMAT_R64_SINT = 111,
+    VK_FORMAT_R64_SFLOAT = 112,
+    VK_FORMAT_R64G64_UINT = 113,
+    VK_FORMAT_R64G64_SINT = 114,
+    VK_FORMAT_R64G64_SFLOAT = 115,
+    VK_FORMAT_R64G64B64_UINT = 116,
+    VK_FORMAT_R64G64B64_SINT = 117,
+    VK_FORMAT_R64G64B64_SFLOAT = 118,
+    VK_FORMAT_R64G64B64A64_UINT = 119,
+    VK_FORMAT_R64G64B64A64_SINT = 120,
+    VK_FORMAT_R64G64B64A64_SFLOAT = 121,
+    VK_FORMAT_B10G11R11_UFLOAT_PACK32 = 122,
+    VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 = 123,
+    VK_FORMAT_D16_UNORM = 124,
+    VK_FORMAT_X8_D24_UNORM_PACK32 = 125,
+    VK_FORMAT_D32_SFLOAT = 126,
+    VK_FORMAT_S8_UINT = 127,
+    VK_FORMAT_D16_UNORM_S8_UINT = 128,
+    VK_FORMAT_D24_UNORM_S8_UINT = 129,
+    VK_FORMAT_D32_SFLOAT_S8_UINT = 130,
+    VK_FORMAT_BC1_RGB_UNORM_BLOCK = 131,
+    VK_FORMAT_BC1_RGB_SRGB_BLOCK = 132,
+    VK_FORMAT_BC1_RGBA_UNORM_BLOCK = 133,
+    VK_FORMAT_BC1_RGBA_SRGB_BLOCK = 134,
+    VK_FORMAT_BC2_UNORM_BLOCK = 135,
+    VK_FORMAT_BC2_SRGB_BLOCK = 136,
+    VK_FORMAT_BC3_UNORM_BLOCK = 137,
+    VK_FORMAT_BC3_SRGB_BLOCK = 138,
+    VK_FORMAT_BC4_UNORM_BLOCK = 139,
+    VK_FORMAT_BC4_SNORM_BLOCK = 140,
+    VK_FORMAT_BC5_UNORM_BLOCK = 141,
+    VK_FORMAT_BC5_SNORM_BLOCK = 142,
+    VK_FORMAT_BC6H_UFLOAT_BLOCK = 143,
+    VK_FORMAT_BC6H_SFLOAT_BLOCK = 144,
+    VK_FORMAT_BC7_UNORM_BLOCK = 145,
+    VK_FORMAT_BC7_SRGB_BLOCK = 146,
+    VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK = 147,
+    VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK = 148,
+    VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK = 149,
+    VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK = 150,
+    VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK = 151,
+    VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK = 152,
+    VK_FORMAT_EAC_R11_UNORM_BLOCK = 153,
+    VK_FORMAT_EAC_R11_SNORM_BLOCK = 154,
+    VK_FORMAT_EAC_R11G11_UNORM_BLOCK = 155,
+    VK_FORMAT_EAC_R11G11_SNORM_BLOCK = 156,
+    VK_FORMAT_ASTC_4x4_UNORM_BLOCK = 157,
+    VK_FORMAT_ASTC_4x4_SRGB_BLOCK = 158,
+    VK_FORMAT_ASTC_5x4_UNORM_BLOCK = 159,
+    VK_FORMAT_ASTC_5x4_SRGB_BLOCK = 160,
+    VK_FORMAT_ASTC_5x5_UNORM_BLOCK = 161,
+    VK_FORMAT_ASTC_5x5_SRGB_BLOCK = 162,
+    VK_FORMAT_ASTC_6x5_UNORM_BLOCK = 163,
+    VK_FORMAT_ASTC_6x5_SRGB_BLOCK = 164,
+    VK_FORMAT_ASTC_6x6_UNORM_BLOCK = 165,
+    VK_FORMAT_ASTC_6x6_SRGB_BLOCK = 166,
+    VK_FORMAT_ASTC_8x5_UNORM_BLOCK = 167,
+    VK_FORMAT_ASTC_8x5_SRGB_BLOCK = 168,
+    VK_FORMAT_ASTC_8x6_UNORM_BLOCK = 169,
+    VK_FORMAT_ASTC_8x6_SRGB_BLOCK = 170,
+    VK_FORMAT_ASTC_8x8_UNORM_BLOCK = 171,
+    VK_FORMAT_ASTC_8x8_SRGB_BLOCK = 172,
+    VK_FORMAT_ASTC_10x5_UNORM_BLOCK = 173,
+    VK_FORMAT_ASTC_10x5_SRGB_BLOCK = 174,
+    VK_FORMAT_ASTC_10x6_UNORM_BLOCK = 175,
+    VK_FORMAT_ASTC_10x6_SRGB_BLOCK = 176,
+    VK_FORMAT_ASTC_10x8_UNORM_BLOCK = 177,
+    VK_FORMAT_ASTC_10x8_SRGB_BLOCK = 178,
+    VK_FORMAT_ASTC_10x10_UNORM_BLOCK = 179,
+    VK_FORMAT_ASTC_10x10_SRGB_BLOCK = 180,
+    VK_FORMAT_ASTC_12x10_UNORM_BLOCK = 181,
+    VK_FORMAT_ASTC_12x10_SRGB_BLOCK = 182,
+    VK_FORMAT_ASTC_12x12_UNORM_BLOCK = 183,
+    VK_FORMAT_ASTC_12x12_SRGB_BLOCK = 184,
+    VK_FORMAT_G8B8G8R8_422_UNORM = 1000156000,
+    VK_FORMAT_B8G8R8G8_422_UNORM = 1000156001,
+    VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM = 1000156002,
+    VK_FORMAT_G8_B8R8_2PLANE_420_UNORM = 1000156003,
+    VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM = 1000156004,
+    VK_FORMAT_G8_B8R8_2PLANE_422_UNORM = 1000156005,
+    VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM = 1000156006,
+    VK_FORMAT_R10X6_UNORM_PACK16 = 1000156007,
+    VK_FORMAT_R10X6G10X6_UNORM_2PACK16 = 1000156008,
+    VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16 = 1000156009,
+    VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16 = 1000156010,
+    VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16 = 1000156011,
+    VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16 = 1000156012,
+    VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16 = 1000156013,
+    VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16 = 1000156014,
+    VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16 = 1000156015,
+    VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16 = 1000156016,
+    VK_FORMAT_R12X4_UNORM_PACK16 = 1000156017,
+    VK_FORMAT_R12X4G12X4_UNORM_2PACK16 = 1000156018,
+    VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16 = 1000156019,
+    VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16 = 1000156020,
+    VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16 = 1000156021,
+    VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16 = 1000156022,
+    VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16 = 1000156023,
+    VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16 = 1000156024,
+    VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16 = 1000156025,
+    VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16 = 1000156026,
+    VK_FORMAT_G16B16G16R16_422_UNORM = 1000156027,
+    VK_FORMAT_B16G16R16G16_422_UNORM = 1000156028,
+    VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM = 1000156029,
+    VK_FORMAT_G16_B16R16_2PLANE_420_UNORM = 1000156030,
+    VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM = 1000156031,
+    VK_FORMAT_G16_B16R16_2PLANE_422_UNORM = 1000156032,
+    VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM = 1000156033,
+    VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT = 1000066000,
+    VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT = 1000066001,
+    VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT = 1000066002,
+    VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT = 1000066003,
+    VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT = 1000066004,
+    VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT = 1000066005,
+    VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT = 1000066006,
+    VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT = 1000066007,
+    VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT = 1000066008,
+    VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT = 1000066009,
+    VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT = 1000066010,
+    VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT = 1000066011,
+    VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT = 1000066012,
+    VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT = 1000066013,
+    VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT = 1000340000,
+    VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT = 1000340001,
+    VK_FORMAT_MAX_ENUM = 0x7FFFFFFF
+} VkFormat;
+
+typedef enum VkImageTiling {
+    VK_IMAGE_TILING_OPTIMAL = 0,
+    VK_IMAGE_TILING_LINEAR = 1,
+    VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT = 1000158000,
+    VK_IMAGE_TILING_MAX_ENUM = 0x7FFFFFFF
+} VkImageTiling;
+
+typedef enum VkImageType {
+    VK_IMAGE_TYPE_1D = 0,
+    VK_IMAGE_TYPE_2D = 1,
+    VK_IMAGE_TYPE_3D = 2,
+    VK_IMAGE_TYPE_MAX_ENUM = 0x7FFFFFFF
+} VkImageType;
+
+typedef enum VkPhysicalDeviceType {
+    VK_PHYSICAL_DEVICE_TYPE_OTHER = 0,
+    VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU = 1,
+    VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU = 2,
+    VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU = 3,
+    VK_PHYSICAL_DEVICE_TYPE_CPU = 4,
+    VK_PHYSICAL_DEVICE_TYPE_MAX_ENUM = 0x7FFFFFFF
+} VkPhysicalDeviceType;
+
+typedef enum VkQueryType {
+    VK_QUERY_TYPE_OCCLUSION = 0,
+    VK_QUERY_TYPE_PIPELINE_STATISTICS = 1,
+    VK_QUERY_TYPE_TIMESTAMP = 2,
+    VK_QUERY_TYPE_MAX_ENUM = 0x7FFFFFFF
+} VkQueryType;
+
+typedef enum VkSharingMode {
+    VK_SHARING_MODE_EXCLUSIVE = 0,
+    VK_SHARING_MODE_CONCURRENT = 1,
+    VK_SHARING_MODE_MAX_ENUM = 0x7FFFFFFF
+} VkSharingMode;
+
+typedef enum VkComponentSwizzle {
+    VK_COMPONENT_SWIZZLE_IDENTITY = 0,
+    VK_COMPONENT_SWIZZLE_ZERO = 1,
+    VK_COMPONENT_SWIZZLE_ONE = 2,
+    VK_COMPONENT_SWIZZLE_R = 3,
+    VK_COMPONENT_SWIZZLE_G = 4,
+    VK_COMPONENT_SWIZZLE_B = 5,
+    VK_COMPONENT_SWIZZLE_A = 6,
+    VK_COMPONENT_SWIZZLE_MAX_ENUM = 0x7FFFFFFF
+} VkComponentSwizzle;
+
+typedef enum VkImageViewType {
+    VK_IMAGE_VIEW_TYPE_1D = 0,
+    VK_IMAGE_VIEW_TYPE_2D = 1,
+    VK_IMAGE_VIEW_TYPE_3D = 2,
+    VK_IMAGE_VIEW_TYPE_CUBE = 3,
+    VK_IMAGE_VIEW_TYPE_1D_ARRAY = 4,
+    VK_IMAGE_VIEW_TYPE_2D_ARRAY = 5,
+    VK_IMAGE_VIEW_TYPE_CUBE_ARRAY = 6,
+    VK_IMAGE_VIEW_TYPE_MAX_ENUM = 0x7FFFFFFF
+} VkImageViewType;
+
+typedef enum VkBlendFactor {
+    VK_BLEND_FACTOR_ZERO = 0,
+    VK_BLEND_FACTOR_ONE = 1,
+    VK_BLEND_FACTOR_SRC_COLOR = 2,
+    VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR = 3,
+    VK_BLEND_FACTOR_DST_COLOR = 4,
+    VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR = 5,
+    VK_BLEND_FACTOR_SRC_ALPHA = 6,
+    VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA = 7,
+    VK_BLEND_FACTOR_DST_ALPHA = 8,
+    VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA = 9,
+    VK_BLEND_FACTOR_CONSTANT_COLOR = 10,
+    VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR = 11,
+    VK_BLEND_FACTOR_CONSTANT_ALPHA = 12,
+    VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA = 13,
+    VK_BLEND_FACTOR_SRC_ALPHA_SATURATE = 14,
+    VK_BLEND_FACTOR_SRC1_COLOR = 15,
+    VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR = 16,
+    VK_BLEND_FACTOR_SRC1_ALPHA = 17,
+    VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA = 18,
+    VK_BLEND_FACTOR_MAX_ENUM = 0x7FFFFFFF
+} VkBlendFactor;
+
+typedef enum VkBlendOp {
+    VK_BLEND_OP_ADD = 0,
+    VK_BLEND_OP_SUBTRACT = 1,
+    VK_BLEND_OP_REVERSE_SUBTRACT = 2,
+    VK_BLEND_OP_MIN = 3,
+    VK_BLEND_OP_MAX = 4,
+    VK_BLEND_OP_ZERO_EXT = 1000148000,
+    VK_BLEND_OP_SRC_EXT = 1000148001,
+    VK_BLEND_OP_DST_EXT = 1000148002,
+    VK_BLEND_OP_SRC_OVER_EXT = 1000148003,
+    VK_BLEND_OP_DST_OVER_EXT = 1000148004,
+    VK_BLEND_OP_SRC_IN_EXT = 1000148005,
+    VK_BLEND_OP_DST_IN_EXT = 1000148006,
+    VK_BLEND_OP_SRC_OUT_EXT = 1000148007,
+    VK_BLEND_OP_DST_OUT_EXT = 1000148008,
+    VK_BLEND_OP_SRC_ATOP_EXT = 1000148009,
+    VK_BLEND_OP_DST_ATOP_EXT = 1000148010,
+    VK_BLEND_OP_XOR_EXT = 1000148011,
+    VK_BLEND_OP_MULTIPLY_EXT = 1000148012,
+    VK_BLEND_OP_SCREEN_EXT = 1000148013,
+    VK_BLEND_OP_OVERLAY_EXT = 1000148014,
+    VK_BLEND_OP_DARKEN_EXT = 1000148015,
+    VK_BLEND_OP_LIGHTEN_EXT = 1000148016,
+    VK_BLEND_OP_COLORDODGE_EXT = 1000148017,
+    VK_BLEND_OP_COLORBURN_EXT = 1000148018,
+    VK_BLEND_OP_HARDLIGHT_EXT = 1000148019,
+    VK_BLEND_OP_SOFTLIGHT_EXT = 1000148020,
+    VK_BLEND_OP_DIFFERENCE_EXT = 1000148021,
+    VK_BLEND_OP_EXCLUSION_EXT = 1000148022,
+    VK_BLEND_OP_INVERT_EXT = 1000148023,
+    VK_BLEND_OP_INVERT_RGB_EXT = 1000148024,
+    VK_BLEND_OP_LINEARDODGE_EXT = 1000148025,
+    VK_BLEND_OP_LINEARBURN_EXT = 1000148026,
+    VK_BLEND_OP_VIVIDLIGHT_EXT = 1000148027,
+    VK_BLEND_OP_LINEARLIGHT_EXT = 1000148028,
+    VK_BLEND_OP_PINLIGHT_EXT = 1000148029,
+    VK_BLEND_OP_HARDMIX_EXT = 1000148030,
+    VK_BLEND_OP_HSL_HUE_EXT = 1000148031,
+    VK_BLEND_OP_HSL_SATURATION_EXT = 1000148032,
+    VK_BLEND_OP_HSL_COLOR_EXT = 1000148033,
+    VK_BLEND_OP_HSL_LUMINOSITY_EXT = 1000148034,
+    VK_BLEND_OP_PLUS_EXT = 1000148035,
+    VK_BLEND_OP_PLUS_CLAMPED_EXT = 1000148036,
+    VK_BLEND_OP_PLUS_CLAMPED_ALPHA_EXT = 1000148037,
+    VK_BLEND_OP_PLUS_DARKER_EXT = 1000148038,
+    VK_BLEND_OP_MINUS_EXT = 1000148039,
+    VK_BLEND_OP_MINUS_CLAMPED_EXT = 1000148040,
+    VK_BLEND_OP_CONTRAST_EXT = 1000148041,
+    VK_BLEND_OP_INVERT_OVG_EXT = 1000148042,
+    VK_BLEND_OP_RED_EXT = 1000148043,
+    VK_BLEND_OP_GREEN_EXT = 1000148044,
+    VK_BLEND_OP_BLUE_EXT = 1000148045,
+    VK_BLEND_OP_MAX_ENUM = 0x7FFFFFFF
+} VkBlendOp;
+
+typedef enum VkCompareOp {
+    VK_COMPARE_OP_NEVER = 0,
+    VK_COMPARE_OP_LESS = 1,
+    VK_COMPARE_OP_EQUAL = 2,
+    VK_COMPARE_OP_LESS_OR_EQUAL = 3,
+    VK_COMPARE_OP_GREATER = 4,
+    VK_COMPARE_OP_NOT_EQUAL = 5,
+    VK_COMPARE_OP_GREATER_OR_EQUAL = 6,
+    VK_COMPARE_OP_ALWAYS = 7,
+    VK_COMPARE_OP_MAX_ENUM = 0x7FFFFFFF
+} VkCompareOp;
+
+typedef enum VkDynamicState {
+    VK_DYNAMIC_STATE_VIEWPORT = 0,
+    VK_DYNAMIC_STATE_SCISSOR = 1,
+    VK_DYNAMIC_STATE_LINE_WIDTH = 2,
+    VK_DYNAMIC_STATE_DEPTH_BIAS = 3,
+    VK_DYNAMIC_STATE_BLEND_CONSTANTS = 4,
+    VK_DYNAMIC_STATE_DEPTH_BOUNDS = 5,
+    VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK = 6,
+    VK_DYNAMIC_STATE_STENCIL_WRITE_MASK = 7,
+    VK_DYNAMIC_STATE_STENCIL_REFERENCE = 8,
+    VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT = 1000099000,
+    VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT = 1000143000,
+    VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR = 1000226000,
+    VK_DYNAMIC_STATE_LINE_STIPPLE_EXT = 1000259000,
+    VK_DYNAMIC_STATE_CULL_MODE_EXT = 1000267000,
+    VK_DYNAMIC_STATE_FRONT_FACE_EXT = 1000267001,
+    VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT = 1000267002,
+    VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT = 1000267003,
+    VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT = 1000267004,
+    VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT = 1000267005,
+    VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE_EXT = 1000267006,
+    VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE_EXT = 1000267007,
+    VK_DYNAMIC_STATE_DEPTH_COMPARE_OP_EXT = 1000267008,
+    VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE_EXT = 1000267009,
+    VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE_EXT = 1000267010,
+    VK_DYNAMIC_STATE_STENCIL_OP_EXT = 1000267011,
+    VK_DYNAMIC_STATE_MAX_ENUM = 0x7FFFFFFF
+} VkDynamicState;
+
+typedef enum VkFrontFace {
+    VK_FRONT_FACE_COUNTER_CLOCKWISE = 0,
+    VK_FRONT_FACE_CLOCKWISE = 1,
+    VK_FRONT_FACE_MAX_ENUM = 0x7FFFFFFF
+} VkFrontFace;
+
+typedef enum VkVertexInputRate {
+    VK_VERTEX_INPUT_RATE_VERTEX = 0,
+    VK_VERTEX_INPUT_RATE_INSTANCE = 1,
+    VK_VERTEX_INPUT_RATE_MAX_ENUM = 0x7FFFFFFF
+} VkVertexInputRate;
+
+typedef enum VkPrimitiveTopology {
+    VK_PRIMITIVE_TOPOLOGY_POINT_LIST = 0,
+    VK_PRIMITIVE_TOPOLOGY_LINE_LIST = 1,
+    VK_PRIMITIVE_TOPOLOGY_LINE_STRIP = 2,
+    VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST = 3,
+    VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP = 4,
+    VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN = 5,
+    VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY = 6,
+    VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY = 7,
+    VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY = 8,
+    VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY = 9,
+    VK_PRIMITIVE_TOPOLOGY_PATCH_LIST = 10,
+    VK_PRIMITIVE_TOPOLOGY_MAX_ENUM = 0x7FFFFFFF
+} VkPrimitiveTopology;
+
+typedef enum VkPolygonMode {
+    VK_POLYGON_MODE_FILL = 0,
+    VK_POLYGON_MODE_LINE = 1,
+    VK_POLYGON_MODE_POINT = 2,
+    VK_POLYGON_MODE_MAX_ENUM = 0x7FFFFFFF
+} VkPolygonMode;
+
+typedef enum VkStencilOp {
+    VK_STENCIL_OP_KEEP = 0,
+    VK_STENCIL_OP_ZERO = 1,
+    VK_STENCIL_OP_REPLACE = 2,
+    VK_STENCIL_OP_INCREMENT_AND_CLAMP = 3,
+    VK_STENCIL_OP_DECREMENT_AND_CLAMP = 4,
+    VK_STENCIL_OP_INVERT = 5,
+    VK_STENCIL_OP_INCREMENT_AND_WRAP = 6,
+    VK_STENCIL_OP_DECREMENT_AND_WRAP = 7,
+    VK_STENCIL_OP_MAX_ENUM = 0x7FFFFFFF
+} VkStencilOp;
+
+typedef enum VkLogicOp {
+    VK_LOGIC_OP_CLEAR = 0,
+    VK_LOGIC_OP_AND = 1,
+    VK_LOGIC_OP_AND_REVERSE = 2,
+    VK_LOGIC_OP_COPY = 3,
+    VK_LOGIC_OP_AND_INVERTED = 4,
+    VK_LOGIC_OP_NO_OP = 5,
+    VK_LOGIC_OP_XOR = 6,
+    VK_LOGIC_OP_OR = 7,
+    VK_LOGIC_OP_NOR = 8,
+    VK_LOGIC_OP_EQUIVALENT = 9,
+    VK_LOGIC_OP_INVERT = 10,
+    VK_LOGIC_OP_OR_REVERSE = 11,
+    VK_LOGIC_OP_COPY_INVERTED = 12,
+    VK_LOGIC_OP_OR_INVERTED = 13,
+    VK_LOGIC_OP_NAND = 14,
+    VK_LOGIC_OP_SET = 15,
+    VK_LOGIC_OP_MAX_ENUM = 0x7FFFFFFF
+} VkLogicOp;
+
+typedef enum VkBorderColor {
+    VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK = 0,
+    VK_BORDER_COLOR_INT_TRANSPARENT_BLACK = 1,
+    VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK = 2,
+    VK_BORDER_COLOR_INT_OPAQUE_BLACK = 3,
+    VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE = 4,
+    VK_BORDER_COLOR_INT_OPAQUE_WHITE = 5,
+    VK_BORDER_COLOR_FLOAT_CUSTOM_EXT = 1000287003,
+    VK_BORDER_COLOR_INT_CUSTOM_EXT = 1000287004,
+    VK_BORDER_COLOR_MAX_ENUM = 0x7FFFFFFF
+} VkBorderColor;
+
+typedef enum VkFilter {
+    VK_FILTER_NEAREST = 0,
+    VK_FILTER_LINEAR = 1,
+    VK_FILTER_CUBIC_IMG = 1000015000,
+    VK_FILTER_CUBIC_EXT = VK_FILTER_CUBIC_IMG,
+    VK_FILTER_MAX_ENUM = 0x7FFFFFFF
+} VkFilter;
+
+typedef enum VkSamplerAddressMode {
+    VK_SAMPLER_ADDRESS_MODE_REPEAT = 0,
+    VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT = 1,
+    VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE = 2,
+    VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER = 3,
+    VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE = 4,
+    VK_SAMPLER_ADDRESS_MODE_MAX_ENUM = 0x7FFFFFFF
+} VkSamplerAddressMode;
+
+typedef enum VkSamplerMipmapMode {
+    VK_SAMPLER_MIPMAP_MODE_NEAREST = 0,
+    VK_SAMPLER_MIPMAP_MODE_LINEAR = 1,
+    VK_SAMPLER_MIPMAP_MODE_MAX_ENUM = 0x7FFFFFFF
+} VkSamplerMipmapMode;
+
+typedef enum VkDescriptorType {
+    VK_DESCRIPTOR_TYPE_SAMPLER = 0,
+    VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER = 1,
+    VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE = 2,
+    VK_DESCRIPTOR_TYPE_STORAGE_IMAGE = 3,
+    VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER = 4,
+    VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER = 5,
+    VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER = 6,
+    VK_DESCRIPTOR_TYPE_STORAGE_BUFFER = 7,
+    VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC = 8,
+    VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC = 9,
+    VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT = 10,
+    VK_DESCRIPTOR_TYPE_MAX_ENUM = 0x7FFFFFFF
+} VkDescriptorType;
+
+typedef enum VkAttachmentLoadOp {
+    VK_ATTACHMENT_LOAD_OP_LOAD = 0,
+    VK_ATTACHMENT_LOAD_OP_CLEAR = 1,
+    VK_ATTACHMENT_LOAD_OP_DONT_CARE = 2,
+    VK_ATTACHMENT_LOAD_OP_MAX_ENUM = 0x7FFFFFFF
+} VkAttachmentLoadOp;
+
+typedef enum VkAttachmentStoreOp {
+    VK_ATTACHMENT_STORE_OP_STORE = 0,
+    VK_ATTACHMENT_STORE_OP_DONT_CARE = 1,
+    VK_ATTACHMENT_STORE_OP_MAX_ENUM = 0x7FFFFFFF
+} VkAttachmentStoreOp;
+
+typedef enum VkPipelineBindPoint {
+    VK_PIPELINE_BIND_POINT_GRAPHICS = 0,
+    VK_PIPELINE_BIND_POINT_COMPUTE = 1,
+    VK_PIPELINE_BIND_POINT_MAX_ENUM = 0x7FFFFFFF
+} VkPipelineBindPoint;
+
+typedef enum VkCommandBufferLevel {
+    VK_COMMAND_BUFFER_LEVEL_PRIMARY = 0,
+    VK_COMMAND_BUFFER_LEVEL_SECONDARY = 1,
+    VK_COMMAND_BUFFER_LEVEL_MAX_ENUM = 0x7FFFFFFF
+} VkCommandBufferLevel;
+
+typedef enum VkIndexType {
+    VK_INDEX_TYPE_UINT16 = 0,
+    VK_INDEX_TYPE_UINT32 = 1,
+    VK_INDEX_TYPE_UINT8_EXT = 1000265000,
+    VK_INDEX_TYPE_MAX_ENUM = 0x7FFFFFFF
+} VkIndexType;
+
+typedef enum VkSubpassContents {
+    VK_SUBPASS_CONTENTS_INLINE = 0,
+    VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS = 1,
+    VK_SUBPASS_CONTENTS_MAX_ENUM = 0x7FFFFFFF
+} VkSubpassContents;
+
+typedef enum VkAccessFlagBits {
+    VK_ACCESS_INDIRECT_COMMAND_READ_BIT = 0x00000001,
+    VK_ACCESS_INDEX_READ_BIT = 0x00000002,
+    VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT = 0x00000004,
+    VK_ACCESS_UNIFORM_READ_BIT = 0x00000008,
+    VK_ACCESS_INPUT_ATTACHMENT_READ_BIT = 0x00000010,
+    VK_ACCESS_SHADER_READ_BIT = 0x00000020,
+    VK_ACCESS_SHADER_WRITE_BIT = 0x00000040,
+    VK_ACCESS_COLOR_ATTACHMENT_READ_BIT = 0x00000080,
+    VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT = 0x00000100,
+    VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT = 0x00000200,
+    VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT = 0x00000400,
+    VK_ACCESS_TRANSFER_READ_BIT = 0x00000800,
+    VK_ACCESS_TRANSFER_WRITE_BIT = 0x00001000,
+    VK_ACCESS_HOST_READ_BIT = 0x00002000,
+    VK_ACCESS_HOST_WRITE_BIT = 0x00004000,
+    VK_ACCESS_MEMORY_READ_BIT = 0x00008000,
+    VK_ACCESS_MEMORY_WRITE_BIT = 0x00010000,
+    VK_ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT = 0x00080000,
+    VK_ACCESS_SHADING_RATE_IMAGE_READ_BIT_NV = 0x00800000,
+    VK_ACCESS_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR = VK_ACCESS_SHADING_RATE_IMAGE_READ_BIT_NV,
+    VK_ACCESS_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkAccessFlagBits;
+typedef VkFlags VkAccessFlags;
+
+typedef enum VkImageAspectFlagBits {
+    VK_IMAGE_ASPECT_COLOR_BIT = 0x00000001,
+    VK_IMAGE_ASPECT_DEPTH_BIT = 0x00000002,
+    VK_IMAGE_ASPECT_STENCIL_BIT = 0x00000004,
+    VK_IMAGE_ASPECT_METADATA_BIT = 0x00000008,
+    VK_IMAGE_ASPECT_PLANE_0_BIT = 0x00000010,
+    VK_IMAGE_ASPECT_PLANE_1_BIT = 0x00000020,
+    VK_IMAGE_ASPECT_PLANE_2_BIT = 0x00000040,
+    VK_IMAGE_ASPECT_MEMORY_PLANE_0_BIT_EXT = 0x00000080,
+    VK_IMAGE_ASPECT_MEMORY_PLANE_1_BIT_EXT = 0x00000100,
+    VK_IMAGE_ASPECT_MEMORY_PLANE_2_BIT_EXT = 0x00000200,
+    VK_IMAGE_ASPECT_MEMORY_PLANE_3_BIT_EXT = 0x00000400,
+    VK_IMAGE_ASPECT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkImageAspectFlagBits;
+typedef VkFlags VkImageAspectFlags;
+
+typedef enum VkFormatFeatureFlagBits {
+    VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT = 0x00000001,
+    VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT = 0x00000002,
+    VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT = 0x00000004,
+    VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT = 0x00000008,
+    VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT = 0x00000010,
+    VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT = 0x00000020,
+    VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT = 0x00000040,
+    VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT = 0x00000080,
+    VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT = 0x00000100,
+    VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000200,
+    VK_FORMAT_FEATURE_BLIT_SRC_BIT = 0x00000400,
+    VK_FORMAT_FEATURE_BLIT_DST_BIT = 0x00000800,
+    VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT = 0x00001000,
+    VK_FORMAT_FEATURE_TRANSFER_SRC_BIT = 0x00004000,
+    VK_FORMAT_FEATURE_TRANSFER_DST_BIT = 0x00008000,
+    VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT = 0x00020000,
+    VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT = 0x00040000,
+    VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT = 0x00080000,
+    VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT = 0x00100000,
+    VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT = 0x00200000,
+    VK_FORMAT_FEATURE_DISJOINT_BIT = 0x00400000,
+    VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT = 0x00800000,
+    VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT = 0x00010000,
+    VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG = 0x00002000,
+    VK_FORMAT_FEATURE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = 0x40000000,
+    VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT = VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG,
+    VK_FORMAT_FEATURE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkFormatFeatureFlagBits;
+typedef VkFlags VkFormatFeatureFlags;
+
+typedef enum VkImageCreateFlagBits {
+    VK_IMAGE_CREATE_SPARSE_BINDING_BIT = 0x00000001,
+    VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT = 0x00000002,
+    VK_IMAGE_CREATE_SPARSE_ALIASED_BIT = 0x00000004,
+    VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT = 0x00000008,
+    VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT = 0x00000010,
+    VK_IMAGE_CREATE_ALIAS_BIT = 0x00000400,
+    VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT = 0x00000040,
+    VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT = 0x00000020,
+    VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT = 0x00000080,
+    VK_IMAGE_CREATE_EXTENDED_USAGE_BIT = 0x00000100,
+    VK_IMAGE_CREATE_PROTECTED_BIT = 0x00000800,
+    VK_IMAGE_CREATE_DISJOINT_BIT = 0x00000200,
+    VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT = 0x00001000,
+    VK_IMAGE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkImageCreateFlagBits;
+typedef VkFlags VkImageCreateFlags;
+
+typedef enum VkSampleCountFlagBits {
+    VK_SAMPLE_COUNT_1_BIT = 0x00000001,
+    VK_SAMPLE_COUNT_2_BIT = 0x00000002,
+    VK_SAMPLE_COUNT_4_BIT = 0x00000004,
+    VK_SAMPLE_COUNT_8_BIT = 0x00000008,
+    VK_SAMPLE_COUNT_16_BIT = 0x00000010,
+    VK_SAMPLE_COUNT_32_BIT = 0x00000020,
+    VK_SAMPLE_COUNT_64_BIT = 0x00000040,
+    VK_SAMPLE_COUNT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkSampleCountFlagBits;
+typedef VkFlags VkSampleCountFlags;
+
+typedef enum VkImageUsageFlagBits {
+    VK_IMAGE_USAGE_TRANSFER_SRC_BIT = 0x00000001,
+    VK_IMAGE_USAGE_TRANSFER_DST_BIT = 0x00000002,
+    VK_IMAGE_USAGE_SAMPLED_BIT = 0x00000004,
+    VK_IMAGE_USAGE_STORAGE_BIT = 0x00000008,
+    VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT = 0x00000010,
+    VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000020,
+    VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT = 0x00000040,
+    VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT = 0x00000080,
+    VK_IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV = 0x00000100,
+    VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = VK_IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV,
+    VK_IMAGE_USAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkImageUsageFlagBits;
+typedef VkFlags VkImageUsageFlags;
+typedef VkFlags VkInstanceCreateFlags;
+
+typedef enum VkMemoryHeapFlagBits {
+    VK_MEMORY_HEAP_DEVICE_LOCAL_BIT = 0x00000001,
+    VK_MEMORY_HEAP_MULTI_INSTANCE_BIT = 0x00000002,
+    VK_MEMORY_HEAP_SEU_SAFE_BIT_KHR = 0x00000004,
+    VK_MEMORY_HEAP_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkMemoryHeapFlagBits;
+typedef VkFlags VkMemoryHeapFlags;
+
+typedef enum VkMemoryPropertyFlagBits {
+    VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT = 0x00000001,
+    VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT = 0x00000002,
+    VK_MEMORY_PROPERTY_HOST_COHERENT_BIT = 0x00000004,
+    VK_MEMORY_PROPERTY_HOST_CACHED_BIT = 0x00000008,
+    VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT = 0x00000010,
+    VK_MEMORY_PROPERTY_PROTECTED_BIT = 0x00000020,
+    VK_MEMORY_PROPERTY_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkMemoryPropertyFlagBits;
+typedef VkFlags VkMemoryPropertyFlags;
+
+typedef enum VkQueueFlagBits {
+    VK_QUEUE_GRAPHICS_BIT = 0x00000001,
+    VK_QUEUE_COMPUTE_BIT = 0x00000002,
+    VK_QUEUE_TRANSFER_BIT = 0x00000004,
+    VK_QUEUE_SPARSE_BINDING_BIT = 0x00000008,
+    VK_QUEUE_PROTECTED_BIT = 0x00000010,
+    VK_QUEUE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkQueueFlagBits;
+typedef VkFlags VkQueueFlags;
+typedef VkFlags VkDeviceCreateFlags;
+
+typedef enum VkDeviceQueueCreateFlagBits {
+    VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT = 0x00000001,
+    VK_DEVICE_QUEUE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkDeviceQueueCreateFlagBits;
+typedef VkFlags VkDeviceQueueCreateFlags;
+
+typedef enum VkPipelineStageFlagBits {
+    VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT = 0x00000001,
+    VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT = 0x00000002,
+    VK_PIPELINE_STAGE_VERTEX_INPUT_BIT = 0x00000004,
+    VK_PIPELINE_STAGE_VERTEX_SHADER_BIT = 0x00000008,
+    VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT = 0x00000010,
+    VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT = 0x00000020,
+    VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT = 0x00000040,
+    VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT = 0x00000080,
+    VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT = 0x00000100,
+    VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT = 0x00000200,
+    VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT = 0x00000400,
+    VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT = 0x00000800,
+    VK_PIPELINE_STAGE_TRANSFER_BIT = 0x00001000,
+    VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT = 0x00002000,
+    VK_PIPELINE_STAGE_HOST_BIT = 0x00004000,
+    VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT = 0x00008000,
+    VK_PIPELINE_STAGE_ALL_COMMANDS_BIT = 0x00010000,
+    VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV = 0x00400000,
+    VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV,
+    VK_PIPELINE_STAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkPipelineStageFlagBits;
+typedef VkFlags VkPipelineStageFlags;
+typedef VkFlags VkMemoryMapFlags;
+
+typedef enum VkSparseMemoryBindFlagBits {
+    VK_SPARSE_MEMORY_BIND_METADATA_BIT = 0x00000001,
+    VK_SPARSE_MEMORY_BIND_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkSparseMemoryBindFlagBits;
+typedef VkFlags VkSparseMemoryBindFlags;
+
+typedef enum VkSparseImageFormatFlagBits {
+    VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT = 0x00000001,
+    VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT = 0x00000002,
+    VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT = 0x00000004,
+    VK_SPARSE_IMAGE_FORMAT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkSparseImageFormatFlagBits;
+typedef VkFlags VkSparseImageFormatFlags;
+
+typedef enum VkFenceCreateFlagBits {
+    VK_FENCE_CREATE_SIGNALED_BIT = 0x00000001,
+    VK_FENCE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkFenceCreateFlagBits;
+typedef VkFlags VkFenceCreateFlags;
+typedef VkFlags VkSemaphoreCreateFlags;
+typedef VkFlags VkEventCreateFlags;
+
+typedef enum VkQueryPipelineStatisticFlagBits {
+    VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT = 0x00000001,
+    VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT = 0x00000002,
+    VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT = 0x00000004,
+    VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT = 0x00000008,
+    VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT = 0x00000010,
+    VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT = 0x00000020,
+    VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT = 0x00000040,
+    VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT = 0x00000080,
+    VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT = 0x00000100,
+    VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT = 0x00000200,
+    VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT = 0x00000400,
+    VK_QUERY_PIPELINE_STATISTIC_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkQueryPipelineStatisticFlagBits;
+typedef VkFlags VkQueryPipelineStatisticFlags;
+typedef VkFlags VkQueryPoolCreateFlags;
+
+typedef enum VkQueryResultFlagBits {
+    VK_QUERY_RESULT_64_BIT = 0x00000001,
+    VK_QUERY_RESULT_WAIT_BIT = 0x00000002,
+    VK_QUERY_RESULT_WITH_AVAILABILITY_BIT = 0x00000004,
+    VK_QUERY_RESULT_PARTIAL_BIT = 0x00000008,
+    VK_QUERY_RESULT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkQueryResultFlagBits;
+typedef VkFlags VkQueryResultFlags;
+
+typedef enum VkBufferCreateFlagBits {
+    VK_BUFFER_CREATE_SPARSE_BINDING_BIT = 0x00000001,
+    VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT = 0x00000002,
+    VK_BUFFER_CREATE_SPARSE_ALIASED_BIT = 0x00000004,
+    VK_BUFFER_CREATE_PROTECTED_BIT = 0x00000008,
+    VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT = 0x00000010,
+    VK_BUFFER_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkBufferCreateFlagBits;
+typedef VkFlags VkBufferCreateFlags;
+
+typedef enum VkBufferUsageFlagBits {
+    VK_BUFFER_USAGE_TRANSFER_SRC_BIT = 0x00000001,
+    VK_BUFFER_USAGE_TRANSFER_DST_BIT = 0x00000002,
+    VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT = 0x00000004,
+    VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT = 0x00000008,
+    VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT = 0x00000010,
+    VK_BUFFER_USAGE_STORAGE_BUFFER_BIT = 0x00000020,
+    VK_BUFFER_USAGE_INDEX_BUFFER_BIT = 0x00000040,
+    VK_BUFFER_USAGE_VERTEX_BUFFER_BIT = 0x00000080,
+    VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT = 0x00000100,
+    VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT = 0x00020000,
+    VK_BUFFER_USAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkBufferUsageFlagBits;
+typedef VkFlags VkBufferUsageFlags;
+typedef VkFlags VkBufferViewCreateFlags;
+
+typedef enum VkImageViewCreateFlagBits {
+    VK_IMAGE_VIEW_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkImageViewCreateFlagBits;
+typedef VkFlags VkImageViewCreateFlags;
+
+typedef enum VkPipelineCacheCreateFlagBits {
+    VK_PIPELINE_CACHE_CREATE_USE_APPLICATION_STORAGE_BIT = 0x00000004,
+    VK_PIPELINE_CACHE_CREATE_RESERVED_1_BIT_EXT = 0x00000002,
+    VK_PIPELINE_CACHE_CREATE_READ_ONLY_BIT = VK_PIPELINE_CACHE_CREATE_RESERVED_1_BIT_EXT,
+    VK_PIPELINE_CACHE_CREATE_READ_ONLY_BIT_KHR = VK_PIPELINE_CACHE_CREATE_READ_ONLY_BIT,
+    VK_PIPELINE_CACHE_CREATE_USE_APPLICATION_STORAGE_BIT_KHR = VK_PIPELINE_CACHE_CREATE_USE_APPLICATION_STORAGE_BIT,
+    VK_PIPELINE_CACHE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkPipelineCacheCreateFlagBits;
+typedef VkFlags VkPipelineCacheCreateFlags;
+
+typedef enum VkColorComponentFlagBits {
+    VK_COLOR_COMPONENT_R_BIT = 0x00000001,
+    VK_COLOR_COMPONENT_G_BIT = 0x00000002,
+    VK_COLOR_COMPONENT_B_BIT = 0x00000004,
+    VK_COLOR_COMPONENT_A_BIT = 0x00000008,
+    VK_COLOR_COMPONENT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkColorComponentFlagBits;
+typedef VkFlags VkColorComponentFlags;
+
+typedef enum VkPipelineCreateFlagBits {
+    VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT = 0x00000001,
+    VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT = 0x00000002,
+    VK_PIPELINE_CREATE_DERIVATIVE_BIT = 0x00000004,
+    VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT = 0x00000008,
+    VK_PIPELINE_CREATE_DISPATCH_BASE_BIT = 0x00000010,
+    VK_PIPELINE_CREATE_DISPATCH_BASE = VK_PIPELINE_CREATE_DISPATCH_BASE_BIT,
+    VK_PIPELINE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkPipelineCreateFlagBits;
+typedef VkFlags VkPipelineCreateFlags;
+
+typedef enum VkPipelineShaderStageCreateFlagBits {
+    VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT = 0x00000001,
+    VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT = 0x00000002,
+    VK_PIPELINE_SHADER_STAGE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkPipelineShaderStageCreateFlagBits;
+typedef VkFlags VkPipelineShaderStageCreateFlags;
+
+typedef enum VkShaderStageFlagBits {
+    VK_SHADER_STAGE_VERTEX_BIT = 0x00000001,
+    VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT = 0x00000002,
+    VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT = 0x00000004,
+    VK_SHADER_STAGE_GEOMETRY_BIT = 0x00000008,
+    VK_SHADER_STAGE_FRAGMENT_BIT = 0x00000010,
+    VK_SHADER_STAGE_COMPUTE_BIT = 0x00000020,
+    VK_SHADER_STAGE_ALL_GRAPHICS = 0x0000001F,
+    VK_SHADER_STAGE_ALL = 0x7FFFFFFF,
+    VK_SHADER_STAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkShaderStageFlagBits;
+
+typedef enum VkCullModeFlagBits {
+    VK_CULL_MODE_NONE = 0,
+    VK_CULL_MODE_FRONT_BIT = 0x00000001,
+    VK_CULL_MODE_BACK_BIT = 0x00000002,
+    VK_CULL_MODE_FRONT_AND_BACK = 0x00000003,
+    VK_CULL_MODE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkCullModeFlagBits;
+typedef VkFlags VkCullModeFlags;
+typedef VkFlags VkPipelineVertexInputStateCreateFlags;
+typedef VkFlags VkPipelineInputAssemblyStateCreateFlags;
+typedef VkFlags VkPipelineTessellationStateCreateFlags;
+typedef VkFlags VkPipelineViewportStateCreateFlags;
+typedef VkFlags VkPipelineRasterizationStateCreateFlags;
+typedef VkFlags VkPipelineMultisampleStateCreateFlags;
+typedef VkFlags VkPipelineDepthStencilStateCreateFlags;
+typedef VkFlags VkPipelineColorBlendStateCreateFlags;
+typedef VkFlags VkPipelineDynamicStateCreateFlags;
+typedef VkFlags VkPipelineLayoutCreateFlags;
+typedef VkFlags VkShaderStageFlags;
+
+typedef enum VkSamplerCreateFlagBits {
+    VK_SAMPLER_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkSamplerCreateFlagBits;
+typedef VkFlags VkSamplerCreateFlags;
+
+typedef enum VkDescriptorPoolCreateFlagBits {
+    VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT = 0x00000001,
+    VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT = 0x00000002,
+    VK_DESCRIPTOR_POOL_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkDescriptorPoolCreateFlagBits;
+typedef VkFlags VkDescriptorPoolCreateFlags;
+typedef VkFlags VkDescriptorPoolResetFlags;
+
+typedef enum VkDescriptorSetLayoutCreateFlagBits {
+    VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT = 0x00000002,
+    VK_DESCRIPTOR_SET_LAYOUT_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkDescriptorSetLayoutCreateFlagBits;
+typedef VkFlags VkDescriptorSetLayoutCreateFlags;
+
+typedef enum VkAttachmentDescriptionFlagBits {
+    VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT = 0x00000001,
+    VK_ATTACHMENT_DESCRIPTION_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkAttachmentDescriptionFlagBits;
+typedef VkFlags VkAttachmentDescriptionFlags;
+
+typedef enum VkDependencyFlagBits {
+    VK_DEPENDENCY_BY_REGION_BIT = 0x00000001,
+    VK_DEPENDENCY_DEVICE_GROUP_BIT = 0x00000004,
+    VK_DEPENDENCY_VIEW_LOCAL_BIT = 0x00000002,
+    VK_DEPENDENCY_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkDependencyFlagBits;
+typedef VkFlags VkDependencyFlags;
+
+typedef enum VkFramebufferCreateFlagBits {
+    VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT = 0x00000001,
+    VK_FRAMEBUFFER_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkFramebufferCreateFlagBits;
+typedef VkFlags VkFramebufferCreateFlags;
+
+typedef enum VkRenderPassCreateFlagBits {
+    VK_RENDER_PASS_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkRenderPassCreateFlagBits;
+typedef VkFlags VkRenderPassCreateFlags;
+
+typedef enum VkSubpassDescriptionFlagBits {
+    VK_SUBPASS_DESCRIPTION_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkSubpassDescriptionFlagBits;
+typedef VkFlags VkSubpassDescriptionFlags;
+
+typedef enum VkCommandPoolCreateFlagBits {
+    VK_COMMAND_POOL_CREATE_TRANSIENT_BIT = 0x00000001,
+    VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT = 0x00000002,
+    VK_COMMAND_POOL_CREATE_PROTECTED_BIT = 0x00000004,
+    VK_COMMAND_POOL_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkCommandPoolCreateFlagBits;
+typedef VkFlags VkCommandPoolCreateFlags;
+
+typedef enum VkCommandPoolResetFlagBits {
+    VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT = 0x00000001,
+    VK_COMMAND_POOL_RESET_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkCommandPoolResetFlagBits;
+typedef VkFlags VkCommandPoolResetFlags;
+
+typedef enum VkCommandBufferUsageFlagBits {
+    VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT = 0x00000001,
+    VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT = 0x00000002,
+    VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT = 0x00000004,
+    VK_COMMAND_BUFFER_USAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkCommandBufferUsageFlagBits;
+typedef VkFlags VkCommandBufferUsageFlags;
+
+typedef enum VkQueryControlFlagBits {
+    VK_QUERY_CONTROL_PRECISE_BIT = 0x00000001,
+    VK_QUERY_CONTROL_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkQueryControlFlagBits;
+typedef VkFlags VkQueryControlFlags;
+
+typedef enum VkCommandBufferResetFlagBits {
+    VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT = 0x00000001,
+    VK_COMMAND_BUFFER_RESET_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkCommandBufferResetFlagBits;
+typedef VkFlags VkCommandBufferResetFlags;
+
+typedef enum VkStencilFaceFlagBits {
+    VK_STENCIL_FACE_FRONT_BIT = 0x00000001,
+    VK_STENCIL_FACE_BACK_BIT = 0x00000002,
+    VK_STENCIL_FACE_FRONT_AND_BACK = 0x00000003,
+    VK_STENCIL_FRONT_AND_BACK = VK_STENCIL_FACE_FRONT_AND_BACK,
+    VK_STENCIL_FACE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkStencilFaceFlagBits;
+typedef VkFlags VkStencilFaceFlags;
+typedef struct VkExtent2D {
+    uint32_t    width;
+    uint32_t    height;
+} VkExtent2D;
+
+typedef struct VkExtent3D {
+    uint32_t    width;
+    uint32_t    height;
+    uint32_t    depth;
+} VkExtent3D;
+
+typedef struct VkOffset2D {
+    int32_t    x;
+    int32_t    y;
+} VkOffset2D;
+
+typedef struct VkOffset3D {
+    int32_t    x;
+    int32_t    y;
+    int32_t    z;
+} VkOffset3D;
+
+typedef struct VkRect2D {
+    VkOffset2D    offset;
+    VkExtent2D    extent;
+} VkRect2D;
+
+typedef struct VkBaseInStructure {
+    VkStructureType                    sType;
+    const struct VkBaseInStructure*    pNext;
+} VkBaseInStructure;
+
+typedef struct VkBaseOutStructure {
+    VkStructureType               sType;
+    struct VkBaseOutStructure*    pNext;
+} VkBaseOutStructure;
+
+typedef struct VkBufferMemoryBarrier {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkAccessFlags      srcAccessMask;
+    VkAccessFlags      dstAccessMask;
+    uint32_t           srcQueueFamilyIndex;
+    uint32_t           dstQueueFamilyIndex;
+    VkBuffer           buffer;
+    VkDeviceSize       offset;
+    VkDeviceSize       size;
+} VkBufferMemoryBarrier;
+
+typedef struct VkDispatchIndirectCommand {
+    uint32_t    x;
+    uint32_t    y;
+    uint32_t    z;
+} VkDispatchIndirectCommand;
+
+typedef struct VkDrawIndexedIndirectCommand {
+    uint32_t    indexCount;
+    uint32_t    instanceCount;
+    uint32_t    firstIndex;
+    int32_t     vertexOffset;
+    uint32_t    firstInstance;
+} VkDrawIndexedIndirectCommand;
+
+typedef struct VkDrawIndirectCommand {
+    uint32_t    vertexCount;
+    uint32_t    instanceCount;
+    uint32_t    firstVertex;
+    uint32_t    firstInstance;
+} VkDrawIndirectCommand;
+
+typedef struct VkImageSubresourceRange {
+    VkImageAspectFlags    aspectMask;
+    uint32_t              baseMipLevel;
+    uint32_t              levelCount;
+    uint32_t              baseArrayLayer;
+    uint32_t              layerCount;
+} VkImageSubresourceRange;
+
+typedef struct VkImageMemoryBarrier {
+    VkStructureType            sType;
+    const void*                pNext;
+    VkAccessFlags              srcAccessMask;
+    VkAccessFlags              dstAccessMask;
+    VkImageLayout              oldLayout;
+    VkImageLayout              newLayout;
+    uint32_t                   srcQueueFamilyIndex;
+    uint32_t                   dstQueueFamilyIndex;
+    VkImage                    image;
+    VkImageSubresourceRange    subresourceRange;
+} VkImageMemoryBarrier;
+
+typedef struct VkMemoryBarrier {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkAccessFlags      srcAccessMask;
+    VkAccessFlags      dstAccessMask;
+} VkMemoryBarrier;
+
+typedef void* (VKAPI_PTR *PFN_vkAllocationFunction)(
+    void*                                       pUserData,
+    size_t                                      size,
+    size_t                                      alignment,
+    VkSystemAllocationScope                     allocationScope);
+
+typedef void (VKAPI_PTR *PFN_vkFreeFunction)(
+    void*                                       pUserData,
+    void*                                       pMemory);
+
+typedef void (VKAPI_PTR *PFN_vkInternalAllocationNotification)(
+    void*                                       pUserData,
+    size_t                                      size,
+    VkInternalAllocationType                    allocationType,
+    VkSystemAllocationScope                     allocationScope);
+
+typedef void (VKAPI_PTR *PFN_vkInternalFreeNotification)(
+    void*                                       pUserData,
+    size_t                                      size,
+    VkInternalAllocationType                    allocationType,
+    VkSystemAllocationScope                     allocationScope);
+
+typedef void* (VKAPI_PTR *PFN_vkReallocationFunction)(
+    void*                                       pUserData,
+    void*                                       pOriginal,
+    size_t                                      size,
+    size_t                                      alignment,
+    VkSystemAllocationScope                     allocationScope);
+
+typedef void (VKAPI_PTR *PFN_vkVoidFunction)(void);
+typedef struct VkAllocationCallbacks {
+    void*                                   pUserData;
+    PFN_vkAllocationFunction                pfnAllocation;
+    PFN_vkReallocationFunction              pfnReallocation;
+    PFN_vkFreeFunction                      pfnFree;
+    PFN_vkInternalAllocationNotification    pfnInternalAllocation;
+    PFN_vkInternalFreeNotification          pfnInternalFree;
+} VkAllocationCallbacks;
+
+typedef struct VkApplicationInfo {
+    VkStructureType    sType;
+    const void*        pNext;
+    const char*        pApplicationName;
+    uint32_t           applicationVersion;
+    const char*        pEngineName;
+    uint32_t           engineVersion;
+    uint32_t           apiVersion;
+} VkApplicationInfo;
+
+typedef struct VkFormatProperties {
+    VkFormatFeatureFlags    linearTilingFeatures;
+    VkFormatFeatureFlags    optimalTilingFeatures;
+    VkFormatFeatureFlags    bufferFeatures;
+} VkFormatProperties;
+
+typedef struct VkImageFormatProperties {
+    VkExtent3D            maxExtent;
+    uint32_t              maxMipLevels;
+    uint32_t              maxArrayLayers;
+    VkSampleCountFlags    sampleCounts;
+    VkDeviceSize          maxResourceSize;
+} VkImageFormatProperties;
+
+typedef struct VkInstanceCreateInfo {
+    VkStructureType             sType;
+    const void*                 pNext;
+    VkInstanceCreateFlags       flags;
+    const VkApplicationInfo*    pApplicationInfo;
+    uint32_t                    enabledLayerCount;
+    const char* const*          ppEnabledLayerNames;
+    uint32_t                    enabledExtensionCount;
+    const char* const*          ppEnabledExtensionNames;
+} VkInstanceCreateInfo;
+
+typedef struct VkMemoryHeap {
+    VkDeviceSize         size;
+    VkMemoryHeapFlags    flags;
+} VkMemoryHeap;
+
+typedef struct VkMemoryType {
+    VkMemoryPropertyFlags    propertyFlags;
+    uint32_t                 heapIndex;
+} VkMemoryType;
+
+typedef struct VkPhysicalDeviceFeatures {
+    VkBool32    robustBufferAccess;
+    VkBool32    fullDrawIndexUint32;
+    VkBool32    imageCubeArray;
+    VkBool32    independentBlend;
+    VkBool32    geometryShader;
+    VkBool32    tessellationShader;
+    VkBool32    sampleRateShading;
+    VkBool32    dualSrcBlend;
+    VkBool32    logicOp;
+    VkBool32    multiDrawIndirect;
+    VkBool32    drawIndirectFirstInstance;
+    VkBool32    depthClamp;
+    VkBool32    depthBiasClamp;
+    VkBool32    fillModeNonSolid;
+    VkBool32    depthBounds;
+    VkBool32    wideLines;
+    VkBool32    largePoints;
+    VkBool32    alphaToOne;
+    VkBool32    multiViewport;
+    VkBool32    samplerAnisotropy;
+    VkBool32    textureCompressionETC2;
+    VkBool32    textureCompressionASTC_LDR;
+    VkBool32    textureCompressionBC;
+    VkBool32    occlusionQueryPrecise;
+    VkBool32    pipelineStatisticsQuery;
+    VkBool32    vertexPipelineStoresAndAtomics;
+    VkBool32    fragmentStoresAndAtomics;
+    VkBool32    shaderTessellationAndGeometryPointSize;
+    VkBool32    shaderImageGatherExtended;
+    VkBool32    shaderStorageImageExtendedFormats;
+    VkBool32    shaderStorageImageMultisample;
+    VkBool32    shaderStorageImageReadWithoutFormat;
+    VkBool32    shaderStorageImageWriteWithoutFormat;
+    VkBool32    shaderUniformBufferArrayDynamicIndexing;
+    VkBool32    shaderSampledImageArrayDynamicIndexing;
+    VkBool32    shaderStorageBufferArrayDynamicIndexing;
+    VkBool32    shaderStorageImageArrayDynamicIndexing;
+    VkBool32    shaderClipDistance;
+    VkBool32    shaderCullDistance;
+    VkBool32    shaderFloat64;
+    VkBool32    shaderInt64;
+    VkBool32    shaderInt16;
+    VkBool32    shaderResourceResidency;
+    VkBool32    shaderResourceMinLod;
+    VkBool32    sparseBinding;
+    VkBool32    sparseResidencyBuffer;
+    VkBool32    sparseResidencyImage2D;
+    VkBool32    sparseResidencyImage3D;
+    VkBool32    sparseResidency2Samples;
+    VkBool32    sparseResidency4Samples;
+    VkBool32    sparseResidency8Samples;
+    VkBool32    sparseResidency16Samples;
+    VkBool32    sparseResidencyAliased;
+    VkBool32    variableMultisampleRate;
+    VkBool32    inheritedQueries;
+} VkPhysicalDeviceFeatures;
+
+typedef struct VkPhysicalDeviceLimits {
+    uint32_t              maxImageDimension1D;
+    uint32_t              maxImageDimension2D;
+    uint32_t              maxImageDimension3D;
+    uint32_t              maxImageDimensionCube;
+    uint32_t              maxImageArrayLayers;
+    uint32_t              maxTexelBufferElements;
+    uint32_t              maxUniformBufferRange;
+    uint32_t              maxStorageBufferRange;
+    uint32_t              maxPushConstantsSize;
+    uint32_t              maxMemoryAllocationCount;
+    uint32_t              maxSamplerAllocationCount;
+    VkDeviceSize          bufferImageGranularity;
+    VkDeviceSize          sparseAddressSpaceSize;
+    uint32_t              maxBoundDescriptorSets;
+    uint32_t              maxPerStageDescriptorSamplers;
+    uint32_t              maxPerStageDescriptorUniformBuffers;
+    uint32_t              maxPerStageDescriptorStorageBuffers;
+    uint32_t              maxPerStageDescriptorSampledImages;
+    uint32_t              maxPerStageDescriptorStorageImages;
+    uint32_t              maxPerStageDescriptorInputAttachments;
+    uint32_t              maxPerStageResources;
+    uint32_t              maxDescriptorSetSamplers;
+    uint32_t              maxDescriptorSetUniformBuffers;
+    uint32_t              maxDescriptorSetUniformBuffersDynamic;
+    uint32_t              maxDescriptorSetStorageBuffers;
+    uint32_t              maxDescriptorSetStorageBuffersDynamic;
+    uint32_t              maxDescriptorSetSampledImages;
+    uint32_t              maxDescriptorSetStorageImages;
+    uint32_t              maxDescriptorSetInputAttachments;
+    uint32_t              maxVertexInputAttributes;
+    uint32_t              maxVertexInputBindings;
+    uint32_t              maxVertexInputAttributeOffset;
+    uint32_t              maxVertexInputBindingStride;
+    uint32_t              maxVertexOutputComponents;
+    uint32_t              maxTessellationGenerationLevel;
+    uint32_t              maxTessellationPatchSize;
+    uint32_t              maxTessellationControlPerVertexInputComponents;
+    uint32_t              maxTessellationControlPerVertexOutputComponents;
+    uint32_t              maxTessellationControlPerPatchOutputComponents;
+    uint32_t              maxTessellationControlTotalOutputComponents;
+    uint32_t              maxTessellationEvaluationInputComponents;
+    uint32_t              maxTessellationEvaluationOutputComponents;
+    uint32_t              maxGeometryShaderInvocations;
+    uint32_t              maxGeometryInputComponents;
+    uint32_t              maxGeometryOutputComponents;
+    uint32_t              maxGeometryOutputVertices;
+    uint32_t              maxGeometryTotalOutputComponents;
+    uint32_t              maxFragmentInputComponents;
+    uint32_t              maxFragmentOutputAttachments;
+    uint32_t              maxFragmentDualSrcAttachments;
+    uint32_t              maxFragmentCombinedOutputResources;
+    uint32_t              maxComputeSharedMemorySize;
+    uint32_t              maxComputeWorkGroupCount[3];
+    uint32_t              maxComputeWorkGroupInvocations;
+    uint32_t              maxComputeWorkGroupSize[3];
+    uint32_t              subPixelPrecisionBits;
+    uint32_t              subTexelPrecisionBits;
+    uint32_t              mipmapPrecisionBits;
+    uint32_t              maxDrawIndexedIndexValue;
+    uint32_t              maxDrawIndirectCount;
+    float                 maxSamplerLodBias;
+    float                 maxSamplerAnisotropy;
+    uint32_t              maxViewports;
+    uint32_t              maxViewportDimensions[2];
+    float                 viewportBoundsRange[2];
+    uint32_t              viewportSubPixelBits;
+    size_t                minMemoryMapAlignment;
+    VkDeviceSize          minTexelBufferOffsetAlignment;
+    VkDeviceSize          minUniformBufferOffsetAlignment;
+    VkDeviceSize          minStorageBufferOffsetAlignment;
+    int32_t               minTexelOffset;
+    uint32_t              maxTexelOffset;
+    int32_t               minTexelGatherOffset;
+    uint32_t              maxTexelGatherOffset;
+    float                 minInterpolationOffset;
+    float                 maxInterpolationOffset;
+    uint32_t              subPixelInterpolationOffsetBits;
+    uint32_t              maxFramebufferWidth;
+    uint32_t              maxFramebufferHeight;
+    uint32_t              maxFramebufferLayers;
+    VkSampleCountFlags    framebufferColorSampleCounts;
+    VkSampleCountFlags    framebufferDepthSampleCounts;
+    VkSampleCountFlags    framebufferStencilSampleCounts;
+    VkSampleCountFlags    framebufferNoAttachmentsSampleCounts;
+    uint32_t              maxColorAttachments;
+    VkSampleCountFlags    sampledImageColorSampleCounts;
+    VkSampleCountFlags    sampledImageIntegerSampleCounts;
+    VkSampleCountFlags    sampledImageDepthSampleCounts;
+    VkSampleCountFlags    sampledImageStencilSampleCounts;
+    VkSampleCountFlags    storageImageSampleCounts;
+    uint32_t              maxSampleMaskWords;
+    VkBool32              timestampComputeAndGraphics;
+    float                 timestampPeriod;
+    uint32_t              maxClipDistances;
+    uint32_t              maxCullDistances;
+    uint32_t              maxCombinedClipAndCullDistances;
+    uint32_t              discreteQueuePriorities;
+    float                 pointSizeRange[2];
+    float                 lineWidthRange[2];
+    float                 pointSizeGranularity;
+    float                 lineWidthGranularity;
+    VkBool32              strictLines;
+    VkBool32              standardSampleLocations;
+    VkDeviceSize          optimalBufferCopyOffsetAlignment;
+    VkDeviceSize          optimalBufferCopyRowPitchAlignment;
+    VkDeviceSize          nonCoherentAtomSize;
+} VkPhysicalDeviceLimits;
+
+typedef struct VkPhysicalDeviceMemoryProperties {
+    uint32_t        memoryTypeCount;
+    VkMemoryType    memoryTypes[VK_MAX_MEMORY_TYPES];
+    uint32_t        memoryHeapCount;
+    VkMemoryHeap    memoryHeaps[VK_MAX_MEMORY_HEAPS];
+} VkPhysicalDeviceMemoryProperties;
+
+typedef struct VkPhysicalDeviceSparseProperties {
+    VkBool32    residencyStandard2DBlockShape;
+    VkBool32    residencyStandard2DMultisampleBlockShape;
+    VkBool32    residencyStandard3DBlockShape;
+    VkBool32    residencyAlignedMipSize;
+    VkBool32    residencyNonResidentStrict;
+} VkPhysicalDeviceSparseProperties;
+
+typedef struct VkPhysicalDeviceProperties {
+    uint32_t                            apiVersion;
+    uint32_t                            driverVersion;
+    uint32_t                            vendorID;
+    uint32_t                            deviceID;
+    VkPhysicalDeviceType                deviceType;
+    char                                deviceName[VK_MAX_PHYSICAL_DEVICE_NAME_SIZE];
+    uint8_t                             pipelineCacheUUID[VK_UUID_SIZE];
+    VkPhysicalDeviceLimits              limits;
+    VkPhysicalDeviceSparseProperties    sparseProperties;
+} VkPhysicalDeviceProperties;
+
+typedef struct VkQueueFamilyProperties {
+    VkQueueFlags    queueFlags;
+    uint32_t        queueCount;
+    uint32_t        timestampValidBits;
+    VkExtent3D      minImageTransferGranularity;
+} VkQueueFamilyProperties;
+
+typedef struct VkDeviceQueueCreateInfo {
+    VkStructureType             sType;
+    const void*                 pNext;
+    VkDeviceQueueCreateFlags    flags;
+    uint32_t                    queueFamilyIndex;
+    uint32_t                    queueCount;
+    const float*                pQueuePriorities;
+} VkDeviceQueueCreateInfo;
+
+typedef struct VkDeviceCreateInfo {
+    VkStructureType                    sType;
+    const void*                        pNext;
+    VkDeviceCreateFlags                flags;
+    uint32_t                           queueCreateInfoCount;
+    const VkDeviceQueueCreateInfo*     pQueueCreateInfos;
+    uint32_t                           enabledLayerCount;
+    const char* const*                 ppEnabledLayerNames;
+    uint32_t                           enabledExtensionCount;
+    const char* const*                 ppEnabledExtensionNames;
+    const VkPhysicalDeviceFeatures*    pEnabledFeatures;
+} VkDeviceCreateInfo;
+
+typedef struct VkExtensionProperties {
+    char        extensionName[VK_MAX_EXTENSION_NAME_SIZE];
+    uint32_t    specVersion;
+} VkExtensionProperties;
+
+typedef struct VkLayerProperties {
+    char        layerName[VK_MAX_EXTENSION_NAME_SIZE];
+    uint32_t    specVersion;
+    uint32_t    implementationVersion;
+    char        description[VK_MAX_DESCRIPTION_SIZE];
+} VkLayerProperties;
+
+typedef struct VkSubmitInfo {
+    VkStructureType                sType;
+    const void*                    pNext;
+    uint32_t                       waitSemaphoreCount;
+    const VkSemaphore*             pWaitSemaphores;
+    const VkPipelineStageFlags*    pWaitDstStageMask;
+    uint32_t                       commandBufferCount;
+    const VkCommandBuffer*         pCommandBuffers;
+    uint32_t                       signalSemaphoreCount;
+    const VkSemaphore*             pSignalSemaphores;
+} VkSubmitInfo;
+
+typedef struct VkMappedMemoryRange {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkDeviceMemory     memory;
+    VkDeviceSize       offset;
+    VkDeviceSize       size;
+} VkMappedMemoryRange;
+
+typedef struct VkMemoryAllocateInfo {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkDeviceSize       allocationSize;
+    uint32_t           memoryTypeIndex;
+} VkMemoryAllocateInfo;
+
+typedef struct VkMemoryRequirements {
+    VkDeviceSize    size;
+    VkDeviceSize    alignment;
+    uint32_t        memoryTypeBits;
+} VkMemoryRequirements;
+
+typedef struct VkSparseMemoryBind {
+    VkDeviceSize               resourceOffset;
+    VkDeviceSize               size;
+    VkDeviceMemory             memory;
+    VkDeviceSize               memoryOffset;
+    VkSparseMemoryBindFlags    flags;
+} VkSparseMemoryBind;
+
+typedef struct VkSparseBufferMemoryBindInfo {
+    VkBuffer                     buffer;
+    uint32_t                     bindCount;
+    const VkSparseMemoryBind*    pBinds;
+} VkSparseBufferMemoryBindInfo;
+
+typedef struct VkSparseImageOpaqueMemoryBindInfo {
+    VkImage                      image;
+    uint32_t                     bindCount;
+    const VkSparseMemoryBind*    pBinds;
+} VkSparseImageOpaqueMemoryBindInfo;
+
+typedef struct VkImageSubresource {
+    VkImageAspectFlags    aspectMask;
+    uint32_t              mipLevel;
+    uint32_t              arrayLayer;
+} VkImageSubresource;
+
+typedef struct VkSparseImageMemoryBind {
+    VkImageSubresource         subresource;
+    VkOffset3D                 offset;
+    VkExtent3D                 extent;
+    VkDeviceMemory             memory;
+    VkDeviceSize               memoryOffset;
+    VkSparseMemoryBindFlags    flags;
+} VkSparseImageMemoryBind;
+
+typedef struct VkSparseImageMemoryBindInfo {
+    VkImage                           image;
+    uint32_t                          bindCount;
+    const VkSparseImageMemoryBind*    pBinds;
+} VkSparseImageMemoryBindInfo;
+
+typedef struct VkBindSparseInfo {
+    VkStructureType                             sType;
+    const void*                                 pNext;
+    uint32_t                                    waitSemaphoreCount;
+    const VkSemaphore*                          pWaitSemaphores;
+    uint32_t                                    bufferBindCount;
+    const VkSparseBufferMemoryBindInfo*         pBufferBinds;
+    uint32_t                                    imageOpaqueBindCount;
+    const VkSparseImageOpaqueMemoryBindInfo*    pImageOpaqueBinds;
+    uint32_t                                    imageBindCount;
+    const VkSparseImageMemoryBindInfo*          pImageBinds;
+    uint32_t                                    signalSemaphoreCount;
+    const VkSemaphore*                          pSignalSemaphores;
+} VkBindSparseInfo;
+
+typedef struct VkSparseImageFormatProperties {
+    VkImageAspectFlags          aspectMask;
+    VkExtent3D                  imageGranularity;
+    VkSparseImageFormatFlags    flags;
+} VkSparseImageFormatProperties;
+
+typedef struct VkSparseImageMemoryRequirements {
+    VkSparseImageFormatProperties    formatProperties;
+    uint32_t                         imageMipTailFirstLod;
+    VkDeviceSize                     imageMipTailSize;
+    VkDeviceSize                     imageMipTailOffset;
+    VkDeviceSize                     imageMipTailStride;
+} VkSparseImageMemoryRequirements;
+
+typedef struct VkFenceCreateInfo {
+    VkStructureType       sType;
+    const void*           pNext;
+    VkFenceCreateFlags    flags;
+} VkFenceCreateInfo;
+
+typedef struct VkSemaphoreCreateInfo {
+    VkStructureType           sType;
+    const void*               pNext;
+    VkSemaphoreCreateFlags    flags;
+} VkSemaphoreCreateInfo;
+
+typedef struct VkEventCreateInfo {
+    VkStructureType       sType;
+    const void*           pNext;
+    VkEventCreateFlags    flags;
+} VkEventCreateInfo;
+
+typedef struct VkQueryPoolCreateInfo {
+    VkStructureType                  sType;
+    const void*                      pNext;
+    VkQueryPoolCreateFlags           flags;
+    VkQueryType                      queryType;
+    uint32_t                         queryCount;
+    VkQueryPipelineStatisticFlags    pipelineStatistics;
+} VkQueryPoolCreateInfo;
+
+typedef struct VkBufferCreateInfo {
+    VkStructureType        sType;
+    const void*            pNext;
+    VkBufferCreateFlags    flags;
+    VkDeviceSize           size;
+    VkBufferUsageFlags     usage;
+    VkSharingMode          sharingMode;
+    uint32_t               queueFamilyIndexCount;
+    const uint32_t*        pQueueFamilyIndices;
+} VkBufferCreateInfo;
+
+typedef struct VkBufferViewCreateInfo {
+    VkStructureType            sType;
+    const void*                pNext;
+    VkBufferViewCreateFlags    flags;
+    VkBuffer                   buffer;
+    VkFormat                   format;
+    VkDeviceSize               offset;
+    VkDeviceSize               range;
+} VkBufferViewCreateInfo;
+
+typedef struct VkImageCreateInfo {
+    VkStructureType          sType;
+    const void*              pNext;
+    VkImageCreateFlags       flags;
+    VkImageType              imageType;
+    VkFormat                 format;
+    VkExtent3D               extent;
+    uint32_t                 mipLevels;
+    uint32_t                 arrayLayers;
+    VkSampleCountFlagBits    samples;
+    VkImageTiling            tiling;
+    VkImageUsageFlags        usage;
+    VkSharingMode            sharingMode;
+    uint32_t                 queueFamilyIndexCount;
+    const uint32_t*          pQueueFamilyIndices;
+    VkImageLayout            initialLayout;
+} VkImageCreateInfo;
+
+typedef struct VkSubresourceLayout {
+    VkDeviceSize    offset;
+    VkDeviceSize    size;
+    VkDeviceSize    rowPitch;
+    VkDeviceSize    arrayPitch;
+    VkDeviceSize    depthPitch;
+} VkSubresourceLayout;
+
+typedef struct VkComponentMapping {
+    VkComponentSwizzle    r;
+    VkComponentSwizzle    g;
+    VkComponentSwizzle    b;
+    VkComponentSwizzle    a;
+} VkComponentMapping;
+
+typedef struct VkImageViewCreateInfo {
+    VkStructureType            sType;
+    const void*                pNext;
+    VkImageViewCreateFlags     flags;
+    VkImage                    image;
+    VkImageViewType            viewType;
+    VkFormat                   format;
+    VkComponentMapping         components;
+    VkImageSubresourceRange    subresourceRange;
+} VkImageViewCreateInfo;
+
+typedef struct VkPipelineCacheCreateInfo {
+    VkStructureType               sType;
+    const void*                   pNext;
+    VkPipelineCacheCreateFlags    flags;
+    size_t                        initialDataSize;
+    const void*                   pInitialData;
+} VkPipelineCacheCreateInfo;
+
+typedef struct VkSpecializationMapEntry {
+    uint32_t    constantID;
+    uint32_t    offset;
+    size_t      size;
+} VkSpecializationMapEntry;
+
+typedef struct VkSpecializationInfo {
+    uint32_t                           mapEntryCount;
+    const VkSpecializationMapEntry*    pMapEntries;
+    size_t                             dataSize;
+    const void*                        pData;
+} VkSpecializationInfo;
+
+typedef struct VkPipelineShaderStageCreateInfo {
+    VkStructureType                     sType;
+    const void*                         pNext;
+    VkPipelineShaderStageCreateFlags    flags;
+    VkShaderStageFlagBits               stage;
+    VkShaderModule                      module;
+    const char*                         pName;
+    const VkSpecializationInfo*         pSpecializationInfo;
+} VkPipelineShaderStageCreateInfo;
+
+typedef struct VkComputePipelineCreateInfo {
+    VkStructureType                    sType;
+    const void*                        pNext;
+    VkPipelineCreateFlags              flags;
+    VkPipelineShaderStageCreateInfo    stage;
+    VkPipelineLayout                   layout;
+    VkPipeline                         basePipelineHandle;
+    int32_t                            basePipelineIndex;
+} VkComputePipelineCreateInfo;
+
+typedef struct VkVertexInputBindingDescription {
+    uint32_t             binding;
+    uint32_t             stride;
+    VkVertexInputRate    inputRate;
+} VkVertexInputBindingDescription;
+
+typedef struct VkVertexInputAttributeDescription {
+    uint32_t    location;
+    uint32_t    binding;
+    VkFormat    format;
+    uint32_t    offset;
+} VkVertexInputAttributeDescription;
+
+typedef struct VkPipelineVertexInputStateCreateInfo {
+    VkStructureType                             sType;
+    const void*                                 pNext;
+    VkPipelineVertexInputStateCreateFlags       flags;
+    uint32_t                                    vertexBindingDescriptionCount;
+    const VkVertexInputBindingDescription*      pVertexBindingDescriptions;
+    uint32_t                                    vertexAttributeDescriptionCount;
+    const VkVertexInputAttributeDescription*    pVertexAttributeDescriptions;
+} VkPipelineVertexInputStateCreateInfo;
+
+typedef struct VkPipelineInputAssemblyStateCreateInfo {
+    VkStructureType                            sType;
+    const void*                                pNext;
+    VkPipelineInputAssemblyStateCreateFlags    flags;
+    VkPrimitiveTopology                        topology;
+    VkBool32                                   primitiveRestartEnable;
+} VkPipelineInputAssemblyStateCreateInfo;
+
+typedef struct VkPipelineTessellationStateCreateInfo {
+    VkStructureType                           sType;
+    const void*                               pNext;
+    VkPipelineTessellationStateCreateFlags    flags;
+    uint32_t                                  patchControlPoints;
+} VkPipelineTessellationStateCreateInfo;
+
+typedef struct VkViewport {
+    float    x;
+    float    y;
+    float    width;
+    float    height;
+    float    minDepth;
+    float    maxDepth;
+} VkViewport;
+
+typedef struct VkPipelineViewportStateCreateInfo {
+    VkStructureType                       sType;
+    const void*                           pNext;
+    VkPipelineViewportStateCreateFlags    flags;
+    uint32_t                              viewportCount;
+    const VkViewport*                     pViewports;
+    uint32_t                              scissorCount;
+    const VkRect2D*                       pScissors;
+} VkPipelineViewportStateCreateInfo;
+
+typedef struct VkPipelineRasterizationStateCreateInfo {
+    VkStructureType                            sType;
+    const void*                                pNext;
+    VkPipelineRasterizationStateCreateFlags    flags;
+    VkBool32                                   depthClampEnable;
+    VkBool32                                   rasterizerDiscardEnable;
+    VkPolygonMode                              polygonMode;
+    VkCullModeFlags                            cullMode;
+    VkFrontFace                                frontFace;
+    VkBool32                                   depthBiasEnable;
+    float                                      depthBiasConstantFactor;
+    float                                      depthBiasClamp;
+    float                                      depthBiasSlopeFactor;
+    float                                      lineWidth;
+} VkPipelineRasterizationStateCreateInfo;
+
+typedef struct VkPipelineMultisampleStateCreateInfo {
+    VkStructureType                          sType;
+    const void*                              pNext;
+    VkPipelineMultisampleStateCreateFlags    flags;
+    VkSampleCountFlagBits                    rasterizationSamples;
+    VkBool32                                 sampleShadingEnable;
+    float                                    minSampleShading;
+    const VkSampleMask*                      pSampleMask;
+    VkBool32                                 alphaToCoverageEnable;
+    VkBool32                                 alphaToOneEnable;
+} VkPipelineMultisampleStateCreateInfo;
+
+typedef struct VkStencilOpState {
+    VkStencilOp    failOp;
+    VkStencilOp    passOp;
+    VkStencilOp    depthFailOp;
+    VkCompareOp    compareOp;
+    uint32_t       compareMask;
+    uint32_t       writeMask;
+    uint32_t       reference;
+} VkStencilOpState;
+
+typedef struct VkPipelineDepthStencilStateCreateInfo {
+    VkStructureType                           sType;
+    const void*                               pNext;
+    VkPipelineDepthStencilStateCreateFlags    flags;
+    VkBool32                                  depthTestEnable;
+    VkBool32                                  depthWriteEnable;
+    VkCompareOp                               depthCompareOp;
+    VkBool32                                  depthBoundsTestEnable;
+    VkBool32                                  stencilTestEnable;
+    VkStencilOpState                          front;
+    VkStencilOpState                          back;
+    float                                     minDepthBounds;
+    float                                     maxDepthBounds;
+} VkPipelineDepthStencilStateCreateInfo;
+
+typedef struct VkPipelineColorBlendAttachmentState {
+    VkBool32                 blendEnable;
+    VkBlendFactor            srcColorBlendFactor;
+    VkBlendFactor            dstColorBlendFactor;
+    VkBlendOp                colorBlendOp;
+    VkBlendFactor            srcAlphaBlendFactor;
+    VkBlendFactor            dstAlphaBlendFactor;
+    VkBlendOp                alphaBlendOp;
+    VkColorComponentFlags    colorWriteMask;
+} VkPipelineColorBlendAttachmentState;
+
+typedef struct VkPipelineColorBlendStateCreateInfo {
+    VkStructureType                               sType;
+    const void*                                   pNext;
+    VkPipelineColorBlendStateCreateFlags          flags;
+    VkBool32                                      logicOpEnable;
+    VkLogicOp                                     logicOp;
+    uint32_t                                      attachmentCount;
+    const VkPipelineColorBlendAttachmentState*    pAttachments;
+    float                                         blendConstants[4];
+} VkPipelineColorBlendStateCreateInfo;
+
+typedef struct VkPipelineDynamicStateCreateInfo {
+    VkStructureType                      sType;
+    const void*                          pNext;
+    VkPipelineDynamicStateCreateFlags    flags;
+    uint32_t                             dynamicStateCount;
+    const VkDynamicState*                pDynamicStates;
+} VkPipelineDynamicStateCreateInfo;
+
+typedef struct VkGraphicsPipelineCreateInfo {
+    VkStructureType                                  sType;
+    const void*                                      pNext;
+    VkPipelineCreateFlags                            flags;
+    uint32_t                                         stageCount;
+    const VkPipelineShaderStageCreateInfo*           pStages;
+    const VkPipelineVertexInputStateCreateInfo*      pVertexInputState;
+    const VkPipelineInputAssemblyStateCreateInfo*    pInputAssemblyState;
+    const VkPipelineTessellationStateCreateInfo*     pTessellationState;
+    const VkPipelineViewportStateCreateInfo*         pViewportState;
+    const VkPipelineRasterizationStateCreateInfo*    pRasterizationState;
+    const VkPipelineMultisampleStateCreateInfo*      pMultisampleState;
+    const VkPipelineDepthStencilStateCreateInfo*     pDepthStencilState;
+    const VkPipelineColorBlendStateCreateInfo*       pColorBlendState;
+    const VkPipelineDynamicStateCreateInfo*          pDynamicState;
+    VkPipelineLayout                                 layout;
+    VkRenderPass                                     renderPass;
+    uint32_t                                         subpass;
+    VkPipeline                                       basePipelineHandle;
+    int32_t                                          basePipelineIndex;
+} VkGraphicsPipelineCreateInfo;
+
+typedef struct VkPushConstantRange {
+    VkShaderStageFlags    stageFlags;
+    uint32_t              offset;
+    uint32_t              size;
+} VkPushConstantRange;
+
+typedef struct VkPipelineLayoutCreateInfo {
+    VkStructureType                 sType;
+    const void*                     pNext;
+    VkPipelineLayoutCreateFlags     flags;
+    uint32_t                        setLayoutCount;
+    const VkDescriptorSetLayout*    pSetLayouts;
+    uint32_t                        pushConstantRangeCount;
+    const VkPushConstantRange*      pPushConstantRanges;
+} VkPipelineLayoutCreateInfo;
+
+typedef struct VkSamplerCreateInfo {
+    VkStructureType         sType;
+    const void*             pNext;
+    VkSamplerCreateFlags    flags;
+    VkFilter                magFilter;
+    VkFilter                minFilter;
+    VkSamplerMipmapMode     mipmapMode;
+    VkSamplerAddressMode    addressModeU;
+    VkSamplerAddressMode    addressModeV;
+    VkSamplerAddressMode    addressModeW;
+    float                   mipLodBias;
+    VkBool32                anisotropyEnable;
+    float                   maxAnisotropy;
+    VkBool32                compareEnable;
+    VkCompareOp             compareOp;
+    float                   minLod;
+    float                   maxLod;
+    VkBorderColor           borderColor;
+    VkBool32                unnormalizedCoordinates;
+} VkSamplerCreateInfo;
+
+typedef struct VkCopyDescriptorSet {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkDescriptorSet    srcSet;
+    uint32_t           srcBinding;
+    uint32_t           srcArrayElement;
+    VkDescriptorSet    dstSet;
+    uint32_t           dstBinding;
+    uint32_t           dstArrayElement;
+    uint32_t           descriptorCount;
+} VkCopyDescriptorSet;
+
+typedef struct VkDescriptorBufferInfo {
+    VkBuffer        buffer;
+    VkDeviceSize    offset;
+    VkDeviceSize    range;
+} VkDescriptorBufferInfo;
+
+typedef struct VkDescriptorImageInfo {
+    VkSampler        sampler;
+    VkImageView      imageView;
+    VkImageLayout    imageLayout;
+} VkDescriptorImageInfo;
+
+typedef struct VkDescriptorPoolSize {
+    VkDescriptorType    type;
+    uint32_t            descriptorCount;
+} VkDescriptorPoolSize;
+
+typedef struct VkDescriptorPoolCreateInfo {
+    VkStructureType                sType;
+    const void*                    pNext;
+    VkDescriptorPoolCreateFlags    flags;
+    uint32_t                       maxSets;
+    uint32_t                       poolSizeCount;
+    const VkDescriptorPoolSize*    pPoolSizes;
+} VkDescriptorPoolCreateInfo;
+
+typedef struct VkDescriptorSetAllocateInfo {
+    VkStructureType                 sType;
+    const void*                     pNext;
+    VkDescriptorPool                descriptorPool;
+    uint32_t                        descriptorSetCount;
+    const VkDescriptorSetLayout*    pSetLayouts;
+} VkDescriptorSetAllocateInfo;
+
+typedef struct VkDescriptorSetLayoutBinding {
+    uint32_t              binding;
+    VkDescriptorType      descriptorType;
+    uint32_t              descriptorCount;
+    VkShaderStageFlags    stageFlags;
+    const VkSampler*      pImmutableSamplers;
+} VkDescriptorSetLayoutBinding;
+
+typedef struct VkDescriptorSetLayoutCreateInfo {
+    VkStructureType                        sType;
+    const void*                            pNext;
+    VkDescriptorSetLayoutCreateFlags       flags;
+    uint32_t                               bindingCount;
+    const VkDescriptorSetLayoutBinding*    pBindings;
+} VkDescriptorSetLayoutCreateInfo;
+
+typedef struct VkWriteDescriptorSet {
+    VkStructureType                  sType;
+    const void*                      pNext;
+    VkDescriptorSet                  dstSet;
+    uint32_t                         dstBinding;
+    uint32_t                         dstArrayElement;
+    uint32_t                         descriptorCount;
+    VkDescriptorType                 descriptorType;
+    const VkDescriptorImageInfo*     pImageInfo;
+    const VkDescriptorBufferInfo*    pBufferInfo;
+    const VkBufferView*              pTexelBufferView;
+} VkWriteDescriptorSet;
+
+typedef struct VkAttachmentDescription {
+    VkAttachmentDescriptionFlags    flags;
+    VkFormat                        format;
+    VkSampleCountFlagBits           samples;
+    VkAttachmentLoadOp              loadOp;
+    VkAttachmentStoreOp             storeOp;
+    VkAttachmentLoadOp              stencilLoadOp;
+    VkAttachmentStoreOp             stencilStoreOp;
+    VkImageLayout                   initialLayout;
+    VkImageLayout                   finalLayout;
+} VkAttachmentDescription;
+
+typedef struct VkAttachmentReference {
+    uint32_t         attachment;
+    VkImageLayout    layout;
+} VkAttachmentReference;
+
+typedef struct VkFramebufferCreateInfo {
+    VkStructureType             sType;
+    const void*                 pNext;
+    VkFramebufferCreateFlags    flags;
+    VkRenderPass                renderPass;
+    uint32_t                    attachmentCount;
+    const VkImageView*          pAttachments;
+    uint32_t                    width;
+    uint32_t                    height;
+    uint32_t                    layers;
+} VkFramebufferCreateInfo;
+
+typedef struct VkSubpassDescription {
+    VkSubpassDescriptionFlags       flags;
+    VkPipelineBindPoint             pipelineBindPoint;
+    uint32_t                        inputAttachmentCount;
+    const VkAttachmentReference*    pInputAttachments;
+    uint32_t                        colorAttachmentCount;
+    const VkAttachmentReference*    pColorAttachments;
+    const VkAttachmentReference*    pResolveAttachments;
+    const VkAttachmentReference*    pDepthStencilAttachment;
+    uint32_t                        preserveAttachmentCount;
+    const uint32_t*                 pPreserveAttachments;
+} VkSubpassDescription;
+
+typedef struct VkSubpassDependency {
+    uint32_t                srcSubpass;
+    uint32_t                dstSubpass;
+    VkPipelineStageFlags    srcStageMask;
+    VkPipelineStageFlags    dstStageMask;
+    VkAccessFlags           srcAccessMask;
+    VkAccessFlags           dstAccessMask;
+    VkDependencyFlags       dependencyFlags;
+} VkSubpassDependency;
+
+typedef struct VkRenderPassCreateInfo {
+    VkStructureType                   sType;
+    const void*                       pNext;
+    VkRenderPassCreateFlags           flags;
+    uint32_t                          attachmentCount;
+    const VkAttachmentDescription*    pAttachments;
+    uint32_t                          subpassCount;
+    const VkSubpassDescription*       pSubpasses;
+    uint32_t                          dependencyCount;
+    const VkSubpassDependency*        pDependencies;
+} VkRenderPassCreateInfo;
+
+typedef struct VkCommandPoolCreateInfo {
+    VkStructureType             sType;
+    const void*                 pNext;
+    VkCommandPoolCreateFlags    flags;
+    uint32_t                    queueFamilyIndex;
+} VkCommandPoolCreateInfo;
+
+typedef struct VkCommandBufferAllocateInfo {
+    VkStructureType         sType;
+    const void*             pNext;
+    VkCommandPool           commandPool;
+    VkCommandBufferLevel    level;
+    uint32_t                commandBufferCount;
+} VkCommandBufferAllocateInfo;
+
+typedef struct VkCommandBufferInheritanceInfo {
+    VkStructureType                  sType;
+    const void*                      pNext;
+    VkRenderPass                     renderPass;
+    uint32_t                         subpass;
+    VkFramebuffer                    framebuffer;
+    VkBool32                         occlusionQueryEnable;
+    VkQueryControlFlags              queryFlags;
+    VkQueryPipelineStatisticFlags    pipelineStatistics;
+} VkCommandBufferInheritanceInfo;
+
+typedef struct VkCommandBufferBeginInfo {
+    VkStructureType                          sType;
+    const void*                              pNext;
+    VkCommandBufferUsageFlags                flags;
+    const VkCommandBufferInheritanceInfo*    pInheritanceInfo;
+} VkCommandBufferBeginInfo;
+
+typedef struct VkBufferCopy {
+    VkDeviceSize    srcOffset;
+    VkDeviceSize    dstOffset;
+    VkDeviceSize    size;
+} VkBufferCopy;
+
+typedef struct VkImageSubresourceLayers {
+    VkImageAspectFlags    aspectMask;
+    uint32_t              mipLevel;
+    uint32_t              baseArrayLayer;
+    uint32_t              layerCount;
+} VkImageSubresourceLayers;
+
+typedef struct VkBufferImageCopy {
+    VkDeviceSize                bufferOffset;
+    uint32_t                    bufferRowLength;
+    uint32_t                    bufferImageHeight;
+    VkImageSubresourceLayers    imageSubresource;
+    VkOffset3D                  imageOffset;
+    VkExtent3D                  imageExtent;
+} VkBufferImageCopy;
+
+typedef union VkClearColorValue {
+    float       float32[4];
+    int32_t     int32[4];
+    uint32_t    uint32[4];
+} VkClearColorValue;
+
+typedef struct VkClearDepthStencilValue {
+    float       depth;
+    uint32_t    stencil;
+} VkClearDepthStencilValue;
+
+typedef union VkClearValue {
+    VkClearColorValue           color;
+    VkClearDepthStencilValue    depthStencil;
+} VkClearValue;
+
+typedef struct VkClearAttachment {
+    VkImageAspectFlags    aspectMask;
+    uint32_t              colorAttachment;
+    VkClearValue          clearValue;
+} VkClearAttachment;
+
+typedef struct VkClearRect {
+    VkRect2D    rect;
+    uint32_t    baseArrayLayer;
+    uint32_t    layerCount;
+} VkClearRect;
+
+typedef struct VkImageBlit {
+    VkImageSubresourceLayers    srcSubresource;
+    VkOffset3D                  srcOffsets[2];
+    VkImageSubresourceLayers    dstSubresource;
+    VkOffset3D                  dstOffsets[2];
+} VkImageBlit;
+
+typedef struct VkImageCopy {
+    VkImageSubresourceLayers    srcSubresource;
+    VkOffset3D                  srcOffset;
+    VkImageSubresourceLayers    dstSubresource;
+    VkOffset3D                  dstOffset;
+    VkExtent3D                  extent;
+} VkImageCopy;
+
+typedef struct VkImageResolve {
+    VkImageSubresourceLayers    srcSubresource;
+    VkOffset3D                  srcOffset;
+    VkImageSubresourceLayers    dstSubresource;
+    VkOffset3D                  dstOffset;
+    VkExtent3D                  extent;
+} VkImageResolve;
+
+typedef struct VkRenderPassBeginInfo {
+    VkStructureType        sType;
+    const void*            pNext;
+    VkRenderPass           renderPass;
+    VkFramebuffer          framebuffer;
+    VkRect2D               renderArea;
+    uint32_t               clearValueCount;
+    const VkClearValue*    pClearValues;
+} VkRenderPassBeginInfo;
+
+typedef VkResult (VKAPI_PTR *PFN_vkCreateInstance)(const VkInstanceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkInstance* pInstance);
+typedef void (VKAPI_PTR *PFN_vkDestroyInstance)(VkInstance instance, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkEnumeratePhysicalDevices)(VkInstance instance, uint32_t* pPhysicalDeviceCount, VkPhysicalDevice* pPhysicalDevices);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceFeatures)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures* pFeatures);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties* pFormatProperties);
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceImageFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkImageFormatProperties* pImageFormatProperties);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceProperties)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties* pProperties);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceQueueFamilyProperties)(VkPhysicalDevice physicalDevice, uint32_t* pQueueFamilyPropertyCount, VkQueueFamilyProperties* pQueueFamilyProperties);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceMemoryProperties)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties* pMemoryProperties);
+typedef PFN_vkVoidFunction (VKAPI_PTR *PFN_vkGetInstanceProcAddr)(VkInstance instance, const char* pName);
+typedef PFN_vkVoidFunction (VKAPI_PTR *PFN_vkGetDeviceProcAddr)(VkDevice device, const char* pName);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateDevice)(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDevice* pDevice);
+typedef void (VKAPI_PTR *PFN_vkDestroyDevice)(VkDevice device, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkEnumerateInstanceExtensionProperties)(const char* pLayerName, uint32_t* pPropertyCount, VkExtensionProperties* pProperties);
+typedef VkResult (VKAPI_PTR *PFN_vkEnumerateDeviceExtensionProperties)(VkPhysicalDevice physicalDevice, const char* pLayerName, uint32_t* pPropertyCount, VkExtensionProperties* pProperties);
+typedef VkResult (VKAPI_PTR *PFN_vkEnumerateInstanceLayerProperties)(uint32_t* pPropertyCount, VkLayerProperties* pProperties);
+typedef VkResult (VKAPI_PTR *PFN_vkEnumerateDeviceLayerProperties)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkLayerProperties* pProperties);
+typedef void (VKAPI_PTR *PFN_vkGetDeviceQueue)(VkDevice device, uint32_t queueFamilyIndex, uint32_t queueIndex, VkQueue* pQueue);
+typedef VkResult (VKAPI_PTR *PFN_vkQueueSubmit)(VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits, VkFence fence);
+typedef VkResult (VKAPI_PTR *PFN_vkQueueWaitIdle)(VkQueue queue);
+typedef VkResult (VKAPI_PTR *PFN_vkDeviceWaitIdle)(VkDevice device);
+typedef VkResult (VKAPI_PTR *PFN_vkAllocateMemory)(VkDevice device, const VkMemoryAllocateInfo* pAllocateInfo, const VkAllocationCallbacks* pAllocator, VkDeviceMemory* pMemory);
+typedef VkResult (VKAPI_PTR *PFN_vkMapMemory)(VkDevice device, VkDeviceMemory memory, VkDeviceSize offset, VkDeviceSize size, VkMemoryMapFlags flags, void** ppData);
+typedef void (VKAPI_PTR *PFN_vkUnmapMemory)(VkDevice device, VkDeviceMemory memory);
+typedef VkResult (VKAPI_PTR *PFN_vkFlushMappedMemoryRanges)(VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges);
+typedef VkResult (VKAPI_PTR *PFN_vkInvalidateMappedMemoryRanges)(VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges);
+typedef void (VKAPI_PTR *PFN_vkGetDeviceMemoryCommitment)(VkDevice device, VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes);
+typedef VkResult (VKAPI_PTR *PFN_vkBindBufferMemory)(VkDevice device, VkBuffer buffer, VkDeviceMemory memory, VkDeviceSize memoryOffset);
+typedef VkResult (VKAPI_PTR *PFN_vkBindImageMemory)(VkDevice device, VkImage image, VkDeviceMemory memory, VkDeviceSize memoryOffset);
+typedef void (VKAPI_PTR *PFN_vkGetBufferMemoryRequirements)(VkDevice device, VkBuffer buffer, VkMemoryRequirements* pMemoryRequirements);
+typedef void (VKAPI_PTR *PFN_vkGetImageMemoryRequirements)(VkDevice device, VkImage image, VkMemoryRequirements* pMemoryRequirements);
+typedef void (VKAPI_PTR *PFN_vkGetImageSparseMemoryRequirements)(VkDevice device, VkImage image, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements* pSparseMemoryRequirements);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceSparseImageFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkSampleCountFlagBits samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t* pPropertyCount, VkSparseImageFormatProperties* pProperties);
+typedef VkResult (VKAPI_PTR *PFN_vkQueueBindSparse)(VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateFence)(VkDevice device, const VkFenceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence);
+typedef void (VKAPI_PTR *PFN_vkDestroyFence)(VkDevice device, VkFence fence, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkResetFences)(VkDevice device, uint32_t fenceCount, const VkFence* pFences);
+typedef VkResult (VKAPI_PTR *PFN_vkGetFenceStatus)(VkDevice device, VkFence fence);
+typedef VkResult (VKAPI_PTR *PFN_vkWaitForFences)(VkDevice device, uint32_t fenceCount, const VkFence* pFences, VkBool32 waitAll, uint64_t timeout);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateSemaphore)(VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSemaphore* pSemaphore);
+typedef void (VKAPI_PTR *PFN_vkDestroySemaphore)(VkDevice device, VkSemaphore semaphore, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateEvent)(VkDevice device, const VkEventCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkEvent* pEvent);
+typedef void (VKAPI_PTR *PFN_vkDestroyEvent)(VkDevice device, VkEvent event, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkGetEventStatus)(VkDevice device, VkEvent event);
+typedef VkResult (VKAPI_PTR *PFN_vkSetEvent)(VkDevice device, VkEvent event);
+typedef VkResult (VKAPI_PTR *PFN_vkResetEvent)(VkDevice device, VkEvent event);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateQueryPool)(VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkQueryPool* pQueryPool);
+typedef VkResult (VKAPI_PTR *PFN_vkGetQueryPoolResults)(VkDevice device, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, size_t dataSize, void* pData, VkDeviceSize stride, VkQueryResultFlags flags);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateBuffer)(VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBuffer* pBuffer);
+typedef void (VKAPI_PTR *PFN_vkDestroyBuffer)(VkDevice device, VkBuffer buffer, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateBufferView)(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBufferView* pView);
+typedef void (VKAPI_PTR *PFN_vkDestroyBufferView)(VkDevice device, VkBufferView bufferView, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateImage)(VkDevice device, const VkImageCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImage* pImage);
+typedef void (VKAPI_PTR *PFN_vkDestroyImage)(VkDevice device, VkImage image, const VkAllocationCallbacks* pAllocator);
+typedef void (VKAPI_PTR *PFN_vkGetImageSubresourceLayout)(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateImageView)(VkDevice device, const VkImageViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImageView* pView);
+typedef void (VKAPI_PTR *PFN_vkDestroyImageView)(VkDevice device, VkImageView imageView, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkCreatePipelineCache)(VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineCache* pPipelineCache);
+typedef void (VKAPI_PTR *PFN_vkDestroyPipelineCache)(VkDevice device, VkPipelineCache pipelineCache, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateGraphicsPipelines)(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkGraphicsPipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateComputePipelines)(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkComputePipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines);
+typedef void (VKAPI_PTR *PFN_vkDestroyPipeline)(VkDevice device, VkPipeline pipeline, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkCreatePipelineLayout)(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineLayout* pPipelineLayout);
+typedef void (VKAPI_PTR *PFN_vkDestroyPipelineLayout)(VkDevice device, VkPipelineLayout pipelineLayout, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateSampler)(VkDevice device, const VkSamplerCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSampler* pSampler);
+typedef void (VKAPI_PTR *PFN_vkDestroySampler)(VkDevice device, VkSampler sampler, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateDescriptorSetLayout)(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorSetLayout* pSetLayout);
+typedef void (VKAPI_PTR *PFN_vkDestroyDescriptorSetLayout)(VkDevice device, VkDescriptorSetLayout descriptorSetLayout, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateDescriptorPool)(VkDevice device, const VkDescriptorPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorPool* pDescriptorPool);
+typedef VkResult (VKAPI_PTR *PFN_vkResetDescriptorPool)(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorPoolResetFlags flags);
+typedef VkResult (VKAPI_PTR *PFN_vkAllocateDescriptorSets)(VkDevice device, const VkDescriptorSetAllocateInfo* pAllocateInfo, VkDescriptorSet* pDescriptorSets);
+typedef VkResult (VKAPI_PTR *PFN_vkFreeDescriptorSets)(VkDevice device, VkDescriptorPool descriptorPool, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets);
+typedef void (VKAPI_PTR *PFN_vkUpdateDescriptorSets)(VkDevice device, uint32_t descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites, uint32_t descriptorCopyCount, const VkCopyDescriptorSet* pDescriptorCopies);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateFramebuffer)(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFramebuffer* pFramebuffer);
+typedef void (VKAPI_PTR *PFN_vkDestroyFramebuffer)(VkDevice device, VkFramebuffer framebuffer, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateRenderPass)(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass);
+typedef void (VKAPI_PTR *PFN_vkDestroyRenderPass)(VkDevice device, VkRenderPass renderPass, const VkAllocationCallbacks* pAllocator);
+typedef void (VKAPI_PTR *PFN_vkGetRenderAreaGranularity)(VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateCommandPool)(VkDevice device, const VkCommandPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkCommandPool* pCommandPool);
+typedef VkResult (VKAPI_PTR *PFN_vkResetCommandPool)(VkDevice device, VkCommandPool commandPool, VkCommandPoolResetFlags flags);
+typedef VkResult (VKAPI_PTR *PFN_vkAllocateCommandBuffers)(VkDevice device, const VkCommandBufferAllocateInfo* pAllocateInfo, VkCommandBuffer* pCommandBuffers);
+typedef void (VKAPI_PTR *PFN_vkFreeCommandBuffers)(VkDevice device, VkCommandPool commandPool, uint32_t commandBufferCount, const VkCommandBuffer* pCommandBuffers);
+typedef VkResult (VKAPI_PTR *PFN_vkBeginCommandBuffer)(VkCommandBuffer commandBuffer, const VkCommandBufferBeginInfo* pBeginInfo);
+typedef VkResult (VKAPI_PTR *PFN_vkEndCommandBuffer)(VkCommandBuffer commandBuffer);
+typedef VkResult (VKAPI_PTR *PFN_vkResetCommandBuffer)(VkCommandBuffer commandBuffer, VkCommandBufferResetFlags flags);
+typedef void (VKAPI_PTR *PFN_vkCmdBindPipeline)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline);
+typedef void (VKAPI_PTR *PFN_vkCmdSetViewport)(VkCommandBuffer commandBuffer, uint32_t firstViewport, uint32_t viewportCount, const VkViewport* pViewports);
+typedef void (VKAPI_PTR *PFN_vkCmdSetScissor)(VkCommandBuffer commandBuffer, uint32_t firstScissor, uint32_t scissorCount, const VkRect2D* pScissors);
+typedef void (VKAPI_PTR *PFN_vkCmdSetLineWidth)(VkCommandBuffer commandBuffer, float lineWidth);
+typedef void (VKAPI_PTR *PFN_vkCmdSetDepthBias)(VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor);
+typedef void (VKAPI_PTR *PFN_vkCmdSetBlendConstants)(VkCommandBuffer commandBuffer, const float blendConstants[4]);
+typedef void (VKAPI_PTR *PFN_vkCmdSetDepthBounds)(VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds);
+typedef void (VKAPI_PTR *PFN_vkCmdSetStencilCompareMask)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t compareMask);
+typedef void (VKAPI_PTR *PFN_vkCmdSetStencilWriteMask)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t writeMask);
+typedef void (VKAPI_PTR *PFN_vkCmdSetStencilReference)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t reference);
+typedef void (VKAPI_PTR *PFN_vkCmdBindDescriptorSets)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets);
+typedef void (VKAPI_PTR *PFN_vkCmdBindIndexBuffer)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType);
+typedef void (VKAPI_PTR *PFN_vkCmdBindVertexBuffers)(VkCommandBuffer commandBuffer, uint32_t firstBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets);
+typedef void (VKAPI_PTR *PFN_vkCmdDraw)(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance);
+typedef void (VKAPI_PTR *PFN_vkCmdDrawIndexed)(VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance);
+typedef void (VKAPI_PTR *PFN_vkCmdDrawIndirect)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride);
+typedef void (VKAPI_PTR *PFN_vkCmdDrawIndexedIndirect)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride);
+typedef void (VKAPI_PTR *PFN_vkCmdDispatch)(VkCommandBuffer commandBuffer, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ);
+typedef void (VKAPI_PTR *PFN_vkCmdDispatchIndirect)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset);
+typedef void (VKAPI_PTR *PFN_vkCmdCopyBuffer)(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferCopy* pRegions);
+typedef void (VKAPI_PTR *PFN_vkCmdCopyImage)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageCopy* pRegions);
+typedef void (VKAPI_PTR *PFN_vkCmdBlitImage)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageBlit* pRegions, VkFilter filter);
+typedef void (VKAPI_PTR *PFN_vkCmdCopyBufferToImage)(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkBufferImageCopy* pRegions);
+typedef void (VKAPI_PTR *PFN_vkCmdCopyImageToBuffer)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferImageCopy* pRegions);
+typedef void (VKAPI_PTR *PFN_vkCmdUpdateBuffer)(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize dataSize, const void* pData);
+typedef void (VKAPI_PTR *PFN_vkCmdFillBuffer)(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize size, uint32_t data);
+typedef void (VKAPI_PTR *PFN_vkCmdClearColorImage)(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rangeCount, const VkImageSubresourceRange* pRanges);
+typedef void (VKAPI_PTR *PFN_vkCmdClearDepthStencilImage)(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges);
+typedef void (VKAPI_PTR *PFN_vkCmdClearAttachments)(VkCommandBuffer commandBuffer, uint32_t attachmentCount, const VkClearAttachment* pAttachments, uint32_t rectCount, const VkClearRect* pRects);
+typedef void (VKAPI_PTR *PFN_vkCmdResolveImage)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageResolve* pRegions);
+typedef void (VKAPI_PTR *PFN_vkCmdSetEvent)(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask);
+typedef void (VKAPI_PTR *PFN_vkCmdResetEvent)(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask);
+typedef void (VKAPI_PTR *PFN_vkCmdWaitEvents)(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, uint32_t memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers);
+typedef void (VKAPI_PTR *PFN_vkCmdPipelineBarrier)(VkCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, uint32_t memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers);
+typedef void (VKAPI_PTR *PFN_vkCmdBeginQuery)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, VkQueryControlFlags flags);
+typedef void (VKAPI_PTR *PFN_vkCmdEndQuery)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query);
+typedef void (VKAPI_PTR *PFN_vkCmdResetQueryPool)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount);
+typedef void (VKAPI_PTR *PFN_vkCmdWriteTimestamp)(VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, uint32_t query);
+typedef void (VKAPI_PTR *PFN_vkCmdCopyQueryPoolResults)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize stride, VkQueryResultFlags flags);
+typedef void (VKAPI_PTR *PFN_vkCmdPushConstants)(VkCommandBuffer commandBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t offset, uint32_t size, const void* pValues);
+typedef void (VKAPI_PTR *PFN_vkCmdBeginRenderPass)(VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkSubpassContents contents);
+typedef void (VKAPI_PTR *PFN_vkCmdNextSubpass)(VkCommandBuffer commandBuffer, VkSubpassContents contents);
+typedef void (VKAPI_PTR *PFN_vkCmdEndRenderPass)(VkCommandBuffer commandBuffer);
+typedef void (VKAPI_PTR *PFN_vkCmdExecuteCommands)(VkCommandBuffer commandBuffer, uint32_t commandBufferCount, const VkCommandBuffer* pCommandBuffers);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateInstance(
+    const VkInstanceCreateInfo*                 pCreateInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkInstance*                                 pInstance);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyInstance(
+    VkInstance                                  instance,
+    const VkAllocationCallbacks*                pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDevices(
+    VkInstance                                  instance,
+    uint32_t*                                   pPhysicalDeviceCount,
+    VkPhysicalDevice*                           pPhysicalDevices);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFeatures(
+    VkPhysicalDevice                            physicalDevice,
+    VkPhysicalDeviceFeatures*                   pFeatures);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFormatProperties(
+    VkPhysicalDevice                            physicalDevice,
+    VkFormat                                    format,
+    VkFormatProperties*                         pFormatProperties);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceImageFormatProperties(
+    VkPhysicalDevice                            physicalDevice,
+    VkFormat                                    format,
+    VkImageType                                 type,
+    VkImageTiling                               tiling,
+    VkImageUsageFlags                           usage,
+    VkImageCreateFlags                          flags,
+    VkImageFormatProperties*                    pImageFormatProperties);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceProperties(
+    VkPhysicalDevice                            physicalDevice,
+    VkPhysicalDeviceProperties*                 pProperties);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyProperties(
+    VkPhysicalDevice                            physicalDevice,
+    uint32_t*                                   pQueueFamilyPropertyCount,
+    VkQueueFamilyProperties*                    pQueueFamilyProperties);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMemoryProperties(
+    VkPhysicalDevice                            physicalDevice,
+    VkPhysicalDeviceMemoryProperties*           pMemoryProperties);
+
+VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetInstanceProcAddr(
+    VkInstance                                  instance,
+    const char*                                 pName);
+
+VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetDeviceProcAddr(
+    VkDevice                                    device,
+    const char*                                 pName);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateDevice(
+    VkPhysicalDevice                            physicalDevice,
+    const VkDeviceCreateInfo*                   pCreateInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkDevice*                                   pDevice);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyDevice(
+    VkDevice                                    device,
+    const VkAllocationCallbacks*                pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceExtensionProperties(
+    const char*                                 pLayerName,
+    uint32_t*                                   pPropertyCount,
+    VkExtensionProperties*                      pProperties);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceExtensionProperties(
+    VkPhysicalDevice                            physicalDevice,
+    const char*                                 pLayerName,
+    uint32_t*                                   pPropertyCount,
+    VkExtensionProperties*                      pProperties);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceLayerProperties(
+    uint32_t*                                   pPropertyCount,
+    VkLayerProperties*                          pProperties);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceLayerProperties(
+    VkPhysicalDevice                            physicalDevice,
+    uint32_t*                                   pPropertyCount,
+    VkLayerProperties*                          pProperties);
+
+VKAPI_ATTR void VKAPI_CALL vkGetDeviceQueue(
+    VkDevice                                    device,
+    uint32_t                                    queueFamilyIndex,
+    uint32_t                                    queueIndex,
+    VkQueue*                                    pQueue);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkQueueSubmit(
+    VkQueue                                     queue,
+    uint32_t                                    submitCount,
+    const VkSubmitInfo*                         pSubmits,
+    VkFence                                     fence);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkQueueWaitIdle(
+    VkQueue                                     queue);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkDeviceWaitIdle(
+    VkDevice                                    device);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkAllocateMemory(
+    VkDevice                                    device,
+    const VkMemoryAllocateInfo*                 pAllocateInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkDeviceMemory*                             pMemory);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkMapMemory(
+    VkDevice                                    device,
+    VkDeviceMemory                              memory,
+    VkDeviceSize                                offset,
+    VkDeviceSize                                size,
+    VkMemoryMapFlags                            flags,
+    void**                                      ppData);
+
+VKAPI_ATTR void VKAPI_CALL vkUnmapMemory(
+    VkDevice                                    device,
+    VkDeviceMemory                              memory);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkFlushMappedMemoryRanges(
+    VkDevice                                    device,
+    uint32_t                                    memoryRangeCount,
+    const VkMappedMemoryRange*                  pMemoryRanges);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkInvalidateMappedMemoryRanges(
+    VkDevice                                    device,
+    uint32_t                                    memoryRangeCount,
+    const VkMappedMemoryRange*                  pMemoryRanges);
+
+VKAPI_ATTR void VKAPI_CALL vkGetDeviceMemoryCommitment(
+    VkDevice                                    device,
+    VkDeviceMemory                              memory,
+    VkDeviceSize*                               pCommittedMemoryInBytes);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkBindBufferMemory(
+    VkDevice                                    device,
+    VkBuffer                                    buffer,
+    VkDeviceMemory                              memory,
+    VkDeviceSize                                memoryOffset);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkBindImageMemory(
+    VkDevice                                    device,
+    VkImage                                     image,
+    VkDeviceMemory                              memory,
+    VkDeviceSize                                memoryOffset);
+
+VKAPI_ATTR void VKAPI_CALL vkGetBufferMemoryRequirements(
+    VkDevice                                    device,
+    VkBuffer                                    buffer,
+    VkMemoryRequirements*                       pMemoryRequirements);
+
+VKAPI_ATTR void VKAPI_CALL vkGetImageMemoryRequirements(
+    VkDevice                                    device,
+    VkImage                                     image,
+    VkMemoryRequirements*                       pMemoryRequirements);
+
+VKAPI_ATTR void VKAPI_CALL vkGetImageSparseMemoryRequirements(
+    VkDevice                                    device,
+    VkImage                                     image,
+    uint32_t*                                   pSparseMemoryRequirementCount,
+    VkSparseImageMemoryRequirements*            pSparseMemoryRequirements);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceSparseImageFormatProperties(
+    VkPhysicalDevice                            physicalDevice,
+    VkFormat                                    format,
+    VkImageType                                 type,
+    VkSampleCountFlagBits                       samples,
+    VkImageUsageFlags                           usage,
+    VkImageTiling                               tiling,
+    uint32_t*                                   pPropertyCount,
+    VkSparseImageFormatProperties*              pProperties);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkQueueBindSparse(
+    VkQueue                                     queue,
+    uint32_t                                    bindInfoCount,
+    const VkBindSparseInfo*                     pBindInfo,
+    VkFence                                     fence);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateFence(
+    VkDevice                                    device,
+    const VkFenceCreateInfo*                    pCreateInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkFence*                                    pFence);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyFence(
+    VkDevice                                    device,
+    VkFence                                     fence,
+    const VkAllocationCallbacks*                pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkResetFences(
+    VkDevice                                    device,
+    uint32_t                                    fenceCount,
+    const VkFence*                              pFences);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetFenceStatus(
+    VkDevice                                    device,
+    VkFence                                     fence);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkWaitForFences(
+    VkDevice                                    device,
+    uint32_t                                    fenceCount,
+    const VkFence*                              pFences,
+    VkBool32                                    waitAll,
+    uint64_t                                    timeout);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateSemaphore(
+    VkDevice                                    device,
+    const VkSemaphoreCreateInfo*                pCreateInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkSemaphore*                                pSemaphore);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroySemaphore(
+    VkDevice                                    device,
+    VkSemaphore                                 semaphore,
+    const VkAllocationCallbacks*                pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateEvent(
+    VkDevice                                    device,
+    const VkEventCreateInfo*                    pCreateInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkEvent*                                    pEvent);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyEvent(
+    VkDevice                                    device,
+    VkEvent                                     event,
+    const VkAllocationCallbacks*                pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetEventStatus(
+    VkDevice                                    device,
+    VkEvent                                     event);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkSetEvent(
+    VkDevice                                    device,
+    VkEvent                                     event);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkResetEvent(
+    VkDevice                                    device,
+    VkEvent                                     event);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateQueryPool(
+    VkDevice                                    device,
+    const VkQueryPoolCreateInfo*                pCreateInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkQueryPool*                                pQueryPool);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetQueryPoolResults(
+    VkDevice                                    device,
+    VkQueryPool                                 queryPool,
+    uint32_t                                    firstQuery,
+    uint32_t                                    queryCount,
+    size_t                                      dataSize,
+    void*                                       pData,
+    VkDeviceSize                                stride,
+    VkQueryResultFlags                          flags);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateBuffer(
+    VkDevice                                    device,
+    const VkBufferCreateInfo*                   pCreateInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkBuffer*                                   pBuffer);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyBuffer(
+    VkDevice                                    device,
+    VkBuffer                                    buffer,
+    const VkAllocationCallbacks*                pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateBufferView(
+    VkDevice                                    device,
+    const VkBufferViewCreateInfo*               pCreateInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkBufferView*                               pView);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyBufferView(
+    VkDevice                                    device,
+    VkBufferView                                bufferView,
+    const VkAllocationCallbacks*                pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateImage(
+    VkDevice                                    device,
+    const VkImageCreateInfo*                    pCreateInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkImage*                                    pImage);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyImage(
+    VkDevice                                    device,
+    VkImage                                     image,
+    const VkAllocationCallbacks*                pAllocator);
+
+VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout(
+    VkDevice                                    device,
+    VkImage                                     image,
+    const VkImageSubresource*                   pSubresource,
+    VkSubresourceLayout*                        pLayout);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateImageView(
+    VkDevice                                    device,
+    const VkImageViewCreateInfo*                pCreateInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkImageView*                                pView);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyImageView(
+    VkDevice                                    device,
+    VkImageView                                 imageView,
+    const VkAllocationCallbacks*                pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineCache(
+    VkDevice                                    device,
+    const VkPipelineCacheCreateInfo*            pCreateInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkPipelineCache*                            pPipelineCache);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyPipelineCache(
+    VkDevice                                    device,
+    VkPipelineCache                             pipelineCache,
+    const VkAllocationCallbacks*                pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateGraphicsPipelines(
+    VkDevice                                    device,
+    VkPipelineCache                             pipelineCache,
+    uint32_t                                    createInfoCount,
+    const VkGraphicsPipelineCreateInfo*         pCreateInfos,
+    const VkAllocationCallbacks*                pAllocator,
+    VkPipeline*                                 pPipelines);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateComputePipelines(
+    VkDevice                                    device,
+    VkPipelineCache                             pipelineCache,
+    uint32_t                                    createInfoCount,
+    const VkComputePipelineCreateInfo*          pCreateInfos,
+    const VkAllocationCallbacks*                pAllocator,
+    VkPipeline*                                 pPipelines);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyPipeline(
+    VkDevice                                    device,
+    VkPipeline                                  pipeline,
+    const VkAllocationCallbacks*                pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineLayout(
+    VkDevice                                    device,
+    const VkPipelineLayoutCreateInfo*           pCreateInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkPipelineLayout*                           pPipelineLayout);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyPipelineLayout(
+    VkDevice                                    device,
+    VkPipelineLayout                            pipelineLayout,
+    const VkAllocationCallbacks*                pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateSampler(
+    VkDevice                                    device,
+    const VkSamplerCreateInfo*                  pCreateInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkSampler*                                  pSampler);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroySampler(
+    VkDevice                                    device,
+    VkSampler                                   sampler,
+    const VkAllocationCallbacks*                pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorSetLayout(
+    VkDevice                                    device,
+    const VkDescriptorSetLayoutCreateInfo*      pCreateInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkDescriptorSetLayout*                      pSetLayout);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorSetLayout(
+    VkDevice                                    device,
+    VkDescriptorSetLayout                       descriptorSetLayout,
+    const VkAllocationCallbacks*                pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorPool(
+    VkDevice                                    device,
+    const VkDescriptorPoolCreateInfo*           pCreateInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkDescriptorPool*                           pDescriptorPool);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkResetDescriptorPool(
+    VkDevice                                    device,
+    VkDescriptorPool                            descriptorPool,
+    VkDescriptorPoolResetFlags                  flags);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkAllocateDescriptorSets(
+    VkDevice                                    device,
+    const VkDescriptorSetAllocateInfo*          pAllocateInfo,
+    VkDescriptorSet*                            pDescriptorSets);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkFreeDescriptorSets(
+    VkDevice                                    device,
+    VkDescriptorPool                            descriptorPool,
+    uint32_t                                    descriptorSetCount,
+    const VkDescriptorSet*                      pDescriptorSets);
+
+VKAPI_ATTR void VKAPI_CALL vkUpdateDescriptorSets(
+    VkDevice                                    device,
+    uint32_t                                    descriptorWriteCount,
+    const VkWriteDescriptorSet*                 pDescriptorWrites,
+    uint32_t                                    descriptorCopyCount,
+    const VkCopyDescriptorSet*                  pDescriptorCopies);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateFramebuffer(
+    VkDevice                                    device,
+    const VkFramebufferCreateInfo*              pCreateInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkFramebuffer*                              pFramebuffer);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyFramebuffer(
+    VkDevice                                    device,
+    VkFramebuffer                               framebuffer,
+    const VkAllocationCallbacks*                pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass(
+    VkDevice                                    device,
+    const VkRenderPassCreateInfo*               pCreateInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkRenderPass*                               pRenderPass);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyRenderPass(
+    VkDevice                                    device,
+    VkRenderPass                                renderPass,
+    const VkAllocationCallbacks*                pAllocator);
+
+VKAPI_ATTR void VKAPI_CALL vkGetRenderAreaGranularity(
+    VkDevice                                    device,
+    VkRenderPass                                renderPass,
+    VkExtent2D*                                 pGranularity);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateCommandPool(
+    VkDevice                                    device,
+    const VkCommandPoolCreateInfo*              pCreateInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkCommandPool*                              pCommandPool);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandPool(
+    VkDevice                                    device,
+    VkCommandPool                               commandPool,
+    VkCommandPoolResetFlags                     flags);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkAllocateCommandBuffers(
+    VkDevice                                    device,
+    const VkCommandBufferAllocateInfo*          pAllocateInfo,
+    VkCommandBuffer*                            pCommandBuffers);
+
+VKAPI_ATTR void VKAPI_CALL vkFreeCommandBuffers(
+    VkDevice                                    device,
+    VkCommandPool                               commandPool,
+    uint32_t                                    commandBufferCount,
+    const VkCommandBuffer*                      pCommandBuffers);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkBeginCommandBuffer(
+    VkCommandBuffer                             commandBuffer,
+    const VkCommandBufferBeginInfo*             pBeginInfo);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkEndCommandBuffer(
+    VkCommandBuffer                             commandBuffer);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandBuffer(
+    VkCommandBuffer                             commandBuffer,
+    VkCommandBufferResetFlags                   flags);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdBindPipeline(
+    VkCommandBuffer                             commandBuffer,
+    VkPipelineBindPoint                         pipelineBindPoint,
+    VkPipeline                                  pipeline);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetViewport(
+    VkCommandBuffer                             commandBuffer,
+    uint32_t                                    firstViewport,
+    uint32_t                                    viewportCount,
+    const VkViewport*                           pViewports);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetScissor(
+    VkCommandBuffer                             commandBuffer,
+    uint32_t                                    firstScissor,
+    uint32_t                                    scissorCount,
+    const VkRect2D*                             pScissors);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetLineWidth(
+    VkCommandBuffer                             commandBuffer,
+    float                                       lineWidth);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBias(
+    VkCommandBuffer                             commandBuffer,
+    float                                       depthBiasConstantFactor,
+    float                                       depthBiasClamp,
+    float                                       depthBiasSlopeFactor);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetBlendConstants(
+    VkCommandBuffer                             commandBuffer,
+    const float                                 blendConstants[4]);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBounds(
+    VkCommandBuffer                             commandBuffer,
+    float                                       minDepthBounds,
+    float                                       maxDepthBounds);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilCompareMask(
+    VkCommandBuffer                             commandBuffer,
+    VkStencilFaceFlags                          faceMask,
+    uint32_t                                    compareMask);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilWriteMask(
+    VkCommandBuffer                             commandBuffer,
+    VkStencilFaceFlags                          faceMask,
+    uint32_t                                    writeMask);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilReference(
+    VkCommandBuffer                             commandBuffer,
+    VkStencilFaceFlags                          faceMask,
+    uint32_t                                    reference);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorSets(
+    VkCommandBuffer                             commandBuffer,
+    VkPipelineBindPoint                         pipelineBindPoint,
+    VkPipelineLayout                            layout,
+    uint32_t                                    firstSet,
+    uint32_t                                    descriptorSetCount,
+    const VkDescriptorSet*                      pDescriptorSets,
+    uint32_t                                    dynamicOffsetCount,
+    const uint32_t*                             pDynamicOffsets);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdBindIndexBuffer(
+    VkCommandBuffer                             commandBuffer,
+    VkBuffer                                    buffer,
+    VkDeviceSize                                offset,
+    VkIndexType                                 indexType);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdBindVertexBuffers(
+    VkCommandBuffer                             commandBuffer,
+    uint32_t                                    firstBinding,
+    uint32_t                                    bindingCount,
+    const VkBuffer*                             pBuffers,
+    const VkDeviceSize*                         pOffsets);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdDraw(
+    VkCommandBuffer                             commandBuffer,
+    uint32_t                                    vertexCount,
+    uint32_t                                    instanceCount,
+    uint32_t                                    firstVertex,
+    uint32_t                                    firstInstance);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexed(
+    VkCommandBuffer                             commandBuffer,
+    uint32_t                                    indexCount,
+    uint32_t                                    instanceCount,
+    uint32_t                                    firstIndex,
+    int32_t                                     vertexOffset,
+    uint32_t                                    firstInstance);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirect(
+    VkCommandBuffer                             commandBuffer,
+    VkBuffer                                    buffer,
+    VkDeviceSize                                offset,
+    uint32_t                                    drawCount,
+    uint32_t                                    stride);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirect(
+    VkCommandBuffer                             commandBuffer,
+    VkBuffer                                    buffer,
+    VkDeviceSize                                offset,
+    uint32_t                                    drawCount,
+    uint32_t                                    stride);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdDispatch(
+    VkCommandBuffer                             commandBuffer,
+    uint32_t                                    groupCountX,
+    uint32_t                                    groupCountY,
+    uint32_t                                    groupCountZ);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdDispatchIndirect(
+    VkCommandBuffer                             commandBuffer,
+    VkBuffer                                    buffer,
+    VkDeviceSize                                offset);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdCopyBuffer(
+    VkCommandBuffer                             commandBuffer,
+    VkBuffer                                    srcBuffer,
+    VkBuffer                                    dstBuffer,
+    uint32_t                                    regionCount,
+    const VkBufferCopy*                         pRegions);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdCopyImage(
+    VkCommandBuffer                             commandBuffer,
+    VkImage                                     srcImage,
+    VkImageLayout                               srcImageLayout,
+    VkImage                                     dstImage,
+    VkImageLayout                               dstImageLayout,
+    uint32_t                                    regionCount,
+    const VkImageCopy*                          pRegions);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdBlitImage(
+    VkCommandBuffer                             commandBuffer,
+    VkImage                                     srcImage,
+    VkImageLayout                               srcImageLayout,
+    VkImage                                     dstImage,
+    VkImageLayout                               dstImageLayout,
+    uint32_t                                    regionCount,
+    const VkImageBlit*                          pRegions,
+    VkFilter                                    filter);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdCopyBufferToImage(
+    VkCommandBuffer                             commandBuffer,
+    VkBuffer                                    srcBuffer,
+    VkImage                                     dstImage,
+    VkImageLayout                               dstImageLayout,
+    uint32_t                                    regionCount,
+    const VkBufferImageCopy*                    pRegions);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdCopyImageToBuffer(
+    VkCommandBuffer                             commandBuffer,
+    VkImage                                     srcImage,
+    VkImageLayout                               srcImageLayout,
+    VkBuffer                                    dstBuffer,
+    uint32_t                                    regionCount,
+    const VkBufferImageCopy*                    pRegions);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdUpdateBuffer(
+    VkCommandBuffer                             commandBuffer,
+    VkBuffer                                    dstBuffer,
+    VkDeviceSize                                dstOffset,
+    VkDeviceSize                                dataSize,
+    const void*                                 pData);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdFillBuffer(
+    VkCommandBuffer                             commandBuffer,
+    VkBuffer                                    dstBuffer,
+    VkDeviceSize                                dstOffset,
+    VkDeviceSize                                size,
+    uint32_t                                    data);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdClearColorImage(
+    VkCommandBuffer                             commandBuffer,
+    VkImage                                     image,
+    VkImageLayout                               imageLayout,
+    const VkClearColorValue*                    pColor,
+    uint32_t                                    rangeCount,
+    const VkImageSubresourceRange*              pRanges);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdClearDepthStencilImage(
+    VkCommandBuffer                             commandBuffer,
+    VkImage                                     image,
+    VkImageLayout                               imageLayout,
+    const VkClearDepthStencilValue*             pDepthStencil,
+    uint32_t                                    rangeCount,
+    const VkImageSubresourceRange*              pRanges);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdClearAttachments(
+    VkCommandBuffer                             commandBuffer,
+    uint32_t                                    attachmentCount,
+    const VkClearAttachment*                    pAttachments,
+    uint32_t                                    rectCount,
+    const VkClearRect*                          pRects);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdResolveImage(
+    VkCommandBuffer                             commandBuffer,
+    VkImage                                     srcImage,
+    VkImageLayout                               srcImageLayout,
+    VkImage                                     dstImage,
+    VkImageLayout                               dstImageLayout,
+    uint32_t                                    regionCount,
+    const VkImageResolve*                       pRegions);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetEvent(
+    VkCommandBuffer                             commandBuffer,
+    VkEvent                                     event,
+    VkPipelineStageFlags                        stageMask);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdResetEvent(
+    VkCommandBuffer                             commandBuffer,
+    VkEvent                                     event,
+    VkPipelineStageFlags                        stageMask);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents(
+    VkCommandBuffer                             commandBuffer,
+    uint32_t                                    eventCount,
+    const VkEvent*                              pEvents,
+    VkPipelineStageFlags                        srcStageMask,
+    VkPipelineStageFlags                        dstStageMask,
+    uint32_t                                    memoryBarrierCount,
+    const VkMemoryBarrier*                      pMemoryBarriers,
+    uint32_t                                    bufferMemoryBarrierCount,
+    const VkBufferMemoryBarrier*                pBufferMemoryBarriers,
+    uint32_t                                    imageMemoryBarrierCount,
+    const VkImageMemoryBarrier*                 pImageMemoryBarriers);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdPipelineBarrier(
+    VkCommandBuffer                             commandBuffer,
+    VkPipelineStageFlags                        srcStageMask,
+    VkPipelineStageFlags                        dstStageMask,
+    VkDependencyFlags                           dependencyFlags,
+    uint32_t                                    memoryBarrierCount,
+    const VkMemoryBarrier*                      pMemoryBarriers,
+    uint32_t                                    bufferMemoryBarrierCount,
+    const VkBufferMemoryBarrier*                pBufferMemoryBarriers,
+    uint32_t                                    imageMemoryBarrierCount,
+    const VkImageMemoryBarrier*                 pImageMemoryBarriers);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdBeginQuery(
+    VkCommandBuffer                             commandBuffer,
+    VkQueryPool                                 queryPool,
+    uint32_t                                    query,
+    VkQueryControlFlags                         flags);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdEndQuery(
+    VkCommandBuffer                             commandBuffer,
+    VkQueryPool                                 queryPool,
+    uint32_t                                    query);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdResetQueryPool(
+    VkCommandBuffer                             commandBuffer,
+    VkQueryPool                                 queryPool,
+    uint32_t                                    firstQuery,
+    uint32_t                                    queryCount);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdWriteTimestamp(
+    VkCommandBuffer                             commandBuffer,
+    VkPipelineStageFlagBits                     pipelineStage,
+    VkQueryPool                                 queryPool,
+    uint32_t                                    query);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdCopyQueryPoolResults(
+    VkCommandBuffer                             commandBuffer,
+    VkQueryPool                                 queryPool,
+    uint32_t                                    firstQuery,
+    uint32_t                                    queryCount,
+    VkBuffer                                    dstBuffer,
+    VkDeviceSize                                dstOffset,
+    VkDeviceSize                                stride,
+    VkQueryResultFlags                          flags);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdPushConstants(
+    VkCommandBuffer                             commandBuffer,
+    VkPipelineLayout                            layout,
+    VkShaderStageFlags                          stageFlags,
+    uint32_t                                    offset,
+    uint32_t                                    size,
+    const void*                                 pValues);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderPass(
+    VkCommandBuffer                             commandBuffer,
+    const VkRenderPassBeginInfo*                pRenderPassBegin,
+    VkSubpassContents                           contents);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdNextSubpass(
+    VkCommandBuffer                             commandBuffer,
+    VkSubpassContents                           contents);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderPass(
+    VkCommandBuffer                             commandBuffer);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdExecuteCommands(
+    VkCommandBuffer                             commandBuffer,
+    uint32_t                                    commandBufferCount,
+    const VkCommandBuffer*                      pCommandBuffers);
+#endif
+
+
+#define VKSC_VERSION_1_0 1
+// Vulkan SC 1.0 version number
+#define VKSC_API_VERSION_1_0 VK_MAKE_VERSION(1, 0, 0)// Patch version should always be set to 0
+
+
+typedef enum VkFaultLevel {
+    VK_FAULT_LEVEL_UNASSIGNED = 0,
+    VK_FAULT_LEVEL_CRITICAL = 1,
+    VK_FAULT_LEVEL_RECOVERABLE = 2,
+    VK_FAULT_LEVEL_WARNING = 3,
+    VK_FAULT_LEVEL_UNASSIGNED_KHR = VK_FAULT_LEVEL_UNASSIGNED,
+    VK_FAULT_LEVEL_CRITICAL_KHR = VK_FAULT_LEVEL_CRITICAL,
+    VK_FAULT_LEVEL_RECOVERABLE_KHR = VK_FAULT_LEVEL_RECOVERABLE,
+    VK_FAULT_LEVEL_WARNING_KHR = VK_FAULT_LEVEL_WARNING,
+    VK_FAULT_LEVEL_MAX_ENUM = 0x7FFFFFFF
+} VkFaultLevel;
+
+typedef enum VkFaultType {
+    VK_FAULT_TYPE_INVALID = 0,
+    VK_FAULT_TYPE_UNASSIGNED = 1,
+    VK_FAULT_TYPE_IMPLEMENTATION = 2,
+    VK_FAULT_TYPE_SYSTEM = 3,
+    VK_FAULT_TYPE_PHYSICAL_DEVICE = 4,
+    VK_FAULT_TYPE_COMMAND_BUFFER_FULL = 5,
+    VK_FAULT_TYPE_INVALID_API_USAGE = 6,
+    VK_FAULT_TYPE_INVALID_KHR = VK_FAULT_TYPE_INVALID,
+    VK_FAULT_TYPE_UNASSIGNED_KHR = VK_FAULT_TYPE_UNASSIGNED,
+    VK_FAULT_TYPE_IMPLEMENTATION_KHR = VK_FAULT_TYPE_IMPLEMENTATION,
+    VK_FAULT_TYPE_SYSTEM_KHR = VK_FAULT_TYPE_SYSTEM,
+    VK_FAULT_TYPE_PHYSICAL_DEVICE_KHR = VK_FAULT_TYPE_PHYSICAL_DEVICE,
+    VK_FAULT_TYPE_COMMAND_BUFFER_FULL_KHR = VK_FAULT_TYPE_COMMAND_BUFFER_FULL,
+    VK_FAULT_TYPE_INVALID_API_USAGE_KHR = VK_FAULT_TYPE_INVALID_API_USAGE,
+    VK_FAULT_TYPE_MAX_ENUM = 0x7FFFFFFF
+} VkFaultType;
+
+typedef enum VkFaultQueryBehavior {
+    VK_FAULT_QUERY_BEHAVIOR_GET_AND_CLEAR_ALL_FAULTS = 0,
+    VK_FAULT_QUERY_BEHAVIOR_GET_AND_CLEAR_ALL_FAULTS_KHR = VK_FAULT_QUERY_BEHAVIOR_GET_AND_CLEAR_ALL_FAULTS,
+    VK_FAULT_QUERY_BEHAVIOR_MAX_ENUM = 0x7FFFFFFF
+} VkFaultQueryBehavior;
+
+typedef enum VkPipelineMatchControl {
+    VK_PIPELINE_MATCH_CONTROL_APPLICATION_UUID_EXACT_MATCH = 0,
+    VK_PIPELINE_MATCH_CONTROL_APPLICATION_UUID_EXACT_MATCH_KHR = VK_PIPELINE_MATCH_CONTROL_APPLICATION_UUID_EXACT_MATCH,
+    VK_PIPELINE_MATCH_CONTROL_MAX_ENUM = 0x7FFFFFFF
+} VkPipelineMatchControl;
+typedef struct VkPhysicalDeviceVulkanSC10Features {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           pipelineIdentifier;
+    VkBool32           shaderAtomicInstructions;
+} VkPhysicalDeviceVulkanSC10Features;
+
+typedef struct VkPhysicalDeviceVulkanSC10Properties {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           deviceDestroyFreesMemory;
+    VkBool32           commandPoolMultipleCommandBuffersRecording;
+    VkBool32           commandPoolResetCommandBuffer;
+    VkBool32           descriptorPoolFreeDescriptorSets;
+    VkBool32           externalSubpassDependencies;
+    VkBool32           recyclePipelineMemory;
+    uint32_t           maxSubpasses;
+    uint32_t           maxInputAttachments;
+    uint32_t           maxPreserveAttachments;
+    uint32_t           maxFramebufferAttachments;
+    uint32_t           maxQueryFaultCount;
+    uint32_t           maxCallbackFaultCount;
+    VkBool32           commandBufferSimultaneousUse;
+    VkBool32           secondaryCommandBufferNullFramebuffer;
+} VkPhysicalDeviceVulkanSC10Properties;
+
+typedef struct VkPipelinePoolSize {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkDeviceSize       poolEntrySize;
+    uint32_t           poolEntryCount;
+} VkPipelinePoolSize;
+
+typedef struct VkDeviceMemoryReservationCreateInfo {
+    VkStructureType                     sType;
+    const void*                         pNext;
+    uint32_t                            pipelineCacheCreateInfoCount;
+    const VkPipelineCacheCreateInfo*    pPipelineCacheCreateInfos;
+    uint32_t                            pipelinePoolSizeCount;
+    const VkPipelinePoolSize*           pPipelinePoolSizes;
+    uint32_t                            descriptorSetLayoutBindingCount;
+    uint32_t                            imageViewMaxMipLevels;
+    uint32_t                            imageViewMaxArrayLayers;
+    uint32_t                            layeredImageViewMaxMipLevels;
+    uint32_t                            semaphoreRequestCount;
+    uint32_t                            commandBufferRequestCount;
+    uint32_t                            fenceRequestCount;
+    uint32_t                            deviceMemoryRequestCount;
+    uint32_t                            bufferRequestCount;
+    uint32_t                            imageRequestCount;
+    uint32_t                            eventRequestCount;
+    uint32_t                            queryPoolRequestCount;
+    uint32_t                            bufferViewRequestCount;
+    uint32_t                            imageViewRequestCount;
+    uint32_t                            layeredImageViewRequestCount;
+    uint32_t                            pipelineLayoutRequestCount;
+    uint32_t                            renderPassRequestCount;
+    uint32_t                            graphicsPipelineRequestCount;
+    uint32_t                            computePipelineRequestCount;
+    uint32_t                            descriptorSetLayoutRequestCount;
+    uint32_t                            samplerRequestCount;
+    uint32_t                            descriptorPoolRequestCount;
+    uint32_t                            descriptorSetRequestCount;
+    uint32_t                            framebufferRequestCount;
+    uint32_t                            commandPoolRequestCount;
+    uint32_t                            samplerYcbcrConversionRequestCount;
+    uint32_t                            surfaceRequestCount;
+    uint32_t                            swapchainRequestCount;
+    uint32_t                            displayModeRequestCount;
+} VkDeviceMemoryReservationCreateInfo;
+
+typedef struct VkCommandPoolMemoryReservationCreateInfo {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkDeviceSize       commandPoolReservedSize;
+    uint32_t           commandPoolMaxCommandBuffers;
+} VkCommandPoolMemoryReservationCreateInfo;
+
+typedef struct VkCommandPoolMemoryConsumption {
+    VkStructureType    sType;
+    void*              pNext;
+    VkDeviceSize       commandPoolAllocated;
+    VkDeviceSize       commandPoolReservedSize;
+    VkDeviceSize       commandBufferAllocated;
+} VkCommandPoolMemoryConsumption;
+
+typedef struct VkPipelinePoolEntrySizeCreateInfo {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkDeviceSize       poolEntrySize;
+} VkPipelinePoolEntrySizeCreateInfo;
+
+typedef struct VkFaultData {
+    VkStructureType    sType;
+    void*              pNext;
+    VkFaultLevel       faultLevel;
+    VkFaultType        faultType;
+} VkFaultData;
+
+typedef void (VKAPI_PTR *PFN_vkFaultCallbackFunction)(
+    VkBool32                                    unrecordedFaults,
+    uint32_t                                    faultCount,
+    const VkFaultData*                          pFaults);
+
+typedef struct VkFaultCallbackInfo {
+    VkStructureType                sType;
+    void*                          pNext;
+    VkFaultData*                   pFaults;
+    PFN_vkFaultCallbackFunction    pfnFaultCallback;
+} VkFaultCallbackInfo;
+
+typedef struct VkPhysicalDeviceFaultHandlingProperties {
+    VkStructureType    sType;
+    void*              pNext;
+    uint32_t           maxQueryFaultCount;
+    uint32_t           maxCallbackFaultCount;
+} VkPhysicalDeviceFaultHandlingProperties;
+
+typedef struct VkPhysicalDevicePipelineIdentifierFeatures {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           pipelineIdentifier;
+} VkPhysicalDevicePipelineIdentifierFeatures;
+
+typedef struct VkPipelineIdentifierInfo {
+    VkStructureType           sType;
+    const void*               pNext;
+    uint8_t                   pipelineIdentifier[VK_UUID_SIZE];
+    VkPipelineMatchControl    matchControl;
+} VkPipelineIdentifierInfo;
+
+typedef void (VKAPI_PTR *PFN_vkGetCommandPoolMemoryConsumption)(VkDevice device, VkCommandPool commandPool, VkCommandBuffer commandBuffer, VkCommandPoolMemoryConsumption* pConsumption);
+typedef VkResult (VKAPI_PTR *PFN_vkGetFaultData)(VkDevice device, VkFaultQueryBehavior faultQueryBehavior, VkBool32* pUnrecordedFaults, uint32_t* pFaultCount, VkFaultData* pFaults);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkGetCommandPoolMemoryConsumption(
+    VkDevice                                    device,
+    VkCommandPool                               commandPool,
+    VkCommandBuffer                             commandBuffer,
+    VkCommandPoolMemoryConsumption*             pConsumption);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetFaultData(
+    VkDevice                                    device,
+    VkFaultQueryBehavior                        faultQueryBehavior,
+    VkBool32*                                   pUnrecordedFaults,
+    uint32_t*                                   pFaultCount,
+    VkFaultData*                                pFaults);
+#endif
+
+
+#define VK_VERSION_1_1 1
+// Vulkan 1.1 version number
+#define VK_API_VERSION_1_1 VK_MAKE_VERSION(1, 1, 0)// Patch version should always be set to 0
+
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSamplerYcbcrConversion)
+#define VK_MAX_DEVICE_GROUP_SIZE          32
+#define VK_LUID_SIZE                      8
+#define VK_QUEUE_FAMILY_EXTERNAL          (~0U-1)
+
+typedef enum VkPointClippingBehavior {
+    VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES = 0,
+    VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY = 1,
+    VK_POINT_CLIPPING_BEHAVIOR_MAX_ENUM = 0x7FFFFFFF
+} VkPointClippingBehavior;
+
+typedef enum VkTessellationDomainOrigin {
+    VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT = 0,
+    VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT = 1,
+    VK_TESSELLATION_DOMAIN_ORIGIN_MAX_ENUM = 0x7FFFFFFF
+} VkTessellationDomainOrigin;
+
+typedef enum VkSamplerYcbcrModelConversion {
+    VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY = 0,
+    VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY = 1,
+    VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709 = 2,
+    VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601 = 3,
+    VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020 = 4,
+    VK_SAMPLER_YCBCR_MODEL_CONVERSION_MAX_ENUM = 0x7FFFFFFF
+} VkSamplerYcbcrModelConversion;
+
+typedef enum VkSamplerYcbcrRange {
+    VK_SAMPLER_YCBCR_RANGE_ITU_FULL = 0,
+    VK_SAMPLER_YCBCR_RANGE_ITU_NARROW = 1,
+    VK_SAMPLER_YCBCR_RANGE_MAX_ENUM = 0x7FFFFFFF
+} VkSamplerYcbcrRange;
+
+typedef enum VkChromaLocation {
+    VK_CHROMA_LOCATION_COSITED_EVEN = 0,
+    VK_CHROMA_LOCATION_MIDPOINT = 1,
+    VK_CHROMA_LOCATION_MAX_ENUM = 0x7FFFFFFF
+} VkChromaLocation;
+
+typedef enum VkSubgroupFeatureFlagBits {
+    VK_SUBGROUP_FEATURE_BASIC_BIT = 0x00000001,
+    VK_SUBGROUP_FEATURE_VOTE_BIT = 0x00000002,
+    VK_SUBGROUP_FEATURE_ARITHMETIC_BIT = 0x00000004,
+    VK_SUBGROUP_FEATURE_BALLOT_BIT = 0x00000008,
+    VK_SUBGROUP_FEATURE_SHUFFLE_BIT = 0x00000010,
+    VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT = 0x00000020,
+    VK_SUBGROUP_FEATURE_CLUSTERED_BIT = 0x00000040,
+    VK_SUBGROUP_FEATURE_QUAD_BIT = 0x00000080,
+    VK_SUBGROUP_FEATURE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkSubgroupFeatureFlagBits;
+typedef VkFlags VkSubgroupFeatureFlags;
+
+typedef enum VkPeerMemoryFeatureFlagBits {
+    VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT = 0x00000001,
+    VK_PEER_MEMORY_FEATURE_COPY_DST_BIT = 0x00000002,
+    VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT = 0x00000004,
+    VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT = 0x00000008,
+    VK_PEER_MEMORY_FEATURE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkPeerMemoryFeatureFlagBits;
+typedef VkFlags VkPeerMemoryFeatureFlags;
+
+typedef enum VkMemoryAllocateFlagBits {
+    VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT = 0x00000001,
+    VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT = 0x00000002,
+    VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT = 0x00000004,
+    VK_MEMORY_ALLOCATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkMemoryAllocateFlagBits;
+typedef VkFlags VkMemoryAllocateFlags;
+
+typedef enum VkExternalMemoryHandleTypeFlagBits {
+    VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT = 0x00000001,
+    VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT = 0x00000002,
+    VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT = 0x00000004,
+    VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT = 0x00000008,
+    VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT = 0x00000010,
+    VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT = 0x00000020,
+    VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT = 0x00000040,
+    VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT = 0x00000200,
+    VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT = 0x00000080,
+    VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT = 0x00000100,
+    VK_EXTERNAL_MEMORY_HANDLE_TYPE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkExternalMemoryHandleTypeFlagBits;
+typedef VkFlags VkExternalMemoryHandleTypeFlags;
+
+typedef enum VkExternalMemoryFeatureFlagBits {
+    VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT = 0x00000001,
+    VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT = 0x00000002,
+    VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT = 0x00000004,
+    VK_EXTERNAL_MEMORY_FEATURE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkExternalMemoryFeatureFlagBits;
+typedef VkFlags VkExternalMemoryFeatureFlags;
+
+typedef enum VkExternalFenceHandleTypeFlagBits {
+    VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT = 0x00000001,
+    VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT = 0x00000002,
+    VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT = 0x00000004,
+    VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT = 0x00000008,
+    VK_EXTERNAL_FENCE_HANDLE_TYPE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkExternalFenceHandleTypeFlagBits;
+typedef VkFlags VkExternalFenceHandleTypeFlags;
+
+typedef enum VkExternalFenceFeatureFlagBits {
+    VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT = 0x00000001,
+    VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT = 0x00000002,
+    VK_EXTERNAL_FENCE_FEATURE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkExternalFenceFeatureFlagBits;
+typedef VkFlags VkExternalFenceFeatureFlags;
+
+typedef enum VkFenceImportFlagBits {
+    VK_FENCE_IMPORT_TEMPORARY_BIT = 0x00000001,
+    VK_FENCE_IMPORT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkFenceImportFlagBits;
+typedef VkFlags VkFenceImportFlags;
+
+typedef enum VkSemaphoreImportFlagBits {
+    VK_SEMAPHORE_IMPORT_TEMPORARY_BIT = 0x00000001,
+    VK_SEMAPHORE_IMPORT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkSemaphoreImportFlagBits;
+typedef VkFlags VkSemaphoreImportFlags;
+
+typedef enum VkExternalSemaphoreHandleTypeFlagBits {
+    VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT = 0x00000001,
+    VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT = 0x00000002,
+    VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT = 0x00000004,
+    VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT = 0x00000008,
+    VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT = 0x00000010,
+    VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_FENCE_BIT = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT,
+    VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkExternalSemaphoreHandleTypeFlagBits;
+typedef VkFlags VkExternalSemaphoreHandleTypeFlags;
+
+typedef enum VkExternalSemaphoreFeatureFlagBits {
+    VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT = 0x00000001,
+    VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT = 0x00000002,
+    VK_EXTERNAL_SEMAPHORE_FEATURE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkExternalSemaphoreFeatureFlagBits;
+typedef VkFlags VkExternalSemaphoreFeatureFlags;
+typedef struct VkPhysicalDeviceSubgroupProperties {
+    VkStructureType           sType;
+    void*                     pNext;
+    uint32_t                  subgroupSize;
+    VkShaderStageFlags        supportedStages;
+    VkSubgroupFeatureFlags    supportedOperations;
+    VkBool32                  quadOperationsInAllStages;
+} VkPhysicalDeviceSubgroupProperties;
+
+typedef struct VkBindBufferMemoryInfo {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkBuffer           buffer;
+    VkDeviceMemory     memory;
+    VkDeviceSize       memoryOffset;
+} VkBindBufferMemoryInfo;
+
+typedef struct VkBindImageMemoryInfo {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkImage            image;
+    VkDeviceMemory     memory;
+    VkDeviceSize       memoryOffset;
+} VkBindImageMemoryInfo;
+
+typedef struct VkPhysicalDevice16BitStorageFeatures {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           storageBuffer16BitAccess;
+    VkBool32           uniformAndStorageBuffer16BitAccess;
+    VkBool32           storagePushConstant16;
+    VkBool32           storageInputOutput16;
+} VkPhysicalDevice16BitStorageFeatures;
+
+typedef struct VkMemoryDedicatedRequirements {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           prefersDedicatedAllocation;
+    VkBool32           requiresDedicatedAllocation;
+} VkMemoryDedicatedRequirements;
+
+typedef struct VkMemoryDedicatedAllocateInfo {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkImage            image;
+    VkBuffer           buffer;
+} VkMemoryDedicatedAllocateInfo;
+
+typedef struct VkMemoryAllocateFlagsInfo {
+    VkStructureType          sType;
+    const void*              pNext;
+    VkMemoryAllocateFlags    flags;
+    uint32_t                 deviceMask;
+} VkMemoryAllocateFlagsInfo;
+
+typedef struct VkDeviceGroupRenderPassBeginInfo {
+    VkStructureType    sType;
+    const void*        pNext;
+    uint32_t           deviceMask;
+    uint32_t           deviceRenderAreaCount;
+    const VkRect2D*    pDeviceRenderAreas;
+} VkDeviceGroupRenderPassBeginInfo;
+
+typedef struct VkDeviceGroupCommandBufferBeginInfo {
+    VkStructureType    sType;
+    const void*        pNext;
+    uint32_t           deviceMask;
+} VkDeviceGroupCommandBufferBeginInfo;
+
+typedef struct VkDeviceGroupSubmitInfo {
+    VkStructureType    sType;
+    const void*        pNext;
+    uint32_t           waitSemaphoreCount;
+    const uint32_t*    pWaitSemaphoreDeviceIndices;
+    uint32_t           commandBufferCount;
+    const uint32_t*    pCommandBufferDeviceMasks;
+    uint32_t           signalSemaphoreCount;
+    const uint32_t*    pSignalSemaphoreDeviceIndices;
+} VkDeviceGroupSubmitInfo;
+
+typedef struct VkDeviceGroupBindSparseInfo {
+    VkStructureType    sType;
+    const void*        pNext;
+    uint32_t           resourceDeviceIndex;
+    uint32_t           memoryDeviceIndex;
+} VkDeviceGroupBindSparseInfo;
+
+typedef struct VkBindBufferMemoryDeviceGroupInfo {
+    VkStructureType    sType;
+    const void*        pNext;
+    uint32_t           deviceIndexCount;
+    const uint32_t*    pDeviceIndices;
+} VkBindBufferMemoryDeviceGroupInfo;
+
+typedef struct VkBindImageMemoryDeviceGroupInfo {
+    VkStructureType    sType;
+    const void*        pNext;
+    uint32_t           deviceIndexCount;
+    const uint32_t*    pDeviceIndices;
+    uint32_t           splitInstanceBindRegionCount;
+    const VkRect2D*    pSplitInstanceBindRegions;
+} VkBindImageMemoryDeviceGroupInfo;
+
+typedef struct VkPhysicalDeviceGroupProperties {
+    VkStructureType     sType;
+    void*               pNext;
+    uint32_t            physicalDeviceCount;
+    VkPhysicalDevice    physicalDevices[VK_MAX_DEVICE_GROUP_SIZE];
+    VkBool32            subsetAllocation;
+} VkPhysicalDeviceGroupProperties;
+
+typedef struct VkDeviceGroupDeviceCreateInfo {
+    VkStructureType            sType;
+    const void*                pNext;
+    uint32_t                   physicalDeviceCount;
+    const VkPhysicalDevice*    pPhysicalDevices;
+} VkDeviceGroupDeviceCreateInfo;
+
+typedef struct VkBufferMemoryRequirementsInfo2 {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkBuffer           buffer;
+} VkBufferMemoryRequirementsInfo2;
+
+typedef struct VkImageMemoryRequirementsInfo2 {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkImage            image;
+} VkImageMemoryRequirementsInfo2;
+
+typedef struct VkImageSparseMemoryRequirementsInfo2 {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkImage            image;
+} VkImageSparseMemoryRequirementsInfo2;
+
+typedef struct VkMemoryRequirements2 {
+    VkStructureType         sType;
+    void*                   pNext;
+    VkMemoryRequirements    memoryRequirements;
+} VkMemoryRequirements2;
+
+typedef struct VkSparseImageMemoryRequirements2 {
+    VkStructureType                    sType;
+    void*                              pNext;
+    VkSparseImageMemoryRequirements    memoryRequirements;
+} VkSparseImageMemoryRequirements2;
+
+typedef struct VkPhysicalDeviceFeatures2 {
+    VkStructureType             sType;
+    void*                       pNext;
+    VkPhysicalDeviceFeatures    features;
+} VkPhysicalDeviceFeatures2;
+
+typedef struct VkPhysicalDeviceProperties2 {
+    VkStructureType               sType;
+    void*                         pNext;
+    VkPhysicalDeviceProperties    properties;
+} VkPhysicalDeviceProperties2;
+
+typedef struct VkFormatProperties2 {
+    VkStructureType       sType;
+    void*                 pNext;
+    VkFormatProperties    formatProperties;
+} VkFormatProperties2;
+
+typedef struct VkImageFormatProperties2 {
+    VkStructureType            sType;
+    void*                      pNext;
+    VkImageFormatProperties    imageFormatProperties;
+} VkImageFormatProperties2;
+
+typedef struct VkPhysicalDeviceImageFormatInfo2 {
+    VkStructureType       sType;
+    const void*           pNext;
+    VkFormat              format;
+    VkImageType           type;
+    VkImageTiling         tiling;
+    VkImageUsageFlags     usage;
+    VkImageCreateFlags    flags;
+} VkPhysicalDeviceImageFormatInfo2;
+
+typedef struct VkQueueFamilyProperties2 {
+    VkStructureType            sType;
+    void*                      pNext;
+    VkQueueFamilyProperties    queueFamilyProperties;
+} VkQueueFamilyProperties2;
+
+typedef struct VkPhysicalDeviceMemoryProperties2 {
+    VkStructureType                     sType;
+    void*                               pNext;
+    VkPhysicalDeviceMemoryProperties    memoryProperties;
+} VkPhysicalDeviceMemoryProperties2;
+
+typedef struct VkSparseImageFormatProperties2 {
+    VkStructureType                  sType;
+    void*                            pNext;
+    VkSparseImageFormatProperties    properties;
+} VkSparseImageFormatProperties2;
+
+typedef struct VkPhysicalDeviceSparseImageFormatInfo2 {
+    VkStructureType          sType;
+    const void*              pNext;
+    VkFormat                 format;
+    VkImageType              type;
+    VkSampleCountFlagBits    samples;
+    VkImageUsageFlags        usage;
+    VkImageTiling            tiling;
+} VkPhysicalDeviceSparseImageFormatInfo2;
+
+typedef struct VkPhysicalDevicePointClippingProperties {
+    VkStructureType            sType;
+    void*                      pNext;
+    VkPointClippingBehavior    pointClippingBehavior;
+} VkPhysicalDevicePointClippingProperties;
+
+typedef struct VkInputAttachmentAspectReference {
+    uint32_t              subpass;
+    uint32_t              inputAttachmentIndex;
+    VkImageAspectFlags    aspectMask;
+} VkInputAttachmentAspectReference;
+
+typedef struct VkRenderPassInputAttachmentAspectCreateInfo {
+    VkStructureType                            sType;
+    const void*                                pNext;
+    uint32_t                                   aspectReferenceCount;
+    const VkInputAttachmentAspectReference*    pAspectReferences;
+} VkRenderPassInputAttachmentAspectCreateInfo;
+
+typedef struct VkImageViewUsageCreateInfo {
+    VkStructureType      sType;
+    const void*          pNext;
+    VkImageUsageFlags    usage;
+} VkImageViewUsageCreateInfo;
+
+typedef struct VkPipelineTessellationDomainOriginStateCreateInfo {
+    VkStructureType               sType;
+    const void*                   pNext;
+    VkTessellationDomainOrigin    domainOrigin;
+} VkPipelineTessellationDomainOriginStateCreateInfo;
+
+typedef struct VkRenderPassMultiviewCreateInfo {
+    VkStructureType    sType;
+    const void*        pNext;
+    uint32_t           subpassCount;
+    const uint32_t*    pViewMasks;
+    uint32_t           dependencyCount;
+    const int32_t*     pViewOffsets;
+    uint32_t           correlationMaskCount;
+    const uint32_t*    pCorrelationMasks;
+} VkRenderPassMultiviewCreateInfo;
+
+typedef struct VkPhysicalDeviceMultiviewFeatures {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           multiview;
+    VkBool32           multiviewGeometryShader;
+    VkBool32           multiviewTessellationShader;
+} VkPhysicalDeviceMultiviewFeatures;
+
+typedef struct VkPhysicalDeviceMultiviewProperties {
+    VkStructureType    sType;
+    void*              pNext;
+    uint32_t           maxMultiviewViewCount;
+    uint32_t           maxMultiviewInstanceIndex;
+} VkPhysicalDeviceMultiviewProperties;
+
+typedef struct VkPhysicalDeviceVariablePointersFeatures {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           variablePointersStorageBuffer;
+    VkBool32           variablePointers;
+} VkPhysicalDeviceVariablePointersFeatures;
+
+typedef VkPhysicalDeviceVariablePointersFeatures VkPhysicalDeviceVariablePointerFeatures;
+
+typedef struct VkPhysicalDeviceProtectedMemoryFeatures {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           protectedMemory;
+} VkPhysicalDeviceProtectedMemoryFeatures;
+
+typedef struct VkPhysicalDeviceProtectedMemoryProperties {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           protectedNoFault;
+} VkPhysicalDeviceProtectedMemoryProperties;
+
+typedef struct VkDeviceQueueInfo2 {
+    VkStructureType             sType;
+    const void*                 pNext;
+    VkDeviceQueueCreateFlags    flags;
+    uint32_t                    queueFamilyIndex;
+    uint32_t                    queueIndex;
+} VkDeviceQueueInfo2;
+
+typedef struct VkProtectedSubmitInfo {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkBool32           protectedSubmit;
+} VkProtectedSubmitInfo;
+
+typedef struct VkSamplerYcbcrConversionCreateInfo {
+    VkStructureType                  sType;
+    const void*                      pNext;
+    VkFormat                         format;
+    VkSamplerYcbcrModelConversion    ycbcrModel;
+    VkSamplerYcbcrRange              ycbcrRange;
+    VkComponentMapping               components;
+    VkChromaLocation                 xChromaOffset;
+    VkChromaLocation                 yChromaOffset;
+    VkFilter                         chromaFilter;
+    VkBool32                         forceExplicitReconstruction;
+} VkSamplerYcbcrConversionCreateInfo;
+
+typedef struct VkSamplerYcbcrConversionInfo {
+    VkStructureType             sType;
+    const void*                 pNext;
+    VkSamplerYcbcrConversion    conversion;
+} VkSamplerYcbcrConversionInfo;
+
+typedef struct VkBindImagePlaneMemoryInfo {
+    VkStructureType          sType;
+    const void*              pNext;
+    VkImageAspectFlagBits    planeAspect;
+} VkBindImagePlaneMemoryInfo;
+
+typedef struct VkImagePlaneMemoryRequirementsInfo {
+    VkStructureType          sType;
+    const void*              pNext;
+    VkImageAspectFlagBits    planeAspect;
+} VkImagePlaneMemoryRequirementsInfo;
+
+typedef struct VkPhysicalDeviceSamplerYcbcrConversionFeatures {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           samplerYcbcrConversion;
+} VkPhysicalDeviceSamplerYcbcrConversionFeatures;
+
+typedef struct VkSamplerYcbcrConversionImageFormatProperties {
+    VkStructureType    sType;
+    void*              pNext;
+    uint32_t           combinedImageSamplerDescriptorCount;
+} VkSamplerYcbcrConversionImageFormatProperties;
+
+typedef struct VkExternalMemoryProperties {
+    VkExternalMemoryFeatureFlags       externalMemoryFeatures;
+    VkExternalMemoryHandleTypeFlags    exportFromImportedHandleTypes;
+    VkExternalMemoryHandleTypeFlags    compatibleHandleTypes;
+} VkExternalMemoryProperties;
+
+typedef struct VkPhysicalDeviceExternalImageFormatInfo {
+    VkStructureType                       sType;
+    const void*                           pNext;
+    VkExternalMemoryHandleTypeFlagBits    handleType;
+} VkPhysicalDeviceExternalImageFormatInfo;
+
+typedef struct VkExternalImageFormatProperties {
+    VkStructureType               sType;
+    void*                         pNext;
+    VkExternalMemoryProperties    externalMemoryProperties;
+} VkExternalImageFormatProperties;
+
+typedef struct VkPhysicalDeviceExternalBufferInfo {
+    VkStructureType                       sType;
+    const void*                           pNext;
+    VkBufferCreateFlags                   flags;
+    VkBufferUsageFlags                    usage;
+    VkExternalMemoryHandleTypeFlagBits    handleType;
+} VkPhysicalDeviceExternalBufferInfo;
+
+typedef struct VkExternalBufferProperties {
+    VkStructureType               sType;
+    void*                         pNext;
+    VkExternalMemoryProperties    externalMemoryProperties;
+} VkExternalBufferProperties;
+
+typedef struct VkPhysicalDeviceIDProperties {
+    VkStructureType    sType;
+    void*              pNext;
+    uint8_t            deviceUUID[VK_UUID_SIZE];
+    uint8_t            driverUUID[VK_UUID_SIZE];
+    uint8_t            deviceLUID[VK_LUID_SIZE];
+    uint32_t           deviceNodeMask;
+    VkBool32           deviceLUIDValid;
+} VkPhysicalDeviceIDProperties;
+
+typedef struct VkExternalMemoryImageCreateInfo {
+    VkStructureType                    sType;
+    const void*                        pNext;
+    VkExternalMemoryHandleTypeFlags    handleTypes;
+} VkExternalMemoryImageCreateInfo;
+
+typedef struct VkExternalMemoryBufferCreateInfo {
+    VkStructureType                    sType;
+    const void*                        pNext;
+    VkExternalMemoryHandleTypeFlags    handleTypes;
+} VkExternalMemoryBufferCreateInfo;
+
+typedef struct VkExportMemoryAllocateInfo {
+    VkStructureType                    sType;
+    const void*                        pNext;
+    VkExternalMemoryHandleTypeFlags    handleTypes;
+} VkExportMemoryAllocateInfo;
+
+typedef struct VkPhysicalDeviceExternalFenceInfo {
+    VkStructureType                      sType;
+    const void*                          pNext;
+    VkExternalFenceHandleTypeFlagBits    handleType;
+} VkPhysicalDeviceExternalFenceInfo;
+
+typedef struct VkExternalFenceProperties {
+    VkStructureType                   sType;
+    void*                             pNext;
+    VkExternalFenceHandleTypeFlags    exportFromImportedHandleTypes;
+    VkExternalFenceHandleTypeFlags    compatibleHandleTypes;
+    VkExternalFenceFeatureFlags       externalFenceFeatures;
+} VkExternalFenceProperties;
+
+typedef struct VkExportFenceCreateInfo {
+    VkStructureType                   sType;
+    const void*                       pNext;
+    VkExternalFenceHandleTypeFlags    handleTypes;
+} VkExportFenceCreateInfo;
+
+typedef struct VkExportSemaphoreCreateInfo {
+    VkStructureType                       sType;
+    const void*                           pNext;
+    VkExternalSemaphoreHandleTypeFlags    handleTypes;
+} VkExportSemaphoreCreateInfo;
+
+typedef struct VkPhysicalDeviceExternalSemaphoreInfo {
+    VkStructureType                          sType;
+    const void*                              pNext;
+    VkExternalSemaphoreHandleTypeFlagBits    handleType;
+} VkPhysicalDeviceExternalSemaphoreInfo;
+
+typedef struct VkExternalSemaphoreProperties {
+    VkStructureType                       sType;
+    void*                                 pNext;
+    VkExternalSemaphoreHandleTypeFlags    exportFromImportedHandleTypes;
+    VkExternalSemaphoreHandleTypeFlags    compatibleHandleTypes;
+    VkExternalSemaphoreFeatureFlags       externalSemaphoreFeatures;
+} VkExternalSemaphoreProperties;
+
+typedef struct VkPhysicalDeviceMaintenance3Properties {
+    VkStructureType    sType;
+    void*              pNext;
+    uint32_t           maxPerSetDescriptors;
+    VkDeviceSize       maxMemoryAllocationSize;
+} VkPhysicalDeviceMaintenance3Properties;
+
+typedef struct VkDescriptorSetLayoutSupport {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           supported;
+} VkDescriptorSetLayoutSupport;
+
+typedef struct VkPhysicalDeviceShaderDrawParametersFeatures {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           shaderDrawParameters;
+} VkPhysicalDeviceShaderDrawParametersFeatures;
+
+typedef VkPhysicalDeviceShaderDrawParametersFeatures VkPhysicalDeviceShaderDrawParameterFeatures;
+
+typedef VkResult (VKAPI_PTR *PFN_vkEnumerateInstanceVersion)(uint32_t* pApiVersion);
+typedef VkResult (VKAPI_PTR *PFN_vkBindBufferMemory2)(VkDevice device, uint32_t bindInfoCount, const VkBindBufferMemoryInfo* pBindInfos);
+typedef VkResult (VKAPI_PTR *PFN_vkBindImageMemory2)(VkDevice device, uint32_t bindInfoCount, const VkBindImageMemoryInfo* pBindInfos);
+typedef void (VKAPI_PTR *PFN_vkGetDeviceGroupPeerMemoryFeatures)(VkDevice device, uint32_t heapIndex, uint32_t localDeviceIndex, uint32_t remoteDeviceIndex, VkPeerMemoryFeatureFlags* pPeerMemoryFeatures);
+typedef void (VKAPI_PTR *PFN_vkCmdSetDeviceMask)(VkCommandBuffer commandBuffer, uint32_t deviceMask);
+typedef void (VKAPI_PTR *PFN_vkCmdDispatchBase)(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ);
+typedef VkResult (VKAPI_PTR *PFN_vkEnumeratePhysicalDeviceGroups)(VkInstance instance, uint32_t* pPhysicalDeviceGroupCount, VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties);
+typedef void (VKAPI_PTR *PFN_vkGetImageMemoryRequirements2)(VkDevice device, const VkImageMemoryRequirementsInfo2* pInfo, VkMemoryRequirements2* pMemoryRequirements);
+typedef void (VKAPI_PTR *PFN_vkGetBufferMemoryRequirements2)(VkDevice device, const VkBufferMemoryRequirementsInfo2* pInfo, VkMemoryRequirements2* pMemoryRequirements);
+typedef void (VKAPI_PTR *PFN_vkGetImageSparseMemoryRequirements2)(VkDevice device, const VkImageSparseMemoryRequirementsInfo2* pInfo, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2* pSparseMemoryRequirements);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceFeatures2)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures2* pFeatures);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceProperties2)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties2* pProperties);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceFormatProperties2)(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties2* pFormatProperties);
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceImageFormatProperties2)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo, VkImageFormatProperties2* pImageFormatProperties);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceQueueFamilyProperties2)(VkPhysicalDevice physicalDevice, uint32_t* pQueueFamilyPropertyCount, VkQueueFamilyProperties2* pQueueFamilyProperties);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceMemoryProperties2)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties2* pMemoryProperties);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceSparseImageFormatProperties2)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo, uint32_t* pPropertyCount, VkSparseImageFormatProperties2* pProperties);
+typedef void (VKAPI_PTR *PFN_vkGetDeviceQueue2)(VkDevice device, const VkDeviceQueueInfo2* pQueueInfo, VkQueue* pQueue);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateSamplerYcbcrConversion)(VkDevice device, const VkSamplerYcbcrConversionCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSamplerYcbcrConversion* pYcbcrConversion);
+typedef void (VKAPI_PTR *PFN_vkDestroySamplerYcbcrConversion)(VkDevice device, VkSamplerYcbcrConversion ycbcrConversion, const VkAllocationCallbacks* pAllocator);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalBufferProperties)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo, VkExternalBufferProperties* pExternalBufferProperties);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalFenceProperties)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo, VkExternalFenceProperties* pExternalFenceProperties);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalSemaphoreProperties)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo, VkExternalSemaphoreProperties* pExternalSemaphoreProperties);
+typedef void (VKAPI_PTR *PFN_vkGetDescriptorSetLayoutSupport)(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, VkDescriptorSetLayoutSupport* pSupport);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceVersion(
+    uint32_t*                                   pApiVersion);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkBindBufferMemory2(
+    VkDevice                                    device,
+    uint32_t                                    bindInfoCount,
+    const VkBindBufferMemoryInfo*               pBindInfos);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkBindImageMemory2(
+    VkDevice                                    device,
+    uint32_t                                    bindInfoCount,
+    const VkBindImageMemoryInfo*                pBindInfos);
+
+VKAPI_ATTR void VKAPI_CALL vkGetDeviceGroupPeerMemoryFeatures(
+    VkDevice                                    device,
+    uint32_t                                    heapIndex,
+    uint32_t                                    localDeviceIndex,
+    uint32_t                                    remoteDeviceIndex,
+    VkPeerMemoryFeatureFlags*                   pPeerMemoryFeatures);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetDeviceMask(
+    VkCommandBuffer                             commandBuffer,
+    uint32_t                                    deviceMask);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdDispatchBase(
+    VkCommandBuffer                             commandBuffer,
+    uint32_t                                    baseGroupX,
+    uint32_t                                    baseGroupY,
+    uint32_t                                    baseGroupZ,
+    uint32_t                                    groupCountX,
+    uint32_t                                    groupCountY,
+    uint32_t                                    groupCountZ);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDeviceGroups(
+    VkInstance                                  instance,
+    uint32_t*                                   pPhysicalDeviceGroupCount,
+    VkPhysicalDeviceGroupProperties*            pPhysicalDeviceGroupProperties);
+
+VKAPI_ATTR void VKAPI_CALL vkGetImageMemoryRequirements2(
+    VkDevice                                    device,
+    const VkImageMemoryRequirementsInfo2*       pInfo,
+    VkMemoryRequirements2*                      pMemoryRequirements);
+
+VKAPI_ATTR void VKAPI_CALL vkGetBufferMemoryRequirements2(
+    VkDevice                                    device,
+    const VkBufferMemoryRequirementsInfo2*      pInfo,
+    VkMemoryRequirements2*                      pMemoryRequirements);
+
+VKAPI_ATTR void VKAPI_CALL vkGetImageSparseMemoryRequirements2(
+    VkDevice                                    device,
+    const VkImageSparseMemoryRequirementsInfo2* pInfo,
+    uint32_t*                                   pSparseMemoryRequirementCount,
+    VkSparseImageMemoryRequirements2*           pSparseMemoryRequirements);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFeatures2(
+    VkPhysicalDevice                            physicalDevice,
+    VkPhysicalDeviceFeatures2*                  pFeatures);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceProperties2(
+    VkPhysicalDevice                            physicalDevice,
+    VkPhysicalDeviceProperties2*                pProperties);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFormatProperties2(
+    VkPhysicalDevice                            physicalDevice,
+    VkFormat                                    format,
+    VkFormatProperties2*                        pFormatProperties);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceImageFormatProperties2(
+    VkPhysicalDevice                            physicalDevice,
+    const VkPhysicalDeviceImageFormatInfo2*     pImageFormatInfo,
+    VkImageFormatProperties2*                   pImageFormatProperties);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyProperties2(
+    VkPhysicalDevice                            physicalDevice,
+    uint32_t*                                   pQueueFamilyPropertyCount,
+    VkQueueFamilyProperties2*                   pQueueFamilyProperties);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMemoryProperties2(
+    VkPhysicalDevice                            physicalDevice,
+    VkPhysicalDeviceMemoryProperties2*          pMemoryProperties);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceSparseImageFormatProperties2(
+    VkPhysicalDevice                            physicalDevice,
+    const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo,
+    uint32_t*                                   pPropertyCount,
+    VkSparseImageFormatProperties2*             pProperties);
+
+VKAPI_ATTR void VKAPI_CALL vkGetDeviceQueue2(
+    VkDevice                                    device,
+    const VkDeviceQueueInfo2*                   pQueueInfo,
+    VkQueue*                                    pQueue);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateSamplerYcbcrConversion(
+    VkDevice                                    device,
+    const VkSamplerYcbcrConversionCreateInfo*   pCreateInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkSamplerYcbcrConversion*                   pYcbcrConversion);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroySamplerYcbcrConversion(
+    VkDevice                                    device,
+    VkSamplerYcbcrConversion                    ycbcrConversion,
+    const VkAllocationCallbacks*                pAllocator);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalBufferProperties(
+    VkPhysicalDevice                            physicalDevice,
+    const VkPhysicalDeviceExternalBufferInfo*   pExternalBufferInfo,
+    VkExternalBufferProperties*                 pExternalBufferProperties);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalFenceProperties(
+    VkPhysicalDevice                            physicalDevice,
+    const VkPhysicalDeviceExternalFenceInfo*    pExternalFenceInfo,
+    VkExternalFenceProperties*                  pExternalFenceProperties);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalSemaphoreProperties(
+    VkPhysicalDevice                            physicalDevice,
+    const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo,
+    VkExternalSemaphoreProperties*              pExternalSemaphoreProperties);
+
+VKAPI_ATTR void VKAPI_CALL vkGetDescriptorSetLayoutSupport(
+    VkDevice                                    device,
+    const VkDescriptorSetLayoutCreateInfo*      pCreateInfo,
+    VkDescriptorSetLayoutSupport*               pSupport);
+#endif
+
+
+#define VK_VERSION_1_2 1
+// Vulkan 1.2 version number
+#define VK_API_VERSION_1_2 VK_MAKE_VERSION(1, 2, 0)// Patch version should always be set to 0
+
+#define VK_MAX_DRIVER_NAME_SIZE           256
+#define VK_MAX_DRIVER_INFO_SIZE           256
+
+typedef enum VkDriverId {
+    VK_DRIVER_ID_AMD_PROPRIETARY = 1,
+    VK_DRIVER_ID_AMD_OPEN_SOURCE = 2,
+    VK_DRIVER_ID_MESA_RADV = 3,
+    VK_DRIVER_ID_NVIDIA_PROPRIETARY = 4,
+    VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS = 5,
+    VK_DRIVER_ID_INTEL_OPEN_SOURCE_MESA = 6,
+    VK_DRIVER_ID_IMAGINATION_PROPRIETARY = 7,
+    VK_DRIVER_ID_QUALCOMM_PROPRIETARY = 8,
+    VK_DRIVER_ID_ARM_PROPRIETARY = 9,
+    VK_DRIVER_ID_GOOGLE_SWIFTSHADER = 10,
+    VK_DRIVER_ID_GGP_PROPRIETARY = 11,
+    VK_DRIVER_ID_BROADCOM_PROPRIETARY = 12,
+    VK_DRIVER_ID_MESA_LLVMPIPE = 13,
+    VK_DRIVER_ID_MOLTENVK = 14,
+    VK_DRIVER_ID_MAX_ENUM = 0x7FFFFFFF
+} VkDriverId;
+
+typedef enum VkShaderFloatControlsIndependence {
+    VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY = 0,
+    VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL = 1,
+    VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE = 2,
+    VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_MAX_ENUM = 0x7FFFFFFF
+} VkShaderFloatControlsIndependence;
+
+typedef enum VkSamplerReductionMode {
+    VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE = 0,
+    VK_SAMPLER_REDUCTION_MODE_MIN = 1,
+    VK_SAMPLER_REDUCTION_MODE_MAX = 2,
+    VK_SAMPLER_REDUCTION_MODE_MAX_ENUM = 0x7FFFFFFF
+} VkSamplerReductionMode;
+
+typedef enum VkSemaphoreType {
+    VK_SEMAPHORE_TYPE_BINARY = 0,
+    VK_SEMAPHORE_TYPE_TIMELINE = 1,
+    VK_SEMAPHORE_TYPE_MAX_ENUM = 0x7FFFFFFF
+} VkSemaphoreType;
+
+typedef enum VkResolveModeFlagBits {
+    VK_RESOLVE_MODE_NONE = 0,
+    VK_RESOLVE_MODE_SAMPLE_ZERO_BIT = 0x00000001,
+    VK_RESOLVE_MODE_AVERAGE_BIT = 0x00000002,
+    VK_RESOLVE_MODE_MIN_BIT = 0x00000004,
+    VK_RESOLVE_MODE_MAX_BIT = 0x00000008,
+    VK_RESOLVE_MODE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkResolveModeFlagBits;
+typedef VkFlags VkResolveModeFlags;
+
+typedef enum VkDescriptorBindingFlagBits {
+    VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT = 0x00000001,
+    VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT = 0x00000002,
+    VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT = 0x00000004,
+    VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT = 0x00000008,
+    VK_DESCRIPTOR_BINDING_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkDescriptorBindingFlagBits;
+typedef VkFlags VkDescriptorBindingFlags;
+
+typedef enum VkSemaphoreWaitFlagBits {
+    VK_SEMAPHORE_WAIT_ANY_BIT = 0x00000001,
+    VK_SEMAPHORE_WAIT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkSemaphoreWaitFlagBits;
+typedef VkFlags VkSemaphoreWaitFlags;
+typedef struct VkPhysicalDeviceVulkan11Features {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           storageBuffer16BitAccess;
+    VkBool32           uniformAndStorageBuffer16BitAccess;
+    VkBool32           storagePushConstant16;
+    VkBool32           storageInputOutput16;
+    VkBool32           multiview;
+    VkBool32           multiviewGeometryShader;
+    VkBool32           multiviewTessellationShader;
+    VkBool32           variablePointersStorageBuffer;
+    VkBool32           variablePointers;
+    VkBool32           protectedMemory;
+    VkBool32           samplerYcbcrConversion;
+    VkBool32           shaderDrawParameters;
+} VkPhysicalDeviceVulkan11Features;
+
+typedef struct VkPhysicalDeviceVulkan11Properties {
+    VkStructureType            sType;
+    void*                      pNext;
+    uint8_t                    deviceUUID[VK_UUID_SIZE];
+    uint8_t                    driverUUID[VK_UUID_SIZE];
+    uint8_t                    deviceLUID[VK_LUID_SIZE];
+    uint32_t                   deviceNodeMask;
+    VkBool32                   deviceLUIDValid;
+    uint32_t                   subgroupSize;
+    VkShaderStageFlags         subgroupSupportedStages;
+    VkSubgroupFeatureFlags     subgroupSupportedOperations;
+    VkBool32                   subgroupQuadOperationsInAllStages;
+    VkPointClippingBehavior    pointClippingBehavior;
+    uint32_t                   maxMultiviewViewCount;
+    uint32_t                   maxMultiviewInstanceIndex;
+    VkBool32                   protectedNoFault;
+    uint32_t                   maxPerSetDescriptors;
+    VkDeviceSize               maxMemoryAllocationSize;
+} VkPhysicalDeviceVulkan11Properties;
+
+typedef struct VkPhysicalDeviceVulkan12Features {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           samplerMirrorClampToEdge;
+    VkBool32           drawIndirectCount;
+    VkBool32           storageBuffer8BitAccess;
+    VkBool32           uniformAndStorageBuffer8BitAccess;
+    VkBool32           storagePushConstant8;
+    VkBool32           shaderBufferInt64Atomics;
+    VkBool32           shaderSharedInt64Atomics;
+    VkBool32           shaderFloat16;
+    VkBool32           shaderInt8;
+    VkBool32           descriptorIndexing;
+    VkBool32           shaderInputAttachmentArrayDynamicIndexing;
+    VkBool32           shaderUniformTexelBufferArrayDynamicIndexing;
+    VkBool32           shaderStorageTexelBufferArrayDynamicIndexing;
+    VkBool32           shaderUniformBufferArrayNonUniformIndexing;
+    VkBool32           shaderSampledImageArrayNonUniformIndexing;
+    VkBool32           shaderStorageBufferArrayNonUniformIndexing;
+    VkBool32           shaderStorageImageArrayNonUniformIndexing;
+    VkBool32           shaderInputAttachmentArrayNonUniformIndexing;
+    VkBool32           shaderUniformTexelBufferArrayNonUniformIndexing;
+    VkBool32           shaderStorageTexelBufferArrayNonUniformIndexing;
+    VkBool32           descriptorBindingUniformBufferUpdateAfterBind;
+    VkBool32           descriptorBindingSampledImageUpdateAfterBind;
+    VkBool32           descriptorBindingStorageImageUpdateAfterBind;
+    VkBool32           descriptorBindingStorageBufferUpdateAfterBind;
+    VkBool32           descriptorBindingUniformTexelBufferUpdateAfterBind;
+    VkBool32           descriptorBindingStorageTexelBufferUpdateAfterBind;
+    VkBool32           descriptorBindingUpdateUnusedWhilePending;
+    VkBool32           descriptorBindingPartiallyBound;
+    VkBool32           descriptorBindingVariableDescriptorCount;
+    VkBool32           runtimeDescriptorArray;
+    VkBool32           samplerFilterMinmax;
+    VkBool32           scalarBlockLayout;
+    VkBool32           imagelessFramebuffer;
+    VkBool32           uniformBufferStandardLayout;
+    VkBool32           shaderSubgroupExtendedTypes;
+    VkBool32           separateDepthStencilLayouts;
+    VkBool32           hostQueryReset;
+    VkBool32           timelineSemaphore;
+    VkBool32           bufferDeviceAddress;
+    VkBool32           bufferDeviceAddressCaptureReplay;
+    VkBool32           bufferDeviceAddressMultiDevice;
+    VkBool32           vulkanMemoryModel;
+    VkBool32           vulkanMemoryModelDeviceScope;
+    VkBool32           vulkanMemoryModelAvailabilityVisibilityChains;
+    VkBool32           shaderOutputViewportIndex;
+    VkBool32           shaderOutputLayer;
+    VkBool32           subgroupBroadcastDynamicId;
+} VkPhysicalDeviceVulkan12Features;
+
+typedef struct VkConformanceVersion {
+    uint8_t    major;
+    uint8_t    minor;
+    uint8_t    subminor;
+    uint8_t    patch;
+} VkConformanceVersion;
+
+typedef struct VkPhysicalDeviceVulkan12Properties {
+    VkStructureType                      sType;
+    void*                                pNext;
+    VkDriverId                           driverID;
+    char                                 driverName[VK_MAX_DRIVER_NAME_SIZE];
+    char                                 driverInfo[VK_MAX_DRIVER_INFO_SIZE];
+    VkConformanceVersion                 conformanceVersion;
+    VkShaderFloatControlsIndependence    denormBehaviorIndependence;
+    VkShaderFloatControlsIndependence    roundingModeIndependence;
+    VkBool32                             shaderSignedZeroInfNanPreserveFloat16;
+    VkBool32                             shaderSignedZeroInfNanPreserveFloat32;
+    VkBool32                             shaderSignedZeroInfNanPreserveFloat64;
+    VkBool32                             shaderDenormPreserveFloat16;
+    VkBool32                             shaderDenormPreserveFloat32;
+    VkBool32                             shaderDenormPreserveFloat64;
+    VkBool32                             shaderDenormFlushToZeroFloat16;
+    VkBool32                             shaderDenormFlushToZeroFloat32;
+    VkBool32                             shaderDenormFlushToZeroFloat64;
+    VkBool32                             shaderRoundingModeRTEFloat16;
+    VkBool32                             shaderRoundingModeRTEFloat32;
+    VkBool32                             shaderRoundingModeRTEFloat64;
+    VkBool32                             shaderRoundingModeRTZFloat16;
+    VkBool32                             shaderRoundingModeRTZFloat32;
+    VkBool32                             shaderRoundingModeRTZFloat64;
+    uint32_t                             maxUpdateAfterBindDescriptorsInAllPools;
+    VkBool32                             shaderUniformBufferArrayNonUniformIndexingNative;
+    VkBool32                             shaderSampledImageArrayNonUniformIndexingNative;
+    VkBool32                             shaderStorageBufferArrayNonUniformIndexingNative;
+    VkBool32                             shaderStorageImageArrayNonUniformIndexingNative;
+    VkBool32                             shaderInputAttachmentArrayNonUniformIndexingNative;
+    VkBool32                             robustBufferAccessUpdateAfterBind;
+    VkBool32                             quadDivergentImplicitLod;
+    uint32_t                             maxPerStageDescriptorUpdateAfterBindSamplers;
+    uint32_t                             maxPerStageDescriptorUpdateAfterBindUniformBuffers;
+    uint32_t                             maxPerStageDescriptorUpdateAfterBindStorageBuffers;
+    uint32_t                             maxPerStageDescriptorUpdateAfterBindSampledImages;
+    uint32_t                             maxPerStageDescriptorUpdateAfterBindStorageImages;
+    uint32_t                             maxPerStageDescriptorUpdateAfterBindInputAttachments;
+    uint32_t                             maxPerStageUpdateAfterBindResources;
+    uint32_t                             maxDescriptorSetUpdateAfterBindSamplers;
+    uint32_t                             maxDescriptorSetUpdateAfterBindUniformBuffers;
+    uint32_t                             maxDescriptorSetUpdateAfterBindUniformBuffersDynamic;
+    uint32_t                             maxDescriptorSetUpdateAfterBindStorageBuffers;
+    uint32_t                             maxDescriptorSetUpdateAfterBindStorageBuffersDynamic;
+    uint32_t                             maxDescriptorSetUpdateAfterBindSampledImages;
+    uint32_t                             maxDescriptorSetUpdateAfterBindStorageImages;
+    uint32_t                             maxDescriptorSetUpdateAfterBindInputAttachments;
+    VkResolveModeFlags                   supportedDepthResolveModes;
+    VkResolveModeFlags                   supportedStencilResolveModes;
+    VkBool32                             independentResolveNone;
+    VkBool32                             independentResolve;
+    VkBool32                             filterMinmaxSingleComponentFormats;
+    VkBool32                             filterMinmaxImageComponentMapping;
+    uint64_t                             maxTimelineSemaphoreValueDifference;
+    VkSampleCountFlags                   framebufferIntegerColorSampleCounts;
+} VkPhysicalDeviceVulkan12Properties;
+
+typedef struct VkImageFormatListCreateInfo {
+    VkStructureType    sType;
+    const void*        pNext;
+    uint32_t           viewFormatCount;
+    const VkFormat*    pViewFormats;
+} VkImageFormatListCreateInfo;
+
+typedef struct VkAttachmentDescription2 {
+    VkStructureType                 sType;
+    const void*                     pNext;
+    VkAttachmentDescriptionFlags    flags;
+    VkFormat                        format;
+    VkSampleCountFlagBits           samples;
+    VkAttachmentLoadOp              loadOp;
+    VkAttachmentStoreOp             storeOp;
+    VkAttachmentLoadOp              stencilLoadOp;
+    VkAttachmentStoreOp             stencilStoreOp;
+    VkImageLayout                   initialLayout;
+    VkImageLayout                   finalLayout;
+} VkAttachmentDescription2;
+
+typedef struct VkAttachmentReference2 {
+    VkStructureType       sType;
+    const void*           pNext;
+    uint32_t              attachment;
+    VkImageLayout         layout;
+    VkImageAspectFlags    aspectMask;
+} VkAttachmentReference2;
+
+typedef struct VkSubpassDescription2 {
+    VkStructureType                  sType;
+    const void*                      pNext;
+    VkSubpassDescriptionFlags        flags;
+    VkPipelineBindPoint              pipelineBindPoint;
+    uint32_t                         viewMask;
+    uint32_t                         inputAttachmentCount;
+    const VkAttachmentReference2*    pInputAttachments;
+    uint32_t                         colorAttachmentCount;
+    const VkAttachmentReference2*    pColorAttachments;
+    const VkAttachmentReference2*    pResolveAttachments;
+    const VkAttachmentReference2*    pDepthStencilAttachment;
+    uint32_t                         preserveAttachmentCount;
+    const uint32_t*                  pPreserveAttachments;
+} VkSubpassDescription2;
+
+typedef struct VkSubpassDependency2 {
+    VkStructureType         sType;
+    const void*             pNext;
+    uint32_t                srcSubpass;
+    uint32_t                dstSubpass;
+    VkPipelineStageFlags    srcStageMask;
+    VkPipelineStageFlags    dstStageMask;
+    VkAccessFlags           srcAccessMask;
+    VkAccessFlags           dstAccessMask;
+    VkDependencyFlags       dependencyFlags;
+    int32_t                 viewOffset;
+} VkSubpassDependency2;
+
+typedef struct VkRenderPassCreateInfo2 {
+    VkStructureType                    sType;
+    const void*                        pNext;
+    VkRenderPassCreateFlags            flags;
+    uint32_t                           attachmentCount;
+    const VkAttachmentDescription2*    pAttachments;
+    uint32_t                           subpassCount;
+    const VkSubpassDescription2*       pSubpasses;
+    uint32_t                           dependencyCount;
+    const VkSubpassDependency2*        pDependencies;
+    uint32_t                           correlatedViewMaskCount;
+    const uint32_t*                    pCorrelatedViewMasks;
+} VkRenderPassCreateInfo2;
+
+typedef struct VkSubpassBeginInfo {
+    VkStructureType      sType;
+    const void*          pNext;
+    VkSubpassContents    contents;
+} VkSubpassBeginInfo;
+
+typedef struct VkSubpassEndInfo {
+    VkStructureType    sType;
+    const void*        pNext;
+} VkSubpassEndInfo;
+
+typedef struct VkPhysicalDevice8BitStorageFeatures {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           storageBuffer8BitAccess;
+    VkBool32           uniformAndStorageBuffer8BitAccess;
+    VkBool32           storagePushConstant8;
+} VkPhysicalDevice8BitStorageFeatures;
+
+typedef struct VkPhysicalDeviceDriverProperties {
+    VkStructureType         sType;
+    void*                   pNext;
+    VkDriverId              driverID;
+    char                    driverName[VK_MAX_DRIVER_NAME_SIZE];
+    char                    driverInfo[VK_MAX_DRIVER_INFO_SIZE];
+    VkConformanceVersion    conformanceVersion;
+} VkPhysicalDeviceDriverProperties;
+
+typedef struct VkPhysicalDeviceShaderAtomicInt64Features {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           shaderBufferInt64Atomics;
+    VkBool32           shaderSharedInt64Atomics;
+} VkPhysicalDeviceShaderAtomicInt64Features;
+
+typedef struct VkPhysicalDeviceShaderFloat16Int8Features {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           shaderFloat16;
+    VkBool32           shaderInt8;
+} VkPhysicalDeviceShaderFloat16Int8Features;
+
+typedef struct VkPhysicalDeviceFloatControlsProperties {
+    VkStructureType                      sType;
+    void*                                pNext;
+    VkShaderFloatControlsIndependence    denormBehaviorIndependence;
+    VkShaderFloatControlsIndependence    roundingModeIndependence;
+    VkBool32                             shaderSignedZeroInfNanPreserveFloat16;
+    VkBool32                             shaderSignedZeroInfNanPreserveFloat32;
+    VkBool32                             shaderSignedZeroInfNanPreserveFloat64;
+    VkBool32                             shaderDenormPreserveFloat16;
+    VkBool32                             shaderDenormPreserveFloat32;
+    VkBool32                             shaderDenormPreserveFloat64;
+    VkBool32                             shaderDenormFlushToZeroFloat16;
+    VkBool32                             shaderDenormFlushToZeroFloat32;
+    VkBool32                             shaderDenormFlushToZeroFloat64;
+    VkBool32                             shaderRoundingModeRTEFloat16;
+    VkBool32                             shaderRoundingModeRTEFloat32;
+    VkBool32                             shaderRoundingModeRTEFloat64;
+    VkBool32                             shaderRoundingModeRTZFloat16;
+    VkBool32                             shaderRoundingModeRTZFloat32;
+    VkBool32                             shaderRoundingModeRTZFloat64;
+} VkPhysicalDeviceFloatControlsProperties;
+
+typedef struct VkDescriptorSetLayoutBindingFlagsCreateInfo {
+    VkStructureType                    sType;
+    const void*                        pNext;
+    uint32_t                           bindingCount;
+    const VkDescriptorBindingFlags*    pBindingFlags;
+} VkDescriptorSetLayoutBindingFlagsCreateInfo;
+
+typedef struct VkPhysicalDeviceDescriptorIndexingFeatures {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           shaderInputAttachmentArrayDynamicIndexing;
+    VkBool32           shaderUniformTexelBufferArrayDynamicIndexing;
+    VkBool32           shaderStorageTexelBufferArrayDynamicIndexing;
+    VkBool32           shaderUniformBufferArrayNonUniformIndexing;
+    VkBool32           shaderSampledImageArrayNonUniformIndexing;
+    VkBool32           shaderStorageBufferArrayNonUniformIndexing;
+    VkBool32           shaderStorageImageArrayNonUniformIndexing;
+    VkBool32           shaderInputAttachmentArrayNonUniformIndexing;
+    VkBool32           shaderUniformTexelBufferArrayNonUniformIndexing;
+    VkBool32           shaderStorageTexelBufferArrayNonUniformIndexing;
+    VkBool32           descriptorBindingUniformBufferUpdateAfterBind;
+    VkBool32           descriptorBindingSampledImageUpdateAfterBind;
+    VkBool32           descriptorBindingStorageImageUpdateAfterBind;
+    VkBool32           descriptorBindingStorageBufferUpdateAfterBind;
+    VkBool32           descriptorBindingUniformTexelBufferUpdateAfterBind;
+    VkBool32           descriptorBindingStorageTexelBufferUpdateAfterBind;
+    VkBool32           descriptorBindingUpdateUnusedWhilePending;
+    VkBool32           descriptorBindingPartiallyBound;
+    VkBool32           descriptorBindingVariableDescriptorCount;
+    VkBool32           runtimeDescriptorArray;
+} VkPhysicalDeviceDescriptorIndexingFeatures;
+
+typedef struct VkPhysicalDeviceDescriptorIndexingProperties {
+    VkStructureType    sType;
+    void*              pNext;
+    uint32_t           maxUpdateAfterBindDescriptorsInAllPools;
+    VkBool32           shaderUniformBufferArrayNonUniformIndexingNative;
+    VkBool32           shaderSampledImageArrayNonUniformIndexingNative;
+    VkBool32           shaderStorageBufferArrayNonUniformIndexingNative;
+    VkBool32           shaderStorageImageArrayNonUniformIndexingNative;
+    VkBool32           shaderInputAttachmentArrayNonUniformIndexingNative;
+    VkBool32           robustBufferAccessUpdateAfterBind;
+    VkBool32           quadDivergentImplicitLod;
+    uint32_t           maxPerStageDescriptorUpdateAfterBindSamplers;
+    uint32_t           maxPerStageDescriptorUpdateAfterBindUniformBuffers;
+    uint32_t           maxPerStageDescriptorUpdateAfterBindStorageBuffers;
+    uint32_t           maxPerStageDescriptorUpdateAfterBindSampledImages;
+    uint32_t           maxPerStageDescriptorUpdateAfterBindStorageImages;
+    uint32_t           maxPerStageDescriptorUpdateAfterBindInputAttachments;
+    uint32_t           maxPerStageUpdateAfterBindResources;
+    uint32_t           maxDescriptorSetUpdateAfterBindSamplers;
+    uint32_t           maxDescriptorSetUpdateAfterBindUniformBuffers;
+    uint32_t           maxDescriptorSetUpdateAfterBindUniformBuffersDynamic;
+    uint32_t           maxDescriptorSetUpdateAfterBindStorageBuffers;
+    uint32_t           maxDescriptorSetUpdateAfterBindStorageBuffersDynamic;
+    uint32_t           maxDescriptorSetUpdateAfterBindSampledImages;
+    uint32_t           maxDescriptorSetUpdateAfterBindStorageImages;
+    uint32_t           maxDescriptorSetUpdateAfterBindInputAttachments;
+} VkPhysicalDeviceDescriptorIndexingProperties;
+
+typedef struct VkDescriptorSetVariableDescriptorCountAllocateInfo {
+    VkStructureType    sType;
+    const void*        pNext;
+    uint32_t           descriptorSetCount;
+    const uint32_t*    pDescriptorCounts;
+} VkDescriptorSetVariableDescriptorCountAllocateInfo;
+
+typedef struct VkDescriptorSetVariableDescriptorCountLayoutSupport {
+    VkStructureType    sType;
+    void*              pNext;
+    uint32_t           maxVariableDescriptorCount;
+} VkDescriptorSetVariableDescriptorCountLayoutSupport;
+
+typedef struct VkSubpassDescriptionDepthStencilResolve {
+    VkStructureType                  sType;
+    const void*                      pNext;
+    VkResolveModeFlagBits            depthResolveMode;
+    VkResolveModeFlagBits            stencilResolveMode;
+    const VkAttachmentReference2*    pDepthStencilResolveAttachment;
+} VkSubpassDescriptionDepthStencilResolve;
+
+typedef struct VkPhysicalDeviceDepthStencilResolveProperties {
+    VkStructureType       sType;
+    void*                 pNext;
+    VkResolveModeFlags    supportedDepthResolveModes;
+    VkResolveModeFlags    supportedStencilResolveModes;
+    VkBool32              independentResolveNone;
+    VkBool32              independentResolve;
+} VkPhysicalDeviceDepthStencilResolveProperties;
+
+typedef struct VkPhysicalDeviceScalarBlockLayoutFeatures {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           scalarBlockLayout;
+} VkPhysicalDeviceScalarBlockLayoutFeatures;
+
+typedef struct VkImageStencilUsageCreateInfo {
+    VkStructureType      sType;
+    const void*          pNext;
+    VkImageUsageFlags    stencilUsage;
+} VkImageStencilUsageCreateInfo;
+
+typedef struct VkSamplerReductionModeCreateInfo {
+    VkStructureType           sType;
+    const void*               pNext;
+    VkSamplerReductionMode    reductionMode;
+} VkSamplerReductionModeCreateInfo;
+
+typedef struct VkPhysicalDeviceSamplerFilterMinmaxProperties {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           filterMinmaxSingleComponentFormats;
+    VkBool32           filterMinmaxImageComponentMapping;
+} VkPhysicalDeviceSamplerFilterMinmaxProperties;
+
+typedef struct VkPhysicalDeviceVulkanMemoryModelFeatures {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           vulkanMemoryModel;
+    VkBool32           vulkanMemoryModelDeviceScope;
+    VkBool32           vulkanMemoryModelAvailabilityVisibilityChains;
+} VkPhysicalDeviceVulkanMemoryModelFeatures;
+
+typedef struct VkPhysicalDeviceImagelessFramebufferFeatures {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           imagelessFramebuffer;
+} VkPhysicalDeviceImagelessFramebufferFeatures;
+
+typedef struct VkFramebufferAttachmentImageInfo {
+    VkStructureType       sType;
+    const void*           pNext;
+    VkImageCreateFlags    flags;
+    VkImageUsageFlags     usage;
+    uint32_t              width;
+    uint32_t              height;
+    uint32_t              layerCount;
+    uint32_t              viewFormatCount;
+    const VkFormat*       pViewFormats;
+} VkFramebufferAttachmentImageInfo;
+
+typedef struct VkFramebufferAttachmentsCreateInfo {
+    VkStructureType                            sType;
+    const void*                                pNext;
+    uint32_t                                   attachmentImageInfoCount;
+    const VkFramebufferAttachmentImageInfo*    pAttachmentImageInfos;
+} VkFramebufferAttachmentsCreateInfo;
+
+typedef struct VkRenderPassAttachmentBeginInfo {
+    VkStructureType       sType;
+    const void*           pNext;
+    uint32_t              attachmentCount;
+    const VkImageView*    pAttachments;
+} VkRenderPassAttachmentBeginInfo;
+
+typedef struct VkPhysicalDeviceUniformBufferStandardLayoutFeatures {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           uniformBufferStandardLayout;
+} VkPhysicalDeviceUniformBufferStandardLayoutFeatures;
+
+typedef struct VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           shaderSubgroupExtendedTypes;
+} VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures;
+
+typedef struct VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           separateDepthStencilLayouts;
+} VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures;
+
+typedef struct VkAttachmentReferenceStencilLayout {
+    VkStructureType    sType;
+    void*              pNext;
+    VkImageLayout      stencilLayout;
+} VkAttachmentReferenceStencilLayout;
+
+typedef struct VkAttachmentDescriptionStencilLayout {
+    VkStructureType    sType;
+    void*              pNext;
+    VkImageLayout      stencilInitialLayout;
+    VkImageLayout      stencilFinalLayout;
+} VkAttachmentDescriptionStencilLayout;
+
+typedef struct VkPhysicalDeviceHostQueryResetFeatures {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           hostQueryReset;
+} VkPhysicalDeviceHostQueryResetFeatures;
+
+typedef struct VkPhysicalDeviceTimelineSemaphoreFeatures {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           timelineSemaphore;
+} VkPhysicalDeviceTimelineSemaphoreFeatures;
+
+typedef struct VkPhysicalDeviceTimelineSemaphoreProperties {
+    VkStructureType    sType;
+    void*              pNext;
+    uint64_t           maxTimelineSemaphoreValueDifference;
+} VkPhysicalDeviceTimelineSemaphoreProperties;
+
+typedef struct VkSemaphoreTypeCreateInfo {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkSemaphoreType    semaphoreType;
+    uint64_t           initialValue;
+} VkSemaphoreTypeCreateInfo;
+
+typedef struct VkTimelineSemaphoreSubmitInfo {
+    VkStructureType    sType;
+    const void*        pNext;
+    uint32_t           waitSemaphoreValueCount;
+    const uint64_t*    pWaitSemaphoreValues;
+    uint32_t           signalSemaphoreValueCount;
+    const uint64_t*    pSignalSemaphoreValues;
+} VkTimelineSemaphoreSubmitInfo;
+
+typedef struct VkSemaphoreWaitInfo {
+    VkStructureType         sType;
+    const void*             pNext;
+    VkSemaphoreWaitFlags    flags;
+    uint32_t                semaphoreCount;
+    const VkSemaphore*      pSemaphores;
+    const uint64_t*         pValues;
+} VkSemaphoreWaitInfo;
+
+typedef struct VkSemaphoreSignalInfo {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkSemaphore        semaphore;
+    uint64_t           value;
+} VkSemaphoreSignalInfo;
+
+typedef struct VkPhysicalDeviceBufferDeviceAddressFeatures {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           bufferDeviceAddress;
+    VkBool32           bufferDeviceAddressCaptureReplay;
+    VkBool32           bufferDeviceAddressMultiDevice;
+} VkPhysicalDeviceBufferDeviceAddressFeatures;
+
+typedef struct VkBufferDeviceAddressInfo {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkBuffer           buffer;
+} VkBufferDeviceAddressInfo;
+
+typedef struct VkBufferOpaqueCaptureAddressCreateInfo {
+    VkStructureType    sType;
+    const void*        pNext;
+    uint64_t           opaqueCaptureAddress;
+} VkBufferOpaqueCaptureAddressCreateInfo;
+
+typedef struct VkMemoryOpaqueCaptureAddressAllocateInfo {
+    VkStructureType    sType;
+    const void*        pNext;
+    uint64_t           opaqueCaptureAddress;
+} VkMemoryOpaqueCaptureAddressAllocateInfo;
+
+typedef struct VkDeviceMemoryOpaqueCaptureAddressInfo {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkDeviceMemory     memory;
+} VkDeviceMemoryOpaqueCaptureAddressInfo;
+
+typedef void (VKAPI_PTR *PFN_vkCmdDrawIndirectCount)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride);
+typedef void (VKAPI_PTR *PFN_vkCmdDrawIndexedIndirectCount)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateRenderPass2)(VkDevice device, const VkRenderPassCreateInfo2* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass);
+typedef void (VKAPI_PTR *PFN_vkCmdBeginRenderPass2)(VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo*      pRenderPassBegin, const VkSubpassBeginInfo*      pSubpassBeginInfo);
+typedef void (VKAPI_PTR *PFN_vkCmdNextSubpass2)(VkCommandBuffer commandBuffer, const VkSubpassBeginInfo*      pSubpassBeginInfo, const VkSubpassEndInfo*        pSubpassEndInfo);
+typedef void (VKAPI_PTR *PFN_vkCmdEndRenderPass2)(VkCommandBuffer commandBuffer, const VkSubpassEndInfo*        pSubpassEndInfo);
+typedef void (VKAPI_PTR *PFN_vkResetQueryPool)(VkDevice device, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount);
+typedef VkResult (VKAPI_PTR *PFN_vkGetSemaphoreCounterValue)(VkDevice device, VkSemaphore semaphore, uint64_t* pValue);
+typedef VkResult (VKAPI_PTR *PFN_vkWaitSemaphores)(VkDevice device, const VkSemaphoreWaitInfo* pWaitInfo, uint64_t timeout);
+typedef VkResult (VKAPI_PTR *PFN_vkSignalSemaphore)(VkDevice device, const VkSemaphoreSignalInfo* pSignalInfo);
+typedef VkDeviceAddress (VKAPI_PTR *PFN_vkGetBufferDeviceAddress)(VkDevice device, const VkBufferDeviceAddressInfo* pInfo);
+typedef uint64_t (VKAPI_PTR *PFN_vkGetBufferOpaqueCaptureAddress)(VkDevice device, const VkBufferDeviceAddressInfo* pInfo);
+typedef uint64_t (VKAPI_PTR *PFN_vkGetDeviceMemoryOpaqueCaptureAddress)(VkDevice device, const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirectCount(
+    VkCommandBuffer                             commandBuffer,
+    VkBuffer                                    buffer,
+    VkDeviceSize                                offset,
+    VkBuffer                                    countBuffer,
+    VkDeviceSize                                countBufferOffset,
+    uint32_t                                    maxDrawCount,
+    uint32_t                                    stride);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirectCount(
+    VkCommandBuffer                             commandBuffer,
+    VkBuffer                                    buffer,
+    VkDeviceSize                                offset,
+    VkBuffer                                    countBuffer,
+    VkDeviceSize                                countBufferOffset,
+    uint32_t                                    maxDrawCount,
+    uint32_t                                    stride);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass2(
+    VkDevice                                    device,
+    const VkRenderPassCreateInfo2*              pCreateInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkRenderPass*                               pRenderPass);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderPass2(
+    VkCommandBuffer                             commandBuffer,
+    const VkRenderPassBeginInfo*                pRenderPassBegin,
+    const VkSubpassBeginInfo*                   pSubpassBeginInfo);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdNextSubpass2(
+    VkCommandBuffer                             commandBuffer,
+    const VkSubpassBeginInfo*                   pSubpassBeginInfo,
+    const VkSubpassEndInfo*                     pSubpassEndInfo);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderPass2(
+    VkCommandBuffer                             commandBuffer,
+    const VkSubpassEndInfo*                     pSubpassEndInfo);
+
+VKAPI_ATTR void VKAPI_CALL vkResetQueryPool(
+    VkDevice                                    device,
+    VkQueryPool                                 queryPool,
+    uint32_t                                    firstQuery,
+    uint32_t                                    queryCount);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreCounterValue(
+    VkDevice                                    device,
+    VkSemaphore                                 semaphore,
+    uint64_t*                                   pValue);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkWaitSemaphores(
+    VkDevice                                    device,
+    const VkSemaphoreWaitInfo*                  pWaitInfo,
+    uint64_t                                    timeout);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkSignalSemaphore(
+    VkDevice                                    device,
+    const VkSemaphoreSignalInfo*                pSignalInfo);
+
+VKAPI_ATTR VkDeviceAddress VKAPI_CALL vkGetBufferDeviceAddress(
+    VkDevice                                    device,
+    const VkBufferDeviceAddressInfo*            pInfo);
+
+VKAPI_ATTR uint64_t VKAPI_CALL vkGetBufferOpaqueCaptureAddress(
+    VkDevice                                    device,
+    const VkBufferDeviceAddressInfo*            pInfo);
+
+VKAPI_ATTR uint64_t VKAPI_CALL vkGetDeviceMemoryOpaqueCaptureAddress(
+    VkDevice                                    device,
+    const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo);
+#endif
+
+
+#define VK_KHR_surface 1
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSurfaceKHR)
+#define VK_KHR_SURFACE_SPEC_VERSION       25
+#define VK_KHR_SURFACE_EXTENSION_NAME     "VK_KHR_surface"
+
+typedef enum VkPresentModeKHR {
+    VK_PRESENT_MODE_IMMEDIATE_KHR = 0,
+    VK_PRESENT_MODE_MAILBOX_KHR = 1,
+    VK_PRESENT_MODE_FIFO_KHR = 2,
+    VK_PRESENT_MODE_FIFO_RELAXED_KHR = 3,
+    VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR = 1000111000,
+    VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR = 1000111001,
+    VK_PRESENT_MODE_MAX_ENUM_KHR = 0x7FFFFFFF
+} VkPresentModeKHR;
+
+typedef enum VkColorSpaceKHR {
+    VK_COLOR_SPACE_SRGB_NONLINEAR_KHR = 0,
+    VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT = 1000104001,
+    VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT = 1000104002,
+    VK_COLOR_SPACE_DISPLAY_P3_LINEAR_EXT = 1000104003,
+    VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT = 1000104004,
+    VK_COLOR_SPACE_BT709_LINEAR_EXT = 1000104005,
+    VK_COLOR_SPACE_BT709_NONLINEAR_EXT = 1000104006,
+    VK_COLOR_SPACE_BT2020_LINEAR_EXT = 1000104007,
+    VK_COLOR_SPACE_HDR10_ST2084_EXT = 1000104008,
+    VK_COLOR_SPACE_DOLBYVISION_EXT = 1000104009,
+    VK_COLOR_SPACE_HDR10_HLG_EXT = 1000104010,
+    VK_COLOR_SPACE_ADOBERGB_LINEAR_EXT = 1000104011,
+    VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT = 1000104012,
+    VK_COLOR_SPACE_PASS_THROUGH_EXT = 1000104013,
+    VK_COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT = 1000104014,
+    VK_COLORSPACE_SRGB_NONLINEAR_KHR = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR,
+    VK_COLOR_SPACE_DCI_P3_LINEAR_EXT = VK_COLOR_SPACE_DISPLAY_P3_LINEAR_EXT,
+    VK_COLOR_SPACE_MAX_ENUM_KHR = 0x7FFFFFFF
+} VkColorSpaceKHR;
+
+typedef enum VkSurfaceTransformFlagBitsKHR {
+    VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR = 0x00000001,
+    VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR = 0x00000002,
+    VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR = 0x00000004,
+    VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR = 0x00000008,
+    VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR = 0x00000010,
+    VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR = 0x00000020,
+    VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR = 0x00000040,
+    VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR = 0x00000080,
+    VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR = 0x00000100,
+    VK_SURFACE_TRANSFORM_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
+} VkSurfaceTransformFlagBitsKHR;
+
+typedef enum VkCompositeAlphaFlagBitsKHR {
+    VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR = 0x00000001,
+    VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR = 0x00000002,
+    VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR = 0x00000004,
+    VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR = 0x00000008,
+    VK_COMPOSITE_ALPHA_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
+} VkCompositeAlphaFlagBitsKHR;
+typedef VkFlags VkCompositeAlphaFlagsKHR;
+typedef VkFlags VkSurfaceTransformFlagsKHR;
+typedef struct VkSurfaceCapabilitiesKHR {
+    uint32_t                         minImageCount;
+    uint32_t                         maxImageCount;
+    VkExtent2D                       currentExtent;
+    VkExtent2D                       minImageExtent;
+    VkExtent2D                       maxImageExtent;
+    uint32_t                         maxImageArrayLayers;
+    VkSurfaceTransformFlagsKHR       supportedTransforms;
+    VkSurfaceTransformFlagBitsKHR    currentTransform;
+    VkCompositeAlphaFlagsKHR         supportedCompositeAlpha;
+    VkImageUsageFlags                supportedUsageFlags;
+} VkSurfaceCapabilitiesKHR;
+
+typedef struct VkSurfaceFormatKHR {
+    VkFormat           format;
+    VkColorSpaceKHR    colorSpace;
+} VkSurfaceFormatKHR;
+
+typedef void (VKAPI_PTR *PFN_vkDestroySurfaceKHR)(VkInstance instance, VkSurfaceKHR surface, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, VkSurfaceKHR surface, VkBool32* pSupported);
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, VkSurfaceCapabilitiesKHR* pSurfaceCapabilities);
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceFormatsKHR)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t* pSurfaceFormatCount, VkSurfaceFormatKHR* pSurfaceFormats);
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfacePresentModesKHR)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t* pPresentModeCount, VkPresentModeKHR* pPresentModes);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkDestroySurfaceKHR(
+    VkInstance                                  instance,
+    VkSurfaceKHR                                surface,
+    const VkAllocationCallbacks*                pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceSupportKHR(
+    VkPhysicalDevice                            physicalDevice,
+    uint32_t                                    queueFamilyIndex,
+    VkSurfaceKHR                                surface,
+    VkBool32*                                   pSupported);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceCapabilitiesKHR(
+    VkPhysicalDevice                            physicalDevice,
+    VkSurfaceKHR                                surface,
+    VkSurfaceCapabilitiesKHR*                   pSurfaceCapabilities);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceFormatsKHR(
+    VkPhysicalDevice                            physicalDevice,
+    VkSurfaceKHR                                surface,
+    uint32_t*                                   pSurfaceFormatCount,
+    VkSurfaceFormatKHR*                         pSurfaceFormats);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfacePresentModesKHR(
+    VkPhysicalDevice                            physicalDevice,
+    VkSurfaceKHR                                surface,
+    uint32_t*                                   pPresentModeCount,
+    VkPresentModeKHR*                           pPresentModes);
+#endif
+
+
+#define VK_KHR_swapchain 1
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSwapchainKHR)
+#define VK_KHR_SWAPCHAIN_SPEC_VERSION     70
+#define VK_KHR_SWAPCHAIN_EXTENSION_NAME   "VK_KHR_swapchain"
+
+typedef enum VkSwapchainCreateFlagBitsKHR {
+    VK_SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR = 0x00000001,
+    VK_SWAPCHAIN_CREATE_PROTECTED_BIT_KHR = 0x00000002,
+    VK_SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR = 0x00000004,
+    VK_SWAPCHAIN_CREATE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
+} VkSwapchainCreateFlagBitsKHR;
+typedef VkFlags VkSwapchainCreateFlagsKHR;
+
+typedef enum VkDeviceGroupPresentModeFlagBitsKHR {
+    VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR = 0x00000001,
+    VK_DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHR = 0x00000002,
+    VK_DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR = 0x00000004,
+    VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR = 0x00000008,
+    VK_DEVICE_GROUP_PRESENT_MODE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
+} VkDeviceGroupPresentModeFlagBitsKHR;
+typedef VkFlags VkDeviceGroupPresentModeFlagsKHR;
+typedef struct VkSwapchainCreateInfoKHR {
+    VkStructureType                  sType;
+    const void*                      pNext;
+    VkSwapchainCreateFlagsKHR        flags;
+    VkSurfaceKHR                     surface;
+    uint32_t                         minImageCount;
+    VkFormat                         imageFormat;
+    VkColorSpaceKHR                  imageColorSpace;
+    VkExtent2D                       imageExtent;
+    uint32_t                         imageArrayLayers;
+    VkImageUsageFlags                imageUsage;
+    VkSharingMode                    imageSharingMode;
+    uint32_t                         queueFamilyIndexCount;
+    const uint32_t*                  pQueueFamilyIndices;
+    VkSurfaceTransformFlagBitsKHR    preTransform;
+    VkCompositeAlphaFlagBitsKHR      compositeAlpha;
+    VkPresentModeKHR                 presentMode;
+    VkBool32                         clipped;
+    VkSwapchainKHR                   oldSwapchain;
+} VkSwapchainCreateInfoKHR;
+
+typedef struct VkPresentInfoKHR {
+    VkStructureType          sType;
+    const void*              pNext;
+    uint32_t                 waitSemaphoreCount;
+    const VkSemaphore*       pWaitSemaphores;
+    uint32_t                 swapchainCount;
+    const VkSwapchainKHR*    pSwapchains;
+    const uint32_t*          pImageIndices;
+    VkResult*                pResults;
+} VkPresentInfoKHR;
+
+typedef struct VkImageSwapchainCreateInfoKHR {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkSwapchainKHR     swapchain;
+} VkImageSwapchainCreateInfoKHR;
+
+typedef struct VkBindImageMemorySwapchainInfoKHR {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkSwapchainKHR     swapchain;
+    uint32_t           imageIndex;
+} VkBindImageMemorySwapchainInfoKHR;
+
+typedef struct VkAcquireNextImageInfoKHR {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkSwapchainKHR     swapchain;
+    uint64_t           timeout;
+    VkSemaphore        semaphore;
+    VkFence            fence;
+    uint32_t           deviceMask;
+} VkAcquireNextImageInfoKHR;
+
+typedef struct VkDeviceGroupPresentCapabilitiesKHR {
+    VkStructureType                     sType;
+    const void*                         pNext;
+    uint32_t                            presentMask[VK_MAX_DEVICE_GROUP_SIZE];
+    VkDeviceGroupPresentModeFlagsKHR    modes;
+} VkDeviceGroupPresentCapabilitiesKHR;
+
+typedef struct VkDeviceGroupPresentInfoKHR {
+    VkStructureType                        sType;
+    const void*                            pNext;
+    uint32_t                               swapchainCount;
+    const uint32_t*                        pDeviceMasks;
+    VkDeviceGroupPresentModeFlagBitsKHR    mode;
+} VkDeviceGroupPresentInfoKHR;
+
+typedef struct VkDeviceGroupSwapchainCreateInfoKHR {
+    VkStructureType                     sType;
+    const void*                         pNext;
+    VkDeviceGroupPresentModeFlagsKHR    modes;
+} VkDeviceGroupSwapchainCreateInfoKHR;
+
+typedef VkResult (VKAPI_PTR *PFN_vkCreateSwapchainKHR)(VkDevice device, const VkSwapchainCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSwapchainKHR* pSwapchain);
+typedef VkResult (VKAPI_PTR *PFN_vkGetSwapchainImagesKHR)(VkDevice device, VkSwapchainKHR swapchain, uint32_t* pSwapchainImageCount, VkImage* pSwapchainImages);
+typedef VkResult (VKAPI_PTR *PFN_vkAcquireNextImageKHR)(VkDevice device, VkSwapchainKHR swapchain, uint64_t timeout, VkSemaphore semaphore, VkFence fence, uint32_t* pImageIndex);
+typedef VkResult (VKAPI_PTR *PFN_vkQueuePresentKHR)(VkQueue queue, const VkPresentInfoKHR* pPresentInfo);
+typedef VkResult (VKAPI_PTR *PFN_vkGetDeviceGroupPresentCapabilitiesKHR)(VkDevice device, VkDeviceGroupPresentCapabilitiesKHR* pDeviceGroupPresentCapabilities);
+typedef VkResult (VKAPI_PTR *PFN_vkGetDeviceGroupSurfacePresentModesKHR)(VkDevice device, VkSurfaceKHR surface, VkDeviceGroupPresentModeFlagsKHR* pModes);
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDevicePresentRectanglesKHR)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t* pRectCount, VkRect2D* pRects);
+typedef VkResult (VKAPI_PTR *PFN_vkAcquireNextImage2KHR)(VkDevice device, const VkAcquireNextImageInfoKHR* pAcquireInfo, uint32_t* pImageIndex);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateSwapchainKHR(
+    VkDevice                                    device,
+    const VkSwapchainCreateInfoKHR*             pCreateInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkSwapchainKHR*                             pSwapchain);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainImagesKHR(
+    VkDevice                                    device,
+    VkSwapchainKHR                              swapchain,
+    uint32_t*                                   pSwapchainImageCount,
+    VkImage*                                    pSwapchainImages);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkAcquireNextImageKHR(
+    VkDevice                                    device,
+    VkSwapchainKHR                              swapchain,
+    uint64_t                                    timeout,
+    VkSemaphore                                 semaphore,
+    VkFence                                     fence,
+    uint32_t*                                   pImageIndex);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkQueuePresentKHR(
+    VkQueue                                     queue,
+    const VkPresentInfoKHR*                     pPresentInfo);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceGroupPresentCapabilitiesKHR(
+    VkDevice                                    device,
+    VkDeviceGroupPresentCapabilitiesKHR*        pDeviceGroupPresentCapabilities);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceGroupSurfacePresentModesKHR(
+    VkDevice                                    device,
+    VkSurfaceKHR                                surface,
+    VkDeviceGroupPresentModeFlagsKHR*           pModes);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDevicePresentRectanglesKHR(
+    VkPhysicalDevice                            physicalDevice,
+    VkSurfaceKHR                                surface,
+    uint32_t*                                   pRectCount,
+    VkRect2D*                                   pRects);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkAcquireNextImage2KHR(
+    VkDevice                                    device,
+    const VkAcquireNextImageInfoKHR*            pAcquireInfo,
+    uint32_t*                                   pImageIndex);
+#endif
+
+
+#define VK_KHR_display 1
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDisplayKHR)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDisplayModeKHR)
+#define VK_KHR_DISPLAY_SPEC_VERSION       23
+#define VK_KHR_DISPLAY_EXTENSION_NAME     "VK_KHR_display"
+typedef VkFlags VkDisplayModeCreateFlagsKHR;
+
+typedef enum VkDisplayPlaneAlphaFlagBitsKHR {
+    VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR = 0x00000001,
+    VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR = 0x00000002,
+    VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR = 0x00000004,
+    VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR = 0x00000008,
+    VK_DISPLAY_PLANE_ALPHA_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
+} VkDisplayPlaneAlphaFlagBitsKHR;
+typedef VkFlags VkDisplayPlaneAlphaFlagsKHR;
+typedef VkFlags VkDisplaySurfaceCreateFlagsKHR;
+typedef struct VkDisplayModeParametersKHR {
+    VkExtent2D    visibleRegion;
+    uint32_t      refreshRate;
+} VkDisplayModeParametersKHR;
+
+typedef struct VkDisplayModeCreateInfoKHR {
+    VkStructureType                sType;
+    const void*                    pNext;
+    VkDisplayModeCreateFlagsKHR    flags;
+    VkDisplayModeParametersKHR     parameters;
+} VkDisplayModeCreateInfoKHR;
+
+typedef struct VkDisplayModePropertiesKHR {
+    VkDisplayModeKHR              displayMode;
+    VkDisplayModeParametersKHR    parameters;
+} VkDisplayModePropertiesKHR;
+
+typedef struct VkDisplayPlaneCapabilitiesKHR {
+    VkDisplayPlaneAlphaFlagsKHR    supportedAlpha;
+    VkOffset2D                     minSrcPosition;
+    VkOffset2D                     maxSrcPosition;
+    VkExtent2D                     minSrcExtent;
+    VkExtent2D                     maxSrcExtent;
+    VkOffset2D                     minDstPosition;
+    VkOffset2D                     maxDstPosition;
+    VkExtent2D                     minDstExtent;
+    VkExtent2D                     maxDstExtent;
+} VkDisplayPlaneCapabilitiesKHR;
+
+typedef struct VkDisplayPlanePropertiesKHR {
+    VkDisplayKHR    currentDisplay;
+    uint32_t        currentStackIndex;
+} VkDisplayPlanePropertiesKHR;
+
+typedef struct VkDisplayPropertiesKHR {
+    VkDisplayKHR                  display;
+    const char*                   displayName;
+    VkExtent2D                    physicalDimensions;
+    VkExtent2D                    physicalResolution;
+    VkSurfaceTransformFlagsKHR    supportedTransforms;
+    VkBool32                      planeReorderPossible;
+    VkBool32                      persistentContent;
+} VkDisplayPropertiesKHR;
+
+typedef struct VkDisplaySurfaceCreateInfoKHR {
+    VkStructureType                   sType;
+    const void*                       pNext;
+    VkDisplaySurfaceCreateFlagsKHR    flags;
+    VkDisplayModeKHR                  displayMode;
+    uint32_t                          planeIndex;
+    uint32_t                          planeStackIndex;
+    VkSurfaceTransformFlagBitsKHR     transform;
+    float                             globalAlpha;
+    VkDisplayPlaneAlphaFlagBitsKHR    alphaMode;
+    VkExtent2D                        imageExtent;
+} VkDisplaySurfaceCreateInfoKHR;
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceDisplayPropertiesKHR)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayPropertiesKHR* pProperties);
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayPlanePropertiesKHR* pProperties);
+typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayPlaneSupportedDisplaysKHR)(VkPhysicalDevice physicalDevice, uint32_t planeIndex, uint32_t* pDisplayCount, VkDisplayKHR* pDisplays);
+typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayModePropertiesKHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, uint32_t* pPropertyCount, VkDisplayModePropertiesKHR* pProperties);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateDisplayModeKHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, const VkDisplayModeCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDisplayModeKHR* pMode);
+typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayPlaneCapabilitiesKHR)(VkPhysicalDevice physicalDevice, VkDisplayModeKHR mode, uint32_t planeIndex, VkDisplayPlaneCapabilitiesKHR* pCapabilities);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateDisplayPlaneSurfaceKHR)(VkInstance instance, const VkDisplaySurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayPropertiesKHR(
+    VkPhysicalDevice                            physicalDevice,
+    uint32_t*                                   pPropertyCount,
+    VkDisplayPropertiesKHR*                     pProperties);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayPlanePropertiesKHR(
+    VkPhysicalDevice                            physicalDevice,
+    uint32_t*                                   pPropertyCount,
+    VkDisplayPlanePropertiesKHR*                pProperties);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayPlaneSupportedDisplaysKHR(
+    VkPhysicalDevice                            physicalDevice,
+    uint32_t                                    planeIndex,
+    uint32_t*                                   pDisplayCount,
+    VkDisplayKHR*                               pDisplays);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayModePropertiesKHR(
+    VkPhysicalDevice                            physicalDevice,
+    VkDisplayKHR                                display,
+    uint32_t*                                   pPropertyCount,
+    VkDisplayModePropertiesKHR*                 pProperties);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateDisplayModeKHR(
+    VkPhysicalDevice                            physicalDevice,
+    VkDisplayKHR                                display,
+    const VkDisplayModeCreateInfoKHR*           pCreateInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkDisplayModeKHR*                           pMode);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayPlaneCapabilitiesKHR(
+    VkPhysicalDevice                            physicalDevice,
+    VkDisplayModeKHR                            mode,
+    uint32_t                                    planeIndex,
+    VkDisplayPlaneCapabilitiesKHR*              pCapabilities);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateDisplayPlaneSurfaceKHR(
+    VkInstance                                  instance,
+    const VkDisplaySurfaceCreateInfoKHR*        pCreateInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkSurfaceKHR*                               pSurface);
+#endif
+
+
+#define VK_KHR_display_swapchain 1
+#define VK_KHR_DISPLAY_SWAPCHAIN_SPEC_VERSION 10
+#define VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME "VK_KHR_display_swapchain"
+typedef struct VkDisplayPresentInfoKHR {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkRect2D           srcRect;
+    VkRect2D           dstRect;
+    VkBool32           persistent;
+} VkDisplayPresentInfoKHR;
+
+typedef VkResult (VKAPI_PTR *PFN_vkCreateSharedSwapchainsKHR)(VkDevice device, uint32_t swapchainCount, const VkSwapchainCreateInfoKHR* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkSwapchainKHR* pSwapchains);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateSharedSwapchainsKHR(
+    VkDevice                                    device,
+    uint32_t                                    swapchainCount,
+    const VkSwapchainCreateInfoKHR*             pCreateInfos,
+    const VkAllocationCallbacks*                pAllocator,
+    VkSwapchainKHR*                             pSwapchains);
+#endif
+
+
+#define VK_KHR_external_memory_fd 1
+#define VK_KHR_EXTERNAL_MEMORY_FD_SPEC_VERSION 1
+#define VK_KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME "VK_KHR_external_memory_fd"
+typedef struct VkImportMemoryFdInfoKHR {
+    VkStructureType                       sType;
+    const void*                           pNext;
+    VkExternalMemoryHandleTypeFlagBits    handleType;
+    int                                   fd;
+} VkImportMemoryFdInfoKHR;
+
+typedef struct VkMemoryFdPropertiesKHR {
+    VkStructureType    sType;
+    void*              pNext;
+    uint32_t           memoryTypeBits;
+} VkMemoryFdPropertiesKHR;
+
+typedef struct VkMemoryGetFdInfoKHR {
+    VkStructureType                       sType;
+    const void*                           pNext;
+    VkDeviceMemory                        memory;
+    VkExternalMemoryHandleTypeFlagBits    handleType;
+} VkMemoryGetFdInfoKHR;
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryFdKHR)(VkDevice device, const VkMemoryGetFdInfoKHR* pGetFdInfo, int* pFd);
+typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryFdPropertiesKHR)(VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, int fd, VkMemoryFdPropertiesKHR* pMemoryFdProperties);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryFdKHR(
+    VkDevice                                    device,
+    const VkMemoryGetFdInfoKHR*                 pGetFdInfo,
+    int*                                        pFd);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryFdPropertiesKHR(
+    VkDevice                                    device,
+    VkExternalMemoryHandleTypeFlagBits          handleType,
+    int                                         fd,
+    VkMemoryFdPropertiesKHR*                    pMemoryFdProperties);
+#endif
+
+
+#define VK_KHR_external_semaphore_fd 1
+#define VK_KHR_EXTERNAL_SEMAPHORE_FD_SPEC_VERSION 1
+#define VK_KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME "VK_KHR_external_semaphore_fd"
+typedef struct VkImportSemaphoreFdInfoKHR {
+    VkStructureType                          sType;
+    const void*                              pNext;
+    VkSemaphore                              semaphore;
+    VkSemaphoreImportFlags                   flags;
+    VkExternalSemaphoreHandleTypeFlagBits    handleType;
+    int                                      fd;
+} VkImportSemaphoreFdInfoKHR;
+
+typedef struct VkSemaphoreGetFdInfoKHR {
+    VkStructureType                          sType;
+    const void*                              pNext;
+    VkSemaphore                              semaphore;
+    VkExternalSemaphoreHandleTypeFlagBits    handleType;
+} VkSemaphoreGetFdInfoKHR;
+
+typedef VkResult (VKAPI_PTR *PFN_vkImportSemaphoreFdKHR)(VkDevice device, const VkImportSemaphoreFdInfoKHR* pImportSemaphoreFdInfo);
+typedef VkResult (VKAPI_PTR *PFN_vkGetSemaphoreFdKHR)(VkDevice device, const VkSemaphoreGetFdInfoKHR* pGetFdInfo, int* pFd);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkImportSemaphoreFdKHR(
+    VkDevice                                    device,
+    const VkImportSemaphoreFdInfoKHR*           pImportSemaphoreFdInfo);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreFdKHR(
+    VkDevice                                    device,
+    const VkSemaphoreGetFdInfoKHR*              pGetFdInfo,
+    int*                                        pFd);
+#endif
+
+
+#define VK_KHR_incremental_present 1
+#define VK_KHR_INCREMENTAL_PRESENT_SPEC_VERSION 1
+#define VK_KHR_INCREMENTAL_PRESENT_EXTENSION_NAME "VK_KHR_incremental_present"
+typedef struct VkRectLayerKHR {
+    VkOffset2D    offset;
+    VkExtent2D    extent;
+    uint32_t      layer;
+} VkRectLayerKHR;
+
+typedef struct VkPresentRegionKHR {
+    uint32_t                 rectangleCount;
+    const VkRectLayerKHR*    pRectangles;
+} VkPresentRegionKHR;
+
+typedef struct VkPresentRegionsKHR {
+    VkStructureType              sType;
+    const void*                  pNext;
+    uint32_t                     swapchainCount;
+    const VkPresentRegionKHR*    pRegions;
+} VkPresentRegionsKHR;
+
+
+
+#define VK_KHR_shared_presentable_image 1
+#define VK_KHR_SHARED_PRESENTABLE_IMAGE_SPEC_VERSION 1
+#define VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME "VK_KHR_shared_presentable_image"
+typedef struct VkSharedPresentSurfaceCapabilitiesKHR {
+    VkStructureType      sType;
+    void*                pNext;
+    VkImageUsageFlags    sharedPresentSupportedUsageFlags;
+} VkSharedPresentSurfaceCapabilitiesKHR;
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetSwapchainStatusKHR)(VkDevice device, VkSwapchainKHR swapchain);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainStatusKHR(
+    VkDevice                                    device,
+    VkSwapchainKHR                              swapchain);
+#endif
+
+
+#define VK_KHR_external_fence_fd 1
+#define VK_KHR_EXTERNAL_FENCE_FD_SPEC_VERSION 1
+#define VK_KHR_EXTERNAL_FENCE_FD_EXTENSION_NAME "VK_KHR_external_fence_fd"
+typedef struct VkImportFenceFdInfoKHR {
+    VkStructureType                      sType;
+    const void*                          pNext;
+    VkFence                              fence;
+    VkFenceImportFlags                   flags;
+    VkExternalFenceHandleTypeFlagBits    handleType;
+    int                                  fd;
+} VkImportFenceFdInfoKHR;
+
+typedef struct VkFenceGetFdInfoKHR {
+    VkStructureType                      sType;
+    const void*                          pNext;
+    VkFence                              fence;
+    VkExternalFenceHandleTypeFlagBits    handleType;
+} VkFenceGetFdInfoKHR;
+
+typedef VkResult (VKAPI_PTR *PFN_vkImportFenceFdKHR)(VkDevice device, const VkImportFenceFdInfoKHR* pImportFenceFdInfo);
+typedef VkResult (VKAPI_PTR *PFN_vkGetFenceFdKHR)(VkDevice device, const VkFenceGetFdInfoKHR* pGetFdInfo, int* pFd);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkImportFenceFdKHR(
+    VkDevice                                    device,
+    const VkImportFenceFdInfoKHR*               pImportFenceFdInfo);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetFenceFdKHR(
+    VkDevice                                    device,
+    const VkFenceGetFdInfoKHR*                  pGetFdInfo,
+    int*                                        pFd);
+#endif
+
+
+#define VK_KHR_get_surface_capabilities2 1
+#define VK_KHR_GET_SURFACE_CAPABILITIES_2_SPEC_VERSION 1
+#define VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME "VK_KHR_get_surface_capabilities2"
+typedef struct VkPhysicalDeviceSurfaceInfo2KHR {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkSurfaceKHR       surface;
+} VkPhysicalDeviceSurfaceInfo2KHR;
+
+typedef struct VkSurfaceCapabilities2KHR {
+    VkStructureType             sType;
+    void*                       pNext;
+    VkSurfaceCapabilitiesKHR    surfaceCapabilities;
+} VkSurfaceCapabilities2KHR;
+
+typedef struct VkSurfaceFormat2KHR {
+    VkStructureType       sType;
+    void*                 pNext;
+    VkSurfaceFormatKHR    surfaceFormat;
+} VkSurfaceFormat2KHR;
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, VkSurfaceCapabilities2KHR* pSurfaceCapabilities);
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceFormats2KHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, uint32_t* pSurfaceFormatCount, VkSurfaceFormat2KHR* pSurfaceFormats);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceCapabilities2KHR(
+    VkPhysicalDevice                            physicalDevice,
+    const VkPhysicalDeviceSurfaceInfo2KHR*      pSurfaceInfo,
+    VkSurfaceCapabilities2KHR*                  pSurfaceCapabilities);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceFormats2KHR(
+    VkPhysicalDevice                            physicalDevice,
+    const VkPhysicalDeviceSurfaceInfo2KHR*      pSurfaceInfo,
+    uint32_t*                                   pSurfaceFormatCount,
+    VkSurfaceFormat2KHR*                        pSurfaceFormats);
+#endif
+
+
+#define VK_KHR_get_display_properties2 1
+#define VK_KHR_GET_DISPLAY_PROPERTIES_2_SPEC_VERSION 1
+#define VK_KHR_GET_DISPLAY_PROPERTIES_2_EXTENSION_NAME "VK_KHR_get_display_properties2"
+typedef struct VkDisplayProperties2KHR {
+    VkStructureType           sType;
+    void*                     pNext;
+    VkDisplayPropertiesKHR    displayProperties;
+} VkDisplayProperties2KHR;
+
+typedef struct VkDisplayPlaneProperties2KHR {
+    VkStructureType                sType;
+    void*                          pNext;
+    VkDisplayPlanePropertiesKHR    displayPlaneProperties;
+} VkDisplayPlaneProperties2KHR;
+
+typedef struct VkDisplayModeProperties2KHR {
+    VkStructureType               sType;
+    void*                         pNext;
+    VkDisplayModePropertiesKHR    displayModeProperties;
+} VkDisplayModeProperties2KHR;
+
+typedef struct VkDisplayPlaneInfo2KHR {
+    VkStructureType     sType;
+    const void*         pNext;
+    VkDisplayModeKHR    mode;
+    uint32_t            planeIndex;
+} VkDisplayPlaneInfo2KHR;
+
+typedef struct VkDisplayPlaneCapabilities2KHR {
+    VkStructureType                  sType;
+    void*                            pNext;
+    VkDisplayPlaneCapabilitiesKHR    capabilities;
+} VkDisplayPlaneCapabilities2KHR;
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceDisplayProperties2KHR)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayProperties2KHR* pProperties);
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceDisplayPlaneProperties2KHR)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayPlaneProperties2KHR* pProperties);
+typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayModeProperties2KHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, uint32_t* pPropertyCount, VkDisplayModeProperties2KHR* pProperties);
+typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayPlaneCapabilities2KHR)(VkPhysicalDevice physicalDevice, const VkDisplayPlaneInfo2KHR* pDisplayPlaneInfo, VkDisplayPlaneCapabilities2KHR* pCapabilities);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayProperties2KHR(
+    VkPhysicalDevice                            physicalDevice,
+    uint32_t*                                   pPropertyCount,
+    VkDisplayProperties2KHR*                    pProperties);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayPlaneProperties2KHR(
+    VkPhysicalDevice                            physicalDevice,
+    uint32_t*                                   pPropertyCount,
+    VkDisplayPlaneProperties2KHR*               pProperties);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayModeProperties2KHR(
+    VkPhysicalDevice                            physicalDevice,
+    VkDisplayKHR                                display,
+    uint32_t*                                   pPropertyCount,
+    VkDisplayModeProperties2KHR*                pProperties);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayPlaneCapabilities2KHR(
+    VkPhysicalDevice                            physicalDevice,
+    const VkDisplayPlaneInfo2KHR*               pDisplayPlaneInfo,
+    VkDisplayPlaneCapabilities2KHR*             pCapabilities);
+#endif
+
+
+#define VK_KHR_shader_clock 1
+#define VK_KHR_SHADER_CLOCK_SPEC_VERSION  1
+#define VK_KHR_SHADER_CLOCK_EXTENSION_NAME "VK_KHR_shader_clock"
+typedef struct VkPhysicalDeviceShaderClockFeaturesKHR {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           shaderSubgroupClock;
+    VkBool32           shaderDeviceClock;
+} VkPhysicalDeviceShaderClockFeaturesKHR;
+
+
+
+#define VK_KHR_swapchain_mutable_format 1
+#define VK_KHR_SWAPCHAIN_MUTABLE_FORMAT_SPEC_VERSION 1
+#define VK_KHR_SWAPCHAIN_MUTABLE_FORMAT_EXTENSION_NAME "VK_KHR_swapchain_mutable_format"
+
+
+#define VK_KHR_shader_terminate_invocation 1
+#define VK_KHR_SHADER_TERMINATE_INVOCATION_SPEC_VERSION 1
+#define VK_KHR_SHADER_TERMINATE_INVOCATION_EXTENSION_NAME "VK_KHR_shader_terminate_invocation"
+typedef struct VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           shaderTerminateInvocation;
+} VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR;
+
+
+
+#define VK_KHR_fragment_shading_rate 1
+#define VK_KHR_FRAGMENT_SHADING_RATE_SPEC_VERSION 1
+#define VK_KHR_FRAGMENT_SHADING_RATE_EXTENSION_NAME "VK_KHR_fragment_shading_rate"
+
+typedef enum VkFragmentShadingRateCombinerOpKHR {
+    VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR = 0,
+    VK_FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_KHR = 1,
+    VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MIN_KHR = 2,
+    VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MAX_KHR = 3,
+    VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MUL_KHR = 4,
+    VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MAX_ENUM_KHR = 0x7FFFFFFF
+} VkFragmentShadingRateCombinerOpKHR;
+typedef struct VkFragmentShadingRateAttachmentInfoKHR {
+    VkStructureType                  sType;
+    const void*                      pNext;
+    const VkAttachmentReference2*    pFragmentShadingRateAttachment;
+    VkExtent2D                       shadingRateAttachmentTexelSize;
+} VkFragmentShadingRateAttachmentInfoKHR;
+
+typedef struct VkPipelineFragmentShadingRateStateCreateInfoKHR {
+    VkStructureType                       sType;
+    const void*                           pNext;
+    VkExtent2D                            fragmentSize;
+    VkFragmentShadingRateCombinerOpKHR    combinerOps[2];
+} VkPipelineFragmentShadingRateStateCreateInfoKHR;
+
+typedef struct VkPhysicalDeviceFragmentShadingRateFeaturesKHR {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           pipelineFragmentShadingRate;
+    VkBool32           primitiveFragmentShadingRate;
+    VkBool32           attachmentFragmentShadingRate;
+} VkPhysicalDeviceFragmentShadingRateFeaturesKHR;
+
+typedef struct VkPhysicalDeviceFragmentShadingRatePropertiesKHR {
+    VkStructureType          sType;
+    void*                    pNext;
+    VkExtent2D               minFragmentShadingRateAttachmentTexelSize;
+    VkExtent2D               maxFragmentShadingRateAttachmentTexelSize;
+    uint32_t                 maxFragmentShadingRateAttachmentTexelSizeAspectRatio;
+    VkBool32                 primitiveFragmentShadingRateWithMultipleViewports;
+    VkBool32                 layeredShadingRateAttachments;
+    VkBool32                 fragmentShadingRateNonTrivialCombinerOps;
+    VkExtent2D               maxFragmentSize;
+    uint32_t                 maxFragmentSizeAspectRatio;
+    uint32_t                 maxFragmentShadingRateCoverageSamples;
+    VkSampleCountFlagBits    maxFragmentShadingRateRasterizationSamples;
+    VkBool32                 fragmentShadingRateWithShaderDepthStencilWrites;
+    VkBool32                 fragmentShadingRateWithSampleMask;
+    VkBool32                 fragmentShadingRateWithShaderSampleMask;
+    VkBool32                 fragmentShadingRateWithConservativeRasterization;
+    VkBool32                 fragmentShadingRateWithFragmentShaderInterlock;
+    VkBool32                 fragmentShadingRateWithCustomSampleLocations;
+    VkBool32                 fragmentShadingRateStrictMultiplyCombiner;
+} VkPhysicalDeviceFragmentShadingRatePropertiesKHR;
+
+typedef struct VkPhysicalDeviceFragmentShadingRateKHR {
+    VkStructureType       sType;
+    void*                 pNext;
+    VkSampleCountFlags    sampleCounts;
+    VkExtent2D            fragmentSize;
+} VkPhysicalDeviceFragmentShadingRateKHR;
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceFragmentShadingRatesKHR)(VkPhysicalDevice physicalDevice, uint32_t* pFragmentShadingRateCount, VkPhysicalDeviceFragmentShadingRateKHR* pFragmentShadingRates);
+typedef void (VKAPI_PTR *PFN_vkCmdSetFragmentShadingRateKHR)(VkCommandBuffer           commandBuffer, const VkExtent2D*                           pFragmentSize, const VkFragmentShadingRateCombinerOpKHR    combinerOps[2]);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceFragmentShadingRatesKHR(
+    VkPhysicalDevice                            physicalDevice,
+    uint32_t*                                   pFragmentShadingRateCount,
+    VkPhysicalDeviceFragmentShadingRateKHR*     pFragmentShadingRates);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetFragmentShadingRateKHR(
+    VkCommandBuffer                             commandBuffer,
+    const VkExtent2D*                           pFragmentSize,
+    const VkFragmentShadingRateCombinerOpKHR    combinerOps[2]);
+#endif
+
+
+#define VK_KHR_fault_handling 1
+#define VK_KHR_FAULT_HANDLING_SPEC_VERSION 1
+#define VK_KHR_FAULT_HANDLING_EXTENSION_NAME "VK_KHR_fault_handling"
+typedef VkFaultLevel VkFaultLevelKHR;
+
+typedef VkFaultType VkFaultTypeKHR;
+
+typedef VkFaultQueryBehavior VkFaultQueryBehaviorKHR;
+
+typedef VkFaultData VkFaultDataKHR;
+
+typedef VkFaultCallbackInfo VkFaultCallbackInfoKHR;
+
+typedef PFN_vkFaultCallbackFunction PFN_vkFaultCallbackFunctionKHR;
+
+typedef VkPhysicalDeviceFaultHandlingProperties VkPhysicalDeviceFaultHandlingPropertiesKHR;
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetFaultDataKHR)(VkDevice device, VkFaultQueryBehavior faultQueryBehavior, VkBool32* pUnrecordedFaults, uint32_t* pFaultCount, VkFaultData* pFaults);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkGetFaultDataKHR(
+    VkDevice                                    device,
+    VkFaultQueryBehavior                        faultQueryBehavior,
+    VkBool32*                                   pUnrecordedFaults,
+    uint32_t*                                   pFaultCount,
+    VkFaultData*                                pFaults);
+#endif
+
+
+#define VK_KHR_object_refresh 1
+#define VK_KHR_OBJECT_REFRESH_SPEC_VERSION 1
+#define VK_KHR_OBJECT_REFRESH_EXTENSION_NAME "VK_KHR_object_refresh"
+
+typedef enum VkRefreshObjectFlagBitsKHR {
+    VK_REFRESH_OBJECT_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
+} VkRefreshObjectFlagBitsKHR;
+typedef VkFlags VkRefreshObjectFlagsKHR;
+typedef struct VkRefreshObjectKHR {
+    VkObjectType               objectType;
+    uint64_t                   objectHandle;
+    VkRefreshObjectFlagsKHR    flags;
+} VkRefreshObjectKHR;
+
+typedef struct VkRefreshObjectListKHR {
+    VkStructureType              sType;
+    const void*                  pNext;
+    uint32_t                     objectCount;
+    const VkRefreshObjectKHR*    pObjects;
+} VkRefreshObjectListKHR;
+
+typedef void (VKAPI_PTR *PFN_vkCmdRefreshObjectsKHR)(VkCommandBuffer commandBuffer, const VkRefreshObjectListKHR* pRefreshObjects);
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceRefreshableObjectTypesKHR)(VkPhysicalDevice physicalDevice, uint32_t* pRefreshableObjectCount, VkObjectType* pRefreshableObjectTypes);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkCmdRefreshObjectsKHR(
+    VkCommandBuffer                             commandBuffer,
+    const VkRefreshObjectListKHR*               pRefreshObjects);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceRefreshableObjectTypesKHR(
+    VkPhysicalDevice                            physicalDevice,
+    uint32_t*                                   pRefreshableObjectCount,
+    VkObjectType*                               pRefreshableObjectTypes);
+#endif
+
+
+#define VK_KHR_seu_safe_memory 1
+#define VK_KHR_SEU_SAFE_MEMORY_SPEC_VERSION 1
+#define VK_KHR_SEU_SAFE_MEMORY_EXTENSION_NAME "VK_KHR_seu_safe_memory"
+
+
+#define VK_KHR_pipeline_identifier 1
+#define VK_KHR_PIPELINE_IDENTIFIER_SPEC_VERSION 1
+#define VK_KHR_PIPELINE_IDENTIFIER_EXTENSION_NAME "VK_KHR_pipeline_identifier"
+typedef VkPipelineMatchControl VkPipelineMatchControlKHR;
+
+typedef VkPhysicalDevicePipelineIdentifierFeatures VkPhysicalDevicePipelineIdentifierFeaturesKHR;
+
+typedef VkPipelineIdentifierInfo VkPipelineIdentifierInfoKHR;
+
+
+
+#define VK_KHR_copy_commands2 1
+#define VK_KHR_COPY_COMMANDS_2_SPEC_VERSION 1
+#define VK_KHR_COPY_COMMANDS_2_EXTENSION_NAME "VK_KHR_copy_commands2"
+typedef struct VkBufferCopy2KHR {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkDeviceSize       srcOffset;
+    VkDeviceSize       dstOffset;
+    VkDeviceSize       size;
+} VkBufferCopy2KHR;
+
+typedef struct VkCopyBufferInfo2KHR {
+    VkStructureType            sType;
+    const void*                pNext;
+    VkBuffer                   srcBuffer;
+    VkBuffer                   dstBuffer;
+    uint32_t                   regionCount;
+    const VkBufferCopy2KHR*    pRegions;
+} VkCopyBufferInfo2KHR;
+
+typedef struct VkImageCopy2KHR {
+    VkStructureType             sType;
+    const void*                 pNext;
+    VkImageSubresourceLayers    srcSubresource;
+    VkOffset3D                  srcOffset;
+    VkImageSubresourceLayers    dstSubresource;
+    VkOffset3D                  dstOffset;
+    VkExtent3D                  extent;
+} VkImageCopy2KHR;
+
+typedef struct VkCopyImageInfo2KHR {
+    VkStructureType           sType;
+    const void*               pNext;
+    VkImage                   srcImage;
+    VkImageLayout             srcImageLayout;
+    VkImage                   dstImage;
+    VkImageLayout             dstImageLayout;
+    uint32_t                  regionCount;
+    const VkImageCopy2KHR*    pRegions;
+} VkCopyImageInfo2KHR;
+
+typedef struct VkBufferImageCopy2KHR {
+    VkStructureType             sType;
+    const void*                 pNext;
+    VkDeviceSize                bufferOffset;
+    uint32_t                    bufferRowLength;
+    uint32_t                    bufferImageHeight;
+    VkImageSubresourceLayers    imageSubresource;
+    VkOffset3D                  imageOffset;
+    VkExtent3D                  imageExtent;
+} VkBufferImageCopy2KHR;
+
+typedef struct VkCopyBufferToImageInfo2KHR {
+    VkStructureType                 sType;
+    const void*                     pNext;
+    VkBuffer                        srcBuffer;
+    VkImage                         dstImage;
+    VkImageLayout                   dstImageLayout;
+    uint32_t                        regionCount;
+    const VkBufferImageCopy2KHR*    pRegions;
+} VkCopyBufferToImageInfo2KHR;
+
+typedef struct VkCopyImageToBufferInfo2KHR {
+    VkStructureType                 sType;
+    const void*                     pNext;
+    VkImage                         srcImage;
+    VkImageLayout                   srcImageLayout;
+    VkBuffer                        dstBuffer;
+    uint32_t                        regionCount;
+    const VkBufferImageCopy2KHR*    pRegions;
+} VkCopyImageToBufferInfo2KHR;
+
+typedef struct VkImageBlit2KHR {
+    VkStructureType             sType;
+    const void*                 pNext;
+    VkImageSubresourceLayers    srcSubresource;
+    VkOffset3D                  srcOffsets[2];
+    VkImageSubresourceLayers    dstSubresource;
+    VkOffset3D                  dstOffsets[2];
+} VkImageBlit2KHR;
+
+typedef struct VkBlitImageInfo2KHR {
+    VkStructureType           sType;
+    const void*               pNext;
+    VkImage                   srcImage;
+    VkImageLayout             srcImageLayout;
+    VkImage                   dstImage;
+    VkImageLayout             dstImageLayout;
+    uint32_t                  regionCount;
+    const VkImageBlit2KHR*    pRegions;
+    VkFilter                  filter;
+} VkBlitImageInfo2KHR;
+
+typedef struct VkImageResolve2KHR {
+    VkStructureType             sType;
+    const void*                 pNext;
+    VkImageSubresourceLayers    srcSubresource;
+    VkOffset3D                  srcOffset;
+    VkImageSubresourceLayers    dstSubresource;
+    VkOffset3D                  dstOffset;
+    VkExtent3D                  extent;
+} VkImageResolve2KHR;
+
+typedef struct VkResolveImageInfo2KHR {
+    VkStructureType              sType;
+    const void*                  pNext;
+    VkImage                      srcImage;
+    VkImageLayout                srcImageLayout;
+    VkImage                      dstImage;
+    VkImageLayout                dstImageLayout;
+    uint32_t                     regionCount;
+    const VkImageResolve2KHR*    pRegions;
+} VkResolveImageInfo2KHR;
+
+typedef void (VKAPI_PTR *PFN_vkCmdCopyBuffer2KHR)(VkCommandBuffer commandBuffer, const VkCopyBufferInfo2KHR* pCopyBufferInfo);
+typedef void (VKAPI_PTR *PFN_vkCmdCopyImage2KHR)(VkCommandBuffer commandBuffer, const VkCopyImageInfo2KHR* pCopyImageInfo);
+typedef void (VKAPI_PTR *PFN_vkCmdCopyBufferToImage2KHR)(VkCommandBuffer commandBuffer, const VkCopyBufferToImageInfo2KHR* pCopyBufferToImageInfo);
+typedef void (VKAPI_PTR *PFN_vkCmdCopyImageToBuffer2KHR)(VkCommandBuffer commandBuffer, const VkCopyImageToBufferInfo2KHR* pCopyImageToBufferInfo);
+typedef void (VKAPI_PTR *PFN_vkCmdBlitImage2KHR)(VkCommandBuffer commandBuffer, const VkBlitImageInfo2KHR* pBlitImageInfo);
+typedef void (VKAPI_PTR *PFN_vkCmdResolveImage2KHR)(VkCommandBuffer commandBuffer, const VkResolveImageInfo2KHR* pResolveImageInfo);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkCmdCopyBuffer2KHR(
+    VkCommandBuffer                             commandBuffer,
+    const VkCopyBufferInfo2KHR*                 pCopyBufferInfo);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdCopyImage2KHR(
+    VkCommandBuffer                             commandBuffer,
+    const VkCopyImageInfo2KHR*                  pCopyImageInfo);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdCopyBufferToImage2KHR(
+    VkCommandBuffer                             commandBuffer,
+    const VkCopyBufferToImageInfo2KHR*          pCopyBufferToImageInfo);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdCopyImageToBuffer2KHR(
+    VkCommandBuffer                             commandBuffer,
+    const VkCopyImageToBufferInfo2KHR*          pCopyImageToBufferInfo);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdBlitImage2KHR(
+    VkCommandBuffer                             commandBuffer,
+    const VkBlitImageInfo2KHR*                  pBlitImageInfo);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdResolveImage2KHR(
+    VkCommandBuffer                             commandBuffer,
+    const VkResolveImageInfo2KHR*               pResolveImageInfo);
+#endif
+
+
+#define VK_KHR_sc_pipeline_cache_functionality 1
+#define VK_KHR_SC_PIPELINE_CACHE_FUNCTIONALITY_SPEC_VERSION 1
+#define VK_KHR_SC_PIPELINE_CACHE_FUNCTIONALITY_EXTENSION_NAME "VK_KHR_sc_pipeline_cache_functionality"
+
+
+#define VK_EXT_depth_range_unrestricted 1
+#define VK_EXT_DEPTH_RANGE_UNRESTRICTED_SPEC_VERSION 1
+#define VK_EXT_DEPTH_RANGE_UNRESTRICTED_EXTENSION_NAME "VK_EXT_depth_range_unrestricted"
+
+
+#define VK_EXT_texture_compression_astc_hdr 1
+#define VK_EXT_TEXTURE_COMPRESSION_ASTC_HDR_SPEC_VERSION 1
+#define VK_EXT_TEXTURE_COMPRESSION_ASTC_HDR_EXTENSION_NAME "VK_EXT_texture_compression_astc_hdr"
+typedef struct VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           textureCompressionASTC_HDR;
+} VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT;
+
+
+
+#define VK_EXT_astc_decode_mode 1
+#define VK_EXT_ASTC_DECODE_MODE_SPEC_VERSION 1
+#define VK_EXT_ASTC_DECODE_MODE_EXTENSION_NAME "VK_EXT_astc_decode_mode"
+typedef struct VkImageViewASTCDecodeModeEXT {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkFormat           decodeMode;
+} VkImageViewASTCDecodeModeEXT;
+
+typedef struct VkPhysicalDeviceASTCDecodeFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           decodeModeSharedExponent;
+} VkPhysicalDeviceASTCDecodeFeaturesEXT;
+
+
+
+#define VK_EXT_direct_mode_display 1
+#define VK_EXT_DIRECT_MODE_DISPLAY_SPEC_VERSION 1
+#define VK_EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME "VK_EXT_direct_mode_display"
+typedef VkResult (VKAPI_PTR *PFN_vkReleaseDisplayEXT)(VkPhysicalDevice physicalDevice, VkDisplayKHR display);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkReleaseDisplayEXT(
+    VkPhysicalDevice                            physicalDevice,
+    VkDisplayKHR                                display);
+#endif
+
+
+#define VK_EXT_display_surface_counter 1
+#define VK_EXT_DISPLAY_SURFACE_COUNTER_SPEC_VERSION 1
+#define VK_EXT_DISPLAY_SURFACE_COUNTER_EXTENSION_NAME "VK_EXT_display_surface_counter"
+
+typedef enum VkSurfaceCounterFlagBitsEXT {
+    VK_SURFACE_COUNTER_VBLANK_BIT_EXT = 0x00000001,
+    VK_SURFACE_COUNTER_VBLANK_EXT = VK_SURFACE_COUNTER_VBLANK_BIT_EXT,
+    VK_SURFACE_COUNTER_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkSurfaceCounterFlagBitsEXT;
+typedef VkFlags VkSurfaceCounterFlagsEXT;
+typedef struct VkSurfaceCapabilities2EXT {
+    VkStructureType                  sType;
+    void*                            pNext;
+    uint32_t                         minImageCount;
+    uint32_t                         maxImageCount;
+    VkExtent2D                       currentExtent;
+    VkExtent2D                       minImageExtent;
+    VkExtent2D                       maxImageExtent;
+    uint32_t                         maxImageArrayLayers;
+    VkSurfaceTransformFlagsKHR       supportedTransforms;
+    VkSurfaceTransformFlagBitsKHR    currentTransform;
+    VkCompositeAlphaFlagsKHR         supportedCompositeAlpha;
+    VkImageUsageFlags                supportedUsageFlags;
+    VkSurfaceCounterFlagsEXT         supportedSurfaceCounters;
+} VkSurfaceCapabilities2EXT;
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceCapabilities2EXT)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, VkSurfaceCapabilities2EXT* pSurfaceCapabilities);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceCapabilities2EXT(
+    VkPhysicalDevice                            physicalDevice,
+    VkSurfaceKHR                                surface,
+    VkSurfaceCapabilities2EXT*                  pSurfaceCapabilities);
+#endif
+
+
+#define VK_EXT_display_control 1
+#define VK_EXT_DISPLAY_CONTROL_SPEC_VERSION 1
+#define VK_EXT_DISPLAY_CONTROL_EXTENSION_NAME "VK_EXT_display_control"
+
+typedef enum VkDisplayPowerStateEXT {
+    VK_DISPLAY_POWER_STATE_OFF_EXT = 0,
+    VK_DISPLAY_POWER_STATE_SUSPEND_EXT = 1,
+    VK_DISPLAY_POWER_STATE_ON_EXT = 2,
+    VK_DISPLAY_POWER_STATE_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkDisplayPowerStateEXT;
+
+typedef enum VkDeviceEventTypeEXT {
+    VK_DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT = 0,
+    VK_DEVICE_EVENT_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkDeviceEventTypeEXT;
+
+typedef enum VkDisplayEventTypeEXT {
+    VK_DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT = 0,
+    VK_DISPLAY_EVENT_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkDisplayEventTypeEXT;
+typedef struct VkDisplayPowerInfoEXT {
+    VkStructureType           sType;
+    const void*               pNext;
+    VkDisplayPowerStateEXT    powerState;
+} VkDisplayPowerInfoEXT;
+
+typedef struct VkDeviceEventInfoEXT {
+    VkStructureType         sType;
+    const void*             pNext;
+    VkDeviceEventTypeEXT    deviceEvent;
+} VkDeviceEventInfoEXT;
+
+typedef struct VkDisplayEventInfoEXT {
+    VkStructureType          sType;
+    const void*              pNext;
+    VkDisplayEventTypeEXT    displayEvent;
+} VkDisplayEventInfoEXT;
+
+typedef struct VkSwapchainCounterCreateInfoEXT {
+    VkStructureType             sType;
+    const void*                 pNext;
+    VkSurfaceCounterFlagsEXT    surfaceCounters;
+} VkSwapchainCounterCreateInfoEXT;
+
+typedef VkResult (VKAPI_PTR *PFN_vkDisplayPowerControlEXT)(VkDevice device, VkDisplayKHR display, const VkDisplayPowerInfoEXT* pDisplayPowerInfo);
+typedef VkResult (VKAPI_PTR *PFN_vkRegisterDeviceEventEXT)(VkDevice device, const VkDeviceEventInfoEXT* pDeviceEventInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence);
+typedef VkResult (VKAPI_PTR *PFN_vkRegisterDisplayEventEXT)(VkDevice device, VkDisplayKHR display, const VkDisplayEventInfoEXT* pDisplayEventInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence);
+typedef VkResult (VKAPI_PTR *PFN_vkGetSwapchainCounterEXT)(VkDevice device, VkSwapchainKHR swapchain, VkSurfaceCounterFlagBitsEXT counter, uint64_t* pCounterValue);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkDisplayPowerControlEXT(
+    VkDevice                                    device,
+    VkDisplayKHR                                display,
+    const VkDisplayPowerInfoEXT*                pDisplayPowerInfo);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkRegisterDeviceEventEXT(
+    VkDevice                                    device,
+    const VkDeviceEventInfoEXT*                 pDeviceEventInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkFence*                                    pFence);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkRegisterDisplayEventEXT(
+    VkDevice                                    device,
+    VkDisplayKHR                                display,
+    const VkDisplayEventInfoEXT*                pDisplayEventInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkFence*                                    pFence);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainCounterEXT(
+    VkDevice                                    device,
+    VkSwapchainKHR                              swapchain,
+    VkSurfaceCounterFlagBitsEXT                 counter,
+    uint64_t*                                   pCounterValue);
+#endif
+
+
+#define VK_EXT_discard_rectangles 1
+#define VK_EXT_DISCARD_RECTANGLES_SPEC_VERSION 1
+#define VK_EXT_DISCARD_RECTANGLES_EXTENSION_NAME "VK_EXT_discard_rectangles"
+
+typedef enum VkDiscardRectangleModeEXT {
+    VK_DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT = 0,
+    VK_DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT = 1,
+    VK_DISCARD_RECTANGLE_MODE_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkDiscardRectangleModeEXT;
+typedef VkFlags VkPipelineDiscardRectangleStateCreateFlagsEXT;
+typedef struct VkPhysicalDeviceDiscardRectanglePropertiesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    uint32_t           maxDiscardRectangles;
+} VkPhysicalDeviceDiscardRectanglePropertiesEXT;
+
+typedef struct VkPipelineDiscardRectangleStateCreateInfoEXT {
+    VkStructureType                                  sType;
+    const void*                                      pNext;
+    VkPipelineDiscardRectangleStateCreateFlagsEXT    flags;
+    VkDiscardRectangleModeEXT                        discardRectangleMode;
+    uint32_t                                         discardRectangleCount;
+    const VkRect2D*                                  pDiscardRectangles;
+} VkPipelineDiscardRectangleStateCreateInfoEXT;
+
+typedef void (VKAPI_PTR *PFN_vkCmdSetDiscardRectangleEXT)(VkCommandBuffer commandBuffer, uint32_t firstDiscardRectangle, uint32_t discardRectangleCount, const VkRect2D* pDiscardRectangles);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkCmdSetDiscardRectangleEXT(
+    VkCommandBuffer                             commandBuffer,
+    uint32_t                                    firstDiscardRectangle,
+    uint32_t                                    discardRectangleCount,
+    const VkRect2D*                             pDiscardRectangles);
+#endif
+
+
+#define VK_EXT_conservative_rasterization 1
+#define VK_EXT_CONSERVATIVE_RASTERIZATION_SPEC_VERSION 1
+#define VK_EXT_CONSERVATIVE_RASTERIZATION_EXTENSION_NAME "VK_EXT_conservative_rasterization"
+
+typedef enum VkConservativeRasterizationModeEXT {
+    VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT = 0,
+    VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT = 1,
+    VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT = 2,
+    VK_CONSERVATIVE_RASTERIZATION_MODE_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkConservativeRasterizationModeEXT;
+typedef VkFlags VkPipelineRasterizationConservativeStateCreateFlagsEXT;
+typedef struct VkPhysicalDeviceConservativeRasterizationPropertiesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    float              primitiveOverestimationSize;
+    float              maxExtraPrimitiveOverestimationSize;
+    float              extraPrimitiveOverestimationSizeGranularity;
+    VkBool32           primitiveUnderestimation;
+    VkBool32           conservativePointAndLineRasterization;
+    VkBool32           degenerateTrianglesRasterized;
+    VkBool32           degenerateLinesRasterized;
+    VkBool32           fullyCoveredFragmentShaderInputVariable;
+    VkBool32           conservativeRasterizationPostDepthCoverage;
+} VkPhysicalDeviceConservativeRasterizationPropertiesEXT;
+
+typedef struct VkPipelineRasterizationConservativeStateCreateInfoEXT {
+    VkStructureType                                           sType;
+    const void*                                               pNext;
+    VkPipelineRasterizationConservativeStateCreateFlagsEXT    flags;
+    VkConservativeRasterizationModeEXT                        conservativeRasterizationMode;
+    float                                                     extraPrimitiveOverestimationSize;
+} VkPipelineRasterizationConservativeStateCreateInfoEXT;
+
+
+
+#define VK_EXT_depth_clip_enable 1
+#define VK_EXT_DEPTH_CLIP_ENABLE_SPEC_VERSION 1
+#define VK_EXT_DEPTH_CLIP_ENABLE_EXTENSION_NAME "VK_EXT_depth_clip_enable"
+typedef VkFlags VkPipelineRasterizationDepthClipStateCreateFlagsEXT;
+typedef struct VkPhysicalDeviceDepthClipEnableFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           depthClipEnable;
+} VkPhysicalDeviceDepthClipEnableFeaturesEXT;
+
+typedef struct VkPipelineRasterizationDepthClipStateCreateInfoEXT {
+    VkStructureType                                        sType;
+    const void*                                            pNext;
+    VkPipelineRasterizationDepthClipStateCreateFlagsEXT    flags;
+    VkBool32                                               depthClipEnable;
+} VkPipelineRasterizationDepthClipStateCreateInfoEXT;
+
+
+
+#define VK_EXT_swapchain_colorspace 1
+#define VK_EXT_SWAPCHAIN_COLOR_SPACE_SPEC_VERSION 4
+#define VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME "VK_EXT_swapchain_colorspace"
+
+
+#define VK_EXT_hdr_metadata 1
+#define VK_EXT_HDR_METADATA_SPEC_VERSION  2
+#define VK_EXT_HDR_METADATA_EXTENSION_NAME "VK_EXT_hdr_metadata"
+typedef struct VkXYColorEXT {
+    float    x;
+    float    y;
+} VkXYColorEXT;
+
+typedef struct VkHdrMetadataEXT {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkXYColorEXT       displayPrimaryRed;
+    VkXYColorEXT       displayPrimaryGreen;
+    VkXYColorEXT       displayPrimaryBlue;
+    VkXYColorEXT       whitePoint;
+    float              maxLuminance;
+    float              minLuminance;
+    float              maxContentLightLevel;
+    float              maxFrameAverageLightLevel;
+} VkHdrMetadataEXT;
+
+typedef void (VKAPI_PTR *PFN_vkSetHdrMetadataEXT)(VkDevice device, uint32_t swapchainCount, const VkSwapchainKHR* pSwapchains, const VkHdrMetadataEXT* pMetadata);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkSetHdrMetadataEXT(
+    VkDevice                                    device,
+    uint32_t                                    swapchainCount,
+    const VkSwapchainKHR*                       pSwapchains,
+    const VkHdrMetadataEXT*                     pMetadata);
+#endif
+
+
+#define VK_EXT_external_memory_dma_buf 1
+#define VK_EXT_EXTERNAL_MEMORY_DMA_BUF_SPEC_VERSION 1
+#define VK_EXT_EXTERNAL_MEMORY_DMA_BUF_EXTENSION_NAME "VK_EXT_external_memory_dma_buf"
+
+
+#define VK_EXT_queue_family_foreign 1
+#define VK_EXT_QUEUE_FAMILY_FOREIGN_SPEC_VERSION 1
+#define VK_EXT_QUEUE_FAMILY_FOREIGN_EXTENSION_NAME "VK_EXT_queue_family_foreign"
+#define VK_QUEUE_FAMILY_FOREIGN_EXT       (~0U-2)
+
+
+#define VK_EXT_shader_stencil_export 1
+#define VK_EXT_SHADER_STENCIL_EXPORT_SPEC_VERSION 1
+#define VK_EXT_SHADER_STENCIL_EXPORT_EXTENSION_NAME "VK_EXT_shader_stencil_export"
+
+
+#define VK_EXT_sample_locations 1
+#define VK_EXT_SAMPLE_LOCATIONS_SPEC_VERSION 1
+#define VK_EXT_SAMPLE_LOCATIONS_EXTENSION_NAME "VK_EXT_sample_locations"
+typedef struct VkSampleLocationEXT {
+    float    x;
+    float    y;
+} VkSampleLocationEXT;
+
+typedef struct VkSampleLocationsInfoEXT {
+    VkStructureType               sType;
+    const void*                   pNext;
+    VkSampleCountFlagBits         sampleLocationsPerPixel;
+    VkExtent2D                    sampleLocationGridSize;
+    uint32_t                      sampleLocationsCount;
+    const VkSampleLocationEXT*    pSampleLocations;
+} VkSampleLocationsInfoEXT;
+
+typedef struct VkAttachmentSampleLocationsEXT {
+    uint32_t                    attachmentIndex;
+    VkSampleLocationsInfoEXT    sampleLocationsInfo;
+} VkAttachmentSampleLocationsEXT;
+
+typedef struct VkSubpassSampleLocationsEXT {
+    uint32_t                    subpassIndex;
+    VkSampleLocationsInfoEXT    sampleLocationsInfo;
+} VkSubpassSampleLocationsEXT;
+
+typedef struct VkRenderPassSampleLocationsBeginInfoEXT {
+    VkStructureType                          sType;
+    const void*                              pNext;
+    uint32_t                                 attachmentInitialSampleLocationsCount;
+    const VkAttachmentSampleLocationsEXT*    pAttachmentInitialSampleLocations;
+    uint32_t                                 postSubpassSampleLocationsCount;
+    const VkSubpassSampleLocationsEXT*       pPostSubpassSampleLocations;
+} VkRenderPassSampleLocationsBeginInfoEXT;
+
+typedef struct VkPipelineSampleLocationsStateCreateInfoEXT {
+    VkStructureType             sType;
+    const void*                 pNext;
+    VkBool32                    sampleLocationsEnable;
+    VkSampleLocationsInfoEXT    sampleLocationsInfo;
+} VkPipelineSampleLocationsStateCreateInfoEXT;
+
+typedef struct VkPhysicalDeviceSampleLocationsPropertiesEXT {
+    VkStructureType       sType;
+    void*                 pNext;
+    VkSampleCountFlags    sampleLocationSampleCounts;
+    VkExtent2D            maxSampleLocationGridSize;
+    float                 sampleLocationCoordinateRange[2];
+    uint32_t              sampleLocationSubPixelBits;
+    VkBool32              variableSampleLocations;
+} VkPhysicalDeviceSampleLocationsPropertiesEXT;
+
+typedef struct VkMultisamplePropertiesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkExtent2D         maxSampleLocationGridSize;
+} VkMultisamplePropertiesEXT;
+
+typedef void (VKAPI_PTR *PFN_vkCmdSetSampleLocationsEXT)(VkCommandBuffer commandBuffer, const VkSampleLocationsInfoEXT* pSampleLocationsInfo);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceMultisamplePropertiesEXT)(VkPhysicalDevice physicalDevice, VkSampleCountFlagBits samples, VkMultisamplePropertiesEXT* pMultisampleProperties);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkCmdSetSampleLocationsEXT(
+    VkCommandBuffer                             commandBuffer,
+    const VkSampleLocationsInfoEXT*             pSampleLocationsInfo);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMultisamplePropertiesEXT(
+    VkPhysicalDevice                            physicalDevice,
+    VkSampleCountFlagBits                       samples,
+    VkMultisamplePropertiesEXT*                 pMultisampleProperties);
+#endif
+
+
+#define VK_EXT_blend_operation_advanced 1
+#define VK_EXT_BLEND_OPERATION_ADVANCED_SPEC_VERSION 2
+#define VK_EXT_BLEND_OPERATION_ADVANCED_EXTENSION_NAME "VK_EXT_blend_operation_advanced"
+
+typedef enum VkBlendOverlapEXT {
+    VK_BLEND_OVERLAP_UNCORRELATED_EXT = 0,
+    VK_BLEND_OVERLAP_DISJOINT_EXT = 1,
+    VK_BLEND_OVERLAP_CONJOINT_EXT = 2,
+    VK_BLEND_OVERLAP_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkBlendOverlapEXT;
+typedef struct VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           advancedBlendCoherentOperations;
+} VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT;
+
+typedef struct VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    uint32_t           advancedBlendMaxColorAttachments;
+    VkBool32           advancedBlendIndependentBlend;
+    VkBool32           advancedBlendNonPremultipliedSrcColor;
+    VkBool32           advancedBlendNonPremultipliedDstColor;
+    VkBool32           advancedBlendCorrelatedOverlap;
+    VkBool32           advancedBlendAllOperations;
+} VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT;
+
+typedef struct VkPipelineColorBlendAdvancedStateCreateInfoEXT {
+    VkStructureType      sType;
+    const void*          pNext;
+    VkBool32             srcPremultiplied;
+    VkBool32             dstPremultiplied;
+    VkBlendOverlapEXT    blendOverlap;
+} VkPipelineColorBlendAdvancedStateCreateInfoEXT;
+
+
+
+#define VK_EXT_post_depth_coverage 1
+#define VK_EXT_POST_DEPTH_COVERAGE_SPEC_VERSION 1
+#define VK_EXT_POST_DEPTH_COVERAGE_EXTENSION_NAME "VK_EXT_post_depth_coverage"
+
+
+#define VK_EXT_image_drm_format_modifier 1
+#define VK_EXT_IMAGE_DRM_FORMAT_MODIFIER_SPEC_VERSION 1
+#define VK_EXT_IMAGE_DRM_FORMAT_MODIFIER_EXTENSION_NAME "VK_EXT_image_drm_format_modifier"
+typedef struct VkDrmFormatModifierPropertiesEXT {
+    uint64_t                drmFormatModifier;
+    uint32_t                drmFormatModifierPlaneCount;
+    VkFormatFeatureFlags    drmFormatModifierTilingFeatures;
+} VkDrmFormatModifierPropertiesEXT;
+
+typedef struct VkDrmFormatModifierPropertiesListEXT {
+    VkStructureType                      sType;
+    void*                                pNext;
+    uint32_t                             drmFormatModifierCount;
+    VkDrmFormatModifierPropertiesEXT*    pDrmFormatModifierProperties;
+} VkDrmFormatModifierPropertiesListEXT;
+
+typedef struct VkPhysicalDeviceImageDrmFormatModifierInfoEXT {
+    VkStructureType    sType;
+    const void*        pNext;
+    uint64_t           drmFormatModifier;
+    VkSharingMode      sharingMode;
+    uint32_t           queueFamilyIndexCount;
+    const uint32_t*    pQueueFamilyIndices;
+} VkPhysicalDeviceImageDrmFormatModifierInfoEXT;
+
+typedef struct VkImageDrmFormatModifierListCreateInfoEXT {
+    VkStructureType    sType;
+    const void*        pNext;
+    uint32_t           drmFormatModifierCount;
+    const uint64_t*    pDrmFormatModifiers;
+} VkImageDrmFormatModifierListCreateInfoEXT;
+
+typedef struct VkImageDrmFormatModifierExplicitCreateInfoEXT {
+    VkStructureType               sType;
+    const void*                   pNext;
+    uint64_t                      drmFormatModifier;
+    uint32_t                      drmFormatModifierPlaneCount;
+    const VkSubresourceLayout*    pPlaneLayouts;
+} VkImageDrmFormatModifierExplicitCreateInfoEXT;
+
+typedef struct VkImageDrmFormatModifierPropertiesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    uint64_t           drmFormatModifier;
+} VkImageDrmFormatModifierPropertiesEXT;
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetImageDrmFormatModifierPropertiesEXT)(VkDevice device, VkImage image, VkImageDrmFormatModifierPropertiesEXT* pProperties);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkGetImageDrmFormatModifierPropertiesEXT(
+    VkDevice                                    device,
+    VkImage                                     image,
+    VkImageDrmFormatModifierPropertiesEXT*      pProperties);
+#endif
+
+
+#define VK_EXT_filter_cubic 1
+#define VK_EXT_FILTER_CUBIC_SPEC_VERSION  3
+#define VK_EXT_FILTER_CUBIC_EXTENSION_NAME "VK_EXT_filter_cubic"
+typedef struct VkPhysicalDeviceImageViewImageFormatInfoEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkImageViewType    imageViewType;
+} VkPhysicalDeviceImageViewImageFormatInfoEXT;
+
+typedef struct VkFilterCubicImageViewImageFormatPropertiesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           filterCubic;
+    VkBool32           filterCubicMinmax;
+} VkFilterCubicImageViewImageFormatPropertiesEXT;
+
+
+
+#define VK_EXT_global_priority 1
+#define VK_EXT_GLOBAL_PRIORITY_SPEC_VERSION 2
+#define VK_EXT_GLOBAL_PRIORITY_EXTENSION_NAME "VK_EXT_global_priority"
+
+typedef enum VkQueueGlobalPriorityEXT {
+    VK_QUEUE_GLOBAL_PRIORITY_LOW_EXT = 128,
+    VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT = 256,
+    VK_QUEUE_GLOBAL_PRIORITY_HIGH_EXT = 512,
+    VK_QUEUE_GLOBAL_PRIORITY_REALTIME_EXT = 1024,
+    VK_QUEUE_GLOBAL_PRIORITY_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkQueueGlobalPriorityEXT;
+typedef struct VkDeviceQueueGlobalPriorityCreateInfoEXT {
+    VkStructureType             sType;
+    const void*                 pNext;
+    VkQueueGlobalPriorityEXT    globalPriority;
+} VkDeviceQueueGlobalPriorityCreateInfoEXT;
+
+
+
+#define VK_EXT_external_memory_host 1
+#define VK_EXT_EXTERNAL_MEMORY_HOST_SPEC_VERSION 1
+#define VK_EXT_EXTERNAL_MEMORY_HOST_EXTENSION_NAME "VK_EXT_external_memory_host"
+typedef struct VkImportMemoryHostPointerInfoEXT {
+    VkStructureType                       sType;
+    const void*                           pNext;
+    VkExternalMemoryHandleTypeFlagBits    handleType;
+    void*                                 pHostPointer;
+} VkImportMemoryHostPointerInfoEXT;
+
+typedef struct VkMemoryHostPointerPropertiesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    uint32_t           memoryTypeBits;
+} VkMemoryHostPointerPropertiesEXT;
+
+typedef struct VkPhysicalDeviceExternalMemoryHostPropertiesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkDeviceSize       minImportedHostPointerAlignment;
+} VkPhysicalDeviceExternalMemoryHostPropertiesEXT;
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryHostPointerPropertiesEXT)(VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, const void* pHostPointer, VkMemoryHostPointerPropertiesEXT* pMemoryHostPointerProperties);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryHostPointerPropertiesEXT(
+    VkDevice                                    device,
+    VkExternalMemoryHandleTypeFlagBits          handleType,
+    const void*                                 pHostPointer,
+    VkMemoryHostPointerPropertiesEXT*           pMemoryHostPointerProperties);
+#endif
+
+
+#define VK_EXT_calibrated_timestamps 1
+#define VK_EXT_CALIBRATED_TIMESTAMPS_SPEC_VERSION 1
+#define VK_EXT_CALIBRATED_TIMESTAMPS_EXTENSION_NAME "VK_EXT_calibrated_timestamps"
+
+typedef enum VkTimeDomainEXT {
+    VK_TIME_DOMAIN_DEVICE_EXT = 0,
+    VK_TIME_DOMAIN_CLOCK_MONOTONIC_EXT = 1,
+    VK_TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT = 2,
+    VK_TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT = 3,
+    VK_TIME_DOMAIN_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkTimeDomainEXT;
+typedef struct VkCalibratedTimestampInfoEXT {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkTimeDomainEXT    timeDomain;
+} VkCalibratedTimestampInfoEXT;
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT)(VkPhysicalDevice physicalDevice, uint32_t* pTimeDomainCount, VkTimeDomainEXT* pTimeDomains);
+typedef VkResult (VKAPI_PTR *PFN_vkGetCalibratedTimestampsEXT)(VkDevice device, uint32_t timestampCount, const VkCalibratedTimestampInfoEXT* pTimestampInfos, uint64_t* pTimestamps, uint64_t* pMaxDeviation);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceCalibrateableTimeDomainsEXT(
+    VkPhysicalDevice                            physicalDevice,
+    uint32_t*                                   pTimeDomainCount,
+    VkTimeDomainEXT*                            pTimeDomains);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetCalibratedTimestampsEXT(
+    VkDevice                                    device,
+    uint32_t                                    timestampCount,
+    const VkCalibratedTimestampInfoEXT*         pTimestampInfos,
+    uint64_t*                                   pTimestamps,
+    uint64_t*                                   pMaxDeviation);
+#endif
+
+
+#define VK_EXT_vertex_attribute_divisor 1
+#define VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_SPEC_VERSION 3
+#define VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME "VK_EXT_vertex_attribute_divisor"
+typedef struct VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    uint32_t           maxVertexAttribDivisor;
+} VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT;
+
+typedef struct VkVertexInputBindingDivisorDescriptionEXT {
+    uint32_t    binding;
+    uint32_t    divisor;
+} VkVertexInputBindingDivisorDescriptionEXT;
+
+typedef struct VkPipelineVertexInputDivisorStateCreateInfoEXT {
+    VkStructureType                                     sType;
+    const void*                                         pNext;
+    uint32_t                                            vertexBindingDivisorCount;
+    const VkVertexInputBindingDivisorDescriptionEXT*    pVertexBindingDivisors;
+} VkPipelineVertexInputDivisorStateCreateInfoEXT;
+
+typedef struct VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           vertexAttributeInstanceRateDivisor;
+    VkBool32           vertexAttributeInstanceRateZeroDivisor;
+} VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT;
+
+
+
+#define VK_EXT_pci_bus_info 1
+#define VK_EXT_PCI_BUS_INFO_SPEC_VERSION  2
+#define VK_EXT_PCI_BUS_INFO_EXTENSION_NAME "VK_EXT_pci_bus_info"
+typedef struct VkPhysicalDevicePCIBusInfoPropertiesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    uint32_t           pciDomain;
+    uint32_t           pciBus;
+    uint32_t           pciDevice;
+    uint32_t           pciFunction;
+} VkPhysicalDevicePCIBusInfoPropertiesEXT;
+
+
+
+#define VK_EXT_subgroup_size_control 1
+#define VK_EXT_SUBGROUP_SIZE_CONTROL_SPEC_VERSION 2
+#define VK_EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME "VK_EXT_subgroup_size_control"
+typedef struct VkPhysicalDeviceSubgroupSizeControlFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           subgroupSizeControl;
+    VkBool32           computeFullSubgroups;
+} VkPhysicalDeviceSubgroupSizeControlFeaturesEXT;
+
+typedef struct VkPhysicalDeviceSubgroupSizeControlPropertiesEXT {
+    VkStructureType       sType;
+    void*                 pNext;
+    uint32_t              minSubgroupSize;
+    uint32_t              maxSubgroupSize;
+    uint32_t              maxComputeWorkgroupSubgroups;
+    VkShaderStageFlags    requiredSubgroupSizeStages;
+} VkPhysicalDeviceSubgroupSizeControlPropertiesEXT;
+
+typedef struct VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    uint32_t           requiredSubgroupSize;
+} VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT;
+
+
+
+#define VK_EXT_shader_image_atomic_int64 1
+#define VK_EXT_SHADER_IMAGE_ATOMIC_INT64_SPEC_VERSION 1
+#define VK_EXT_SHADER_IMAGE_ATOMIC_INT64_EXTENSION_NAME "VK_EXT_shader_image_atomic_int64"
+typedef struct VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           shaderImageInt64Atomics;
+    VkBool32           sparseImageInt64Atomics;
+} VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT;
+
+
+
+#define VK_EXT_memory_budget 1
+#define VK_EXT_MEMORY_BUDGET_SPEC_VERSION 1
+#define VK_EXT_MEMORY_BUDGET_EXTENSION_NAME "VK_EXT_memory_budget"
+typedef struct VkPhysicalDeviceMemoryBudgetPropertiesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkDeviceSize       heapBudget[VK_MAX_MEMORY_HEAPS];
+    VkDeviceSize       heapUsage[VK_MAX_MEMORY_HEAPS];
+} VkPhysicalDeviceMemoryBudgetPropertiesEXT;
+
+
+
+#define VK_EXT_fragment_shader_interlock 1
+#define VK_EXT_FRAGMENT_SHADER_INTERLOCK_SPEC_VERSION 1
+#define VK_EXT_FRAGMENT_SHADER_INTERLOCK_EXTENSION_NAME "VK_EXT_fragment_shader_interlock"
+typedef struct VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           fragmentShaderSampleInterlock;
+    VkBool32           fragmentShaderPixelInterlock;
+    VkBool32           fragmentShaderShadingRateInterlock;
+} VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT;
+
+
+
+#define VK_EXT_ycbcr_image_arrays 1
+#define VK_EXT_YCBCR_IMAGE_ARRAYS_SPEC_VERSION 1
+#define VK_EXT_YCBCR_IMAGE_ARRAYS_EXTENSION_NAME "VK_EXT_ycbcr_image_arrays"
+typedef struct VkPhysicalDeviceYcbcrImageArraysFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           ycbcrImageArrays;
+} VkPhysicalDeviceYcbcrImageArraysFeaturesEXT;
+
+
+
+#define VK_EXT_headless_surface 1
+#define VK_EXT_HEADLESS_SURFACE_SPEC_VERSION 1
+#define VK_EXT_HEADLESS_SURFACE_EXTENSION_NAME "VK_EXT_headless_surface"
+typedef VkFlags VkHeadlessSurfaceCreateFlagsEXT;
+typedef struct VkHeadlessSurfaceCreateInfoEXT {
+    VkStructureType                    sType;
+    const void*                        pNext;
+    VkHeadlessSurfaceCreateFlagsEXT    flags;
+} VkHeadlessSurfaceCreateInfoEXT;
+
+typedef VkResult (VKAPI_PTR *PFN_vkCreateHeadlessSurfaceEXT)(VkInstance instance, const VkHeadlessSurfaceCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateHeadlessSurfaceEXT(
+    VkInstance                                  instance,
+    const VkHeadlessSurfaceCreateInfoEXT*       pCreateInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkSurfaceKHR*                               pSurface);
+#endif
+
+
+#define VK_EXT_line_rasterization 1
+#define VK_EXT_LINE_RASTERIZATION_SPEC_VERSION 1
+#define VK_EXT_LINE_RASTERIZATION_EXTENSION_NAME "VK_EXT_line_rasterization"
+
+typedef enum VkLineRasterizationModeEXT {
+    VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT = 0,
+    VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT = 1,
+    VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT = 2,
+    VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT = 3,
+    VK_LINE_RASTERIZATION_MODE_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkLineRasterizationModeEXT;
+typedef struct VkPhysicalDeviceLineRasterizationFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           rectangularLines;
+    VkBool32           bresenhamLines;
+    VkBool32           smoothLines;
+    VkBool32           stippledRectangularLines;
+    VkBool32           stippledBresenhamLines;
+    VkBool32           stippledSmoothLines;
+} VkPhysicalDeviceLineRasterizationFeaturesEXT;
+
+typedef struct VkPhysicalDeviceLineRasterizationPropertiesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    uint32_t           lineSubPixelPrecisionBits;
+} VkPhysicalDeviceLineRasterizationPropertiesEXT;
+
+typedef struct VkPipelineRasterizationLineStateCreateInfoEXT {
+    VkStructureType               sType;
+    const void*                   pNext;
+    VkLineRasterizationModeEXT    lineRasterizationMode;
+    VkBool32                      stippledLineEnable;
+    uint32_t                      lineStippleFactor;
+    uint16_t                      lineStipplePattern;
+} VkPipelineRasterizationLineStateCreateInfoEXT;
+
+typedef void (VKAPI_PTR *PFN_vkCmdSetLineStippleEXT)(VkCommandBuffer commandBuffer, uint32_t lineStippleFactor, uint16_t lineStipplePattern);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkCmdSetLineStippleEXT(
+    VkCommandBuffer                             commandBuffer,
+    uint32_t                                    lineStippleFactor,
+    uint16_t                                    lineStipplePattern);
+#endif
+
+
+#define VK_EXT_shader_atomic_float 1
+#define VK_EXT_SHADER_ATOMIC_FLOAT_SPEC_VERSION 1
+#define VK_EXT_SHADER_ATOMIC_FLOAT_EXTENSION_NAME "VK_EXT_shader_atomic_float"
+typedef struct VkPhysicalDeviceShaderAtomicFloatFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           shaderBufferFloat32Atomics;
+    VkBool32           shaderBufferFloat32AtomicAdd;
+    VkBool32           shaderBufferFloat64Atomics;
+    VkBool32           shaderBufferFloat64AtomicAdd;
+    VkBool32           shaderSharedFloat32Atomics;
+    VkBool32           shaderSharedFloat32AtomicAdd;
+    VkBool32           shaderSharedFloat64Atomics;
+    VkBool32           shaderSharedFloat64AtomicAdd;
+    VkBool32           shaderImageFloat32Atomics;
+    VkBool32           shaderImageFloat32AtomicAdd;
+    VkBool32           sparseImageFloat32Atomics;
+    VkBool32           sparseImageFloat32AtomicAdd;
+} VkPhysicalDeviceShaderAtomicFloatFeaturesEXT;
+
+
+
+#define VK_EXT_index_type_uint8 1
+#define VK_EXT_INDEX_TYPE_UINT8_SPEC_VERSION 1
+#define VK_EXT_INDEX_TYPE_UINT8_EXTENSION_NAME "VK_EXT_index_type_uint8"
+typedef struct VkPhysicalDeviceIndexTypeUint8FeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           indexTypeUint8;
+} VkPhysicalDeviceIndexTypeUint8FeaturesEXT;
+
+
+
+#define VK_EXT_extended_dynamic_state 1
+#define VK_EXT_EXTENDED_DYNAMIC_STATE_SPEC_VERSION 1
+#define VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME "VK_EXT_extended_dynamic_state"
+typedef struct VkPhysicalDeviceExtendedDynamicStateFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           extendedDynamicState;
+} VkPhysicalDeviceExtendedDynamicStateFeaturesEXT;
+
+typedef void (VKAPI_PTR *PFN_vkCmdSetCullModeEXT)(VkCommandBuffer commandBuffer, VkCullModeFlags cullMode);
+typedef void (VKAPI_PTR *PFN_vkCmdSetFrontFaceEXT)(VkCommandBuffer commandBuffer, VkFrontFace frontFace);
+typedef void (VKAPI_PTR *PFN_vkCmdSetPrimitiveTopologyEXT)(VkCommandBuffer commandBuffer, VkPrimitiveTopology primitiveTopology);
+typedef void (VKAPI_PTR *PFN_vkCmdSetViewportWithCountEXT)(VkCommandBuffer commandBuffer, uint32_t viewportCount, const VkViewport* pViewports);
+typedef void (VKAPI_PTR *PFN_vkCmdSetScissorWithCountEXT)(VkCommandBuffer commandBuffer, uint32_t scissorCount, const VkRect2D* pScissors);
+typedef void (VKAPI_PTR *PFN_vkCmdBindVertexBuffers2EXT)(VkCommandBuffer commandBuffer, uint32_t firstBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets, const VkDeviceSize* pSizes, const VkDeviceSize* pStrides);
+typedef void (VKAPI_PTR *PFN_vkCmdSetDepthTestEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 depthTestEnable);
+typedef void (VKAPI_PTR *PFN_vkCmdSetDepthWriteEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 depthWriteEnable);
+typedef void (VKAPI_PTR *PFN_vkCmdSetDepthCompareOpEXT)(VkCommandBuffer commandBuffer, VkCompareOp depthCompareOp);
+typedef void (VKAPI_PTR *PFN_vkCmdSetDepthBoundsTestEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 depthBoundsTestEnable);
+typedef void (VKAPI_PTR *PFN_vkCmdSetStencilTestEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 stencilTestEnable);
+typedef void (VKAPI_PTR *PFN_vkCmdSetStencilOpEXT)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, VkStencilOp failOp, VkStencilOp passOp, VkStencilOp depthFailOp, VkCompareOp compareOp);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkCmdSetCullModeEXT(
+    VkCommandBuffer                             commandBuffer,
+    VkCullModeFlags                             cullMode);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetFrontFaceEXT(
+    VkCommandBuffer                             commandBuffer,
+    VkFrontFace                                 frontFace);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetPrimitiveTopologyEXT(
+    VkCommandBuffer                             commandBuffer,
+    VkPrimitiveTopology                         primitiveTopology);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetViewportWithCountEXT(
+    VkCommandBuffer                             commandBuffer,
+    uint32_t                                    viewportCount,
+    const VkViewport*                           pViewports);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetScissorWithCountEXT(
+    VkCommandBuffer                             commandBuffer,
+    uint32_t                                    scissorCount,
+    const VkRect2D*                             pScissors);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdBindVertexBuffers2EXT(
+    VkCommandBuffer                             commandBuffer,
+    uint32_t                                    firstBinding,
+    uint32_t                                    bindingCount,
+    const VkBuffer*                             pBuffers,
+    const VkDeviceSize*                         pOffsets,
+    const VkDeviceSize*                         pSizes,
+    const VkDeviceSize*                         pStrides);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthTestEnableEXT(
+    VkCommandBuffer                             commandBuffer,
+    VkBool32                                    depthTestEnable);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthWriteEnableEXT(
+    VkCommandBuffer                             commandBuffer,
+    VkBool32                                    depthWriteEnable);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthCompareOpEXT(
+    VkCommandBuffer                             commandBuffer,
+    VkCompareOp                                 depthCompareOp);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBoundsTestEnableEXT(
+    VkCommandBuffer                             commandBuffer,
+    VkBool32                                    depthBoundsTestEnable);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilTestEnableEXT(
+    VkCommandBuffer                             commandBuffer,
+    VkBool32                                    stencilTestEnable);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilOpEXT(
+    VkCommandBuffer                             commandBuffer,
+    VkStencilFaceFlags                          faceMask,
+    VkStencilOp                                 failOp,
+    VkStencilOp                                 passOp,
+    VkStencilOp                                 depthFailOp,
+    VkCompareOp                                 compareOp);
+#endif
+
+
+#define VK_EXT_shader_demote_to_helper_invocation 1
+#define VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_SPEC_VERSION 1
+#define VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME "VK_EXT_shader_demote_to_helper_invocation"
+typedef struct VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           shaderDemoteToHelperInvocation;
+} VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT;
+
+
+
+#define VK_EXT_texel_buffer_alignment 1
+#define VK_EXT_TEXEL_BUFFER_ALIGNMENT_SPEC_VERSION 1
+#define VK_EXT_TEXEL_BUFFER_ALIGNMENT_EXTENSION_NAME "VK_EXT_texel_buffer_alignment"
+typedef struct VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           texelBufferAlignment;
+} VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT;
+
+typedef struct VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkDeviceSize       storageTexelBufferOffsetAlignmentBytes;
+    VkBool32           storageTexelBufferOffsetSingleTexelAlignment;
+    VkDeviceSize       uniformTexelBufferOffsetAlignmentBytes;
+    VkBool32           uniformTexelBufferOffsetSingleTexelAlignment;
+} VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT;
+
+
+
+#define VK_EXT_robustness2 1
+#define VK_EXT_ROBUSTNESS_2_SPEC_VERSION  1
+#define VK_EXT_ROBUSTNESS_2_EXTENSION_NAME "VK_EXT_robustness2"
+typedef struct VkPhysicalDeviceRobustness2FeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           robustBufferAccess2;
+    VkBool32           robustImageAccess2;
+    VkBool32           nullDescriptor;
+} VkPhysicalDeviceRobustness2FeaturesEXT;
+
+typedef struct VkPhysicalDeviceRobustness2PropertiesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkDeviceSize       robustStorageBufferAccessSizeAlignment;
+    VkDeviceSize       robustUniformBufferAccessSizeAlignment;
+} VkPhysicalDeviceRobustness2PropertiesEXT;
+
+
+
+#define VK_EXT_custom_border_color 1
+#define VK_EXT_CUSTOM_BORDER_COLOR_SPEC_VERSION 12
+#define VK_EXT_CUSTOM_BORDER_COLOR_EXTENSION_NAME "VK_EXT_custom_border_color"
+typedef struct VkSamplerCustomBorderColorCreateInfoEXT {
+    VkStructureType      sType;
+    const void*          pNext;
+    VkClearColorValue    customBorderColor;
+    VkFormat             format;
+} VkSamplerCustomBorderColorCreateInfoEXT;
+
+typedef struct VkPhysicalDeviceCustomBorderColorPropertiesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    uint32_t           maxCustomBorderColorSamplers;
+} VkPhysicalDeviceCustomBorderColorPropertiesEXT;
+
+typedef struct VkPhysicalDeviceCustomBorderColorFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           customBorderColors;
+    VkBool32           customBorderColorWithoutFormat;
+} VkPhysicalDeviceCustomBorderColorFeaturesEXT;
+
+
+
+#define VK_EXT_image_robustness 1
+#define VK_EXT_IMAGE_ROBUSTNESS_SPEC_VERSION 1
+#define VK_EXT_IMAGE_ROBUSTNESS_EXTENSION_NAME "VK_EXT_image_robustness"
+typedef struct VkPhysicalDeviceImageRobustnessFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           robustImageAccess;
+} VkPhysicalDeviceImageRobustnessFeaturesEXT;
+
+
+
+#define VK_EXT_4444_formats 1
+#define VK_EXT_4444_FORMATS_SPEC_VERSION  1
+#define VK_EXT_4444_FORMATS_EXTENSION_NAME "VK_EXT_4444_formats"
+typedef struct VkPhysicalDevice4444FormatsFeaturesEXT {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           formatA4R4G4B4;
+    VkBool32           formatA4B4G4R4;
+} VkPhysicalDevice4444FormatsFeaturesEXT;
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
index f7858f5..c580677 100644 (file)
@@ -164,7 +164,7 @@ if (DEQP_USE_X11)
        if (DEQP_USE_XCB)
                find_package(XCB REQUIRED)
                target_link_libraries(tcutil-platform ${XCB_LIBRARIES})
-               add_definitions(-DDEQP_SUPPORT_XCB=1)
+               target_compile_definitions(tcutil-platform PUBLIC DEQP_SUPPORT_XCB=1)
        endif ()
        if (DEQP_SUPPORT_GLX)
          # GLX functions don't currently have wrappers, so link directly to libGL.
@@ -173,6 +173,42 @@ if (DEQP_USE_X11)
        if (DEQP_USE_WAYLAND)
                find_package(Wayland REQUIRED)
                target_link_libraries(tcutil-platform ${WAYLAND_LIBRARIES})
-               add_definitions(-DDEQP_SUPPORT_WAYLAND=1)
+               target_compile_definitions(tcutil-platform PUBLIC DEQP_SUPPORT_WAYLAND=1)
        endif ()
 endif ()
+
+# Add similar library for Vulkan SC ( uses same code as vkutil, but with different INL files )
+add_library(tcutil-sc-platform STATIC ${TCUTIL_PLATFORM_SRCS})
+target_include_directories(tcutil-sc-platform BEFORE PUBLIC ${CMAKE_SOURCE_DIR}/external/vulkancts/framework/vulkan/generated/vulkansc)
+
+# Add vkscutil to the deps before tcutil so that it picks up the c++11 dependencies
+target_link_libraries(tcutil-sc-platform vkscutil)
+
+target_link_libraries(tcutil-sc-platform tcutil ${TCUTIL_PLATFORM_LIBS})
+
+# Always link to glutil as some platforms such as Win32 always support GL
+target_link_libraries(tcutil-sc-platform glutil)
+
+# Always link to eglutil
+target_link_libraries(tcutil-sc-platform eglutil)
+
+# X11 libraries
+if (DEQP_USE_X11)
+       find_package(X11 REQUIRED)
+       target_link_libraries(tcutil-sc-platform ${X11_LIBRARIES})
+       if (DEQP_USE_XCB)
+               find_package(XCB REQUIRED)
+               target_link_libraries(tcutil-sc-platform ${XCB_LIBRARIES})
+               target_compile_definitions(tcutil-sc-platform PUBLIC DEQP_SUPPORT_XCB=1)
+       endif ()
+       if (DEQP_SUPPORT_GLX)
+         # GLX functions don't currently have wrappers, so link directly to libGL.
+         target_link_libraries(tcutil-sc-platform GL)
+       endif ()
+       if (DEQP_USE_WAYLAND)
+               find_package(Wayland REQUIRED)
+               target_link_libraries(tcutil-sc-platform ${WAYLAND_LIBRARIES})
+               target_compile_definitions(tcutil-sc-platform PUBLIC DEQP_SUPPORT_WAYLAND=1)
+       endif ()
+endif ()
+
index 7e1c5ca..bb02bc2 100644 (file)
@@ -134,4 +134,4 @@ include_directories(
 
 PCH(DEQP_EGL_SRCS ../pch.cpp)
 
-add_deqp_module(deqp-egl "${DEQP_EGL_SRCS}" "${DEQP_EGL_LIBS}" teglTestPackageEntry.cpp)
+add_deqp_module(deqp-egl "${DEQP_EGL_SRCS}" "${DEQP_EGL_LIBS}" "tcutil-platform" teglTestPackageEntry.cpp)
index e23cb02..ead77c0 100644 (file)
@@ -38,7 +38,7 @@ set(DEQP_GLES2_LIBS
        ${DEQP_GLES2_LIBRARIES}
        )
 
-add_deqp_module(deqp-gles2 "${DEQP_GLES2_SRCS}" "${DEQP_GLES2_LIBS}" tes2TestPackageEntry.cpp)
+add_deqp_module(deqp-gles2 "${DEQP_GLES2_SRCS}" "${DEQP_GLES2_LIBS}" "tcutil-platform" tes2TestPackageEntry.cpp)
 
 # Data directories
 add_data_dir(deqp-gles2 ../../data/gles2/data          gles2/data)
index 013486c..486bd39 100644 (file)
@@ -38,7 +38,7 @@ set(DEQP_GLES3_LIBS
        ${DEQP_GLES3_LIBRARIES}
        )
 
-add_deqp_module(deqp-gles3 "${DEQP_GLES3_SRCS}" "${DEQP_GLES3_LIBS}" tes3TestPackageEntry.cpp)
+add_deqp_module(deqp-gles3 "${DEQP_GLES3_SRCS}" "${DEQP_GLES3_LIBS}" "tcutil-platform" tes3TestPackageEntry.cpp)
 
 # Data directories
 add_data_dir(deqp-gles3 ../../data/gles3/data                                                          gles3/data)
index 0d4cfc9..db9c32c 100644 (file)
@@ -32,7 +32,7 @@ set(DEQP_GLES31_LIBS
        ${DEQP_GLES3_LIBRARIES}
        )
 
-add_deqp_module(deqp-gles31 "${DEQP_GLES31_SRCS}" "${DEQP_GLES31_LIBS}" tes31TestPackageEntry.cpp)
+add_deqp_module(deqp-gles31 "${DEQP_GLES31_SRCS}" "${DEQP_GLES31_LIBS}" "tcutil-platform" tes31TestPackageEntry.cpp)
 
 # Data directories
 add_data_dir(deqp-gles31 ../../data/gles31/data                gles31/data)
index cfe0326..73b67fc 100644 (file)
@@ -35,6 +35,6 @@ set(DE_INTERNAL_TESTS_LIBS
        vkutil
        )
 
-add_deqp_module(de-internal-tests "${DE_INTERNAL_TESTS_SRCS}" "${DE_INTERNAL_TESTS_LIBS}" ditTestPackageEntry.cpp)
+add_deqp_module(de-internal-tests "${DE_INTERNAL_TESTS_SRCS}" "${DE_INTERNAL_TESTS_LIBS}" "tcutil-platform" ditTestPackageEntry.cpp)
 
 add_data_dir(de-internal-tests ../../data/internal/data        internal/data)
index d0d4f8e..fbacce6 100644 (file)
@@ -52,6 +52,7 @@ GLES2_MODULE                                  = getModuleByName("dEQP-GLES2")
 GLES3_MODULE                                   = getModuleByName("dEQP-GLES3")
 GLES31_MODULE                                  = getModuleByName("dEQP-GLES31")
 VULKAN_MODULE                                  = getModuleByName("dEQP-VK")
+VULKANSC_MODULE                                        = getModuleByName("dEQP-VKSC")
 
 # Master
 
@@ -262,8 +263,18 @@ MASTER_VULKAN_PKG                          = Package(module = VULKAN_MODULE, configurations = [
                                          runtime               = "10m"),
        ])
 
+MASTER_VULKANSC_FILTERS                        = [
+               include("vksc-master.txt"),
+       ]
+MASTER_VULKANSC_PKG                            = Package(module = VULKANSC_MODULE, configurations = [
+               Configuration(name                      = "master",
+                                         filters               = MASTER_VULKANSC_FILTERS,
+                                         runtime               = "2h39m",
+                                         runByDefault  = False),
+       ])
+
 MUSTPASS_LISTS                         = [
-               Mustpass(project = CTS_PROJECT, version = "master",             packages = [MASTER_EGL_PKG, MASTER_GLES2_PKG, MASTER_GLES3_PKG, MASTER_GLES31_PKG, MASTER_VULKAN_PKG])
+               Mustpass(project = CTS_PROJECT, version = "master",             packages = [MASTER_EGL_PKG, MASTER_GLES2_PKG, MASTER_GLES3_PKG, MASTER_GLES31_PKG, MASTER_VULKAN_PKG, MASTER_VULKANSC_PKG])
        ]
 
 if __name__ == "__main__":
index 8b15191..e2edec5 100644 (file)
@@ -44,6 +44,7 @@ MODULES = [
        Module("dEQP-GLES3",    "gles3",                                                                "deqp-gles3"),
        Module("dEQP-GLES31",   "gles31",                                                               "deqp-gles31"),
        Module("dEQP-VK",               "../external/vulkancts/modules/vulkan", "deqp-vk"),
+       Module("dEQP-VKSC",             "../external/vulkancts/modules/vulkan", "deqp-vksc"),
 ]
 
 DEFAULT_BUILD_DIR      = os.path.join(tempfile.gettempdir(), "deqp-caselists", "{targetName}-{buildType}")
index e49d743..8c951c0 100644 (file)
@@ -191,6 +191,8 @@ EARLY_SPECIAL_RECIPES       = [
                        RunScript(os.path.join("external", "vulkancts", "scripts", "gen_framework.py")),
                        RunScript(os.path.join("external", "vulkancts", "scripts", "gen_framework_c.py")),
                        RunScript(os.path.join("external", "vulkancts", "scripts", "gen_ext_deps.py")),
+                       RunScript(os.path.join("external", "vulkancts", "scripts", "gen_framework.py"), lambda env: ["--api", "SC"] ),
+                       RunScript(os.path.join("external", "vulkancts", "scripts", "gen_framework_c.py"), lambda env: ["--api", "SC"] ),
                        RunScript(os.path.join("scripts", "gen_android_mk.py"))
                ]),
 ]